NoSQLデータベースを試してみる

第6回パフォーマンスはどうなの

はじめに

これまで数回にわたって、代表的なNoSQLデータベースを取り上げ、利用シーンや具体的なコード例について紹介してきました。連載の最後となる今回は、それぞれのNoSQLデータベースのパフォーマンスについて比較してみたいと思います。

それぞれのデータベースの特徴

まず、これまで紹介してきたNoSQLデータベースやRDBMSの特徴を簡単にまとめてみます。それぞれに以下のような特徴がありました。

表1 それぞれのデータベースの特徴
データベースタイプ特徴
MySQL, PostgreSQLRDBMSデータの一貫性、JOIN、トランザクション
memcached揮発性KVS非常に高速、シンプルで扱いやすい
TokyoTyrant永続性KVSmemcachedの代替、テーブルデータベース
MongoDBドキュメント指向型DBスキーマレス、柔軟な検索が可能
HBase, Cassandra列指向DB列指向、大規模データに強み

この表では言及していませんが、Consistent Hashingやshardingによって分散させやすいというのはすべてのNoSQLデータベースが備えている特徴でしたね。

検証用サーバの準備

では実際のパフォーマンスを比較してみましょう。比較のため、10,000件のデータの書込み/読込みを行います。実行にあたり各種サーバを起動します。

リスト1 検証用サーバの起動コマンド
# memcached
memcached -u nobody -d

# TokyoTyrant
sudo ttserver -pid /var/ttserver/pid -dmn /var/ttserver/bench.tch

# MongoDB
mongod --dbpath ~/tmp/mongodb & 

# HBase
sudo /etc/init.d/hadoop-0.20-namenode start
sudo /etc/init.d/hadoop-0.20-jobtracker start
sudo /etc/init.d/hadoop-0.20-datanode start
sudo /etc/init.d/hadoop-0.20-tasktracker start
sudo /etc/init.d/hadoop-hbase-master star
hbase org.apache.hadoop.hbase.rest.Main &

データ書込み時のパフォーマンス

最初に書込みのパフォーマンスを比較してみます[1]⁠。ベンチマークに使ったスクリプトはこちらに置いてあります。

ベンチマークスクリプトを見ればわかりますが、これは非常にシンプルなデータの書込みを行った結果です。 もちろん、正確に検証するためには実際のユースケースに近づけたり設定を最適化したりする必要があると思いますが、参考になるのではないでしょうか。

結果を見るかぎり、やはりmemcachedとTokyoTyrantは高速ですね。MongoDBもMySQLと比べると高速です。HBaseはMySQL(InnoDB)と同程度でしょうか。HBaseなどは大量データの書込みに強いので、大規模なデータで試すと結果は変わってくるかもしれません。

データベースusersystemtotalreal
InnoDB5.5200000.2400005.76000012.129957
InnoDB3.1600000.0900003.25000023.457241
memcached0.5900000.1400000.7300001.521368
TokyoTyrant0.6100000.0800000.6900001.630604
MongoDB3.4000000.0600003.4600007.619440
HBase6.4400000.5600007.00000023.114616

データ読込み時のパフォーマンス

次に、データの読込みについてもパフォーマンスを計測してみました。RDBMSとMongoDBの場合は属性の値で、memcached, TokyoTyrant, HBaseの場合にはkeyでデータを検索した場合です。

結果を見ると、やはりmemcachedとTokyoTyrantは圧倒的に高速です。HBaseはそれほど早くは無いようですね。MongoDBもMySQL(InnoDB)と比べると早いかな、といった程度です[2]⁠。

タイプusersystemtotalreal
MyISAM1.1100000.0500001.16000020.795722
InnoDB1.2900000.0600001.35000043.346054
memcached0.0000000.0000000.0000000.025663
TokyoTyrant0.0000000.0000000.0000000.067683
MongoDB5.0600000.1500005.21000027.627721
HBase8.5700000.8800009.45000028.567611

まとめ

これまで扱ってきたNoSQLデータベースやRDBMSを、パフォーマンスの観点から比較してみました。あくまでも単純なデータの書込み/読込みを比較しただけですが、どのNoSQLデータベースがどの程度のパフォーマンスを出すのか、ある程度わかったのではないでしょうか。

高速なデータのやりとり、一貫性の保証、可用性、スキーマレス、大規模データの取り扱い、分散のさせやすさ…NoSQLデータベースにはタイプ毎に様々な強みがあり、うまく利用すれば非常に強力なツールであることは間違いありません。しかし、一方で運用コストの増加やNoSQLデータベースを選択したことによるコード修正[3]などのデメリットもあります。

今後もNoSQLデータベースは注目されていくと思いますが、採用することで得られるメリットとデメリットを天秤にかけて(もちろんパフォーマンスだけではなく、扱いやすさなども⁠⁠、適材適所で利用していくのが良いでしょう。

おすすめ記事

記事・ニュース一覧