最近 RethinkDB がいいらしいと聞いたので、MongoDB と性能面で比べてみました。機能的な比較は公式サイトの Technical comparison: RethinkDB and MongoDB を参照してください。
重要: RethinkDB はまだベータ扱いなので、開発中のものとして見てください。正式リリースまでに性能が変化する可能性もあります。
テスト
テスト環境は CoreOS on VMware Fusion で、それぞれ別の Docker コンテナで起動させました。バイナリは公式提供されているものを使用。シングル構成でクラスタリングはしていません。
- ベースコンテナ: ubuntu:saucy
- Linux Kernel: 3.13.6+
- RethinkDB: 1.11.3
- MongoDB: 2.4.9
クライアントは Go 1.2.1 で書いて、CoreOS 上で動かしました(ソースコード)。MongoDB のドキュメントで使われている zips.json にある 29469 件の zip コードの JSON を投入するのにかかった時間と、読み込みにかかった時間を計測しました。
結果
Write | Read | |
---|---|---|
RethinkDB | 19.914507s | 0.928185s |
MongoDB | 5.040683s | 0.167371s |
圧倒的ではないか、MongoDB は。
というわけで、単純に読み書き性能を期待するなら MongoDB を選ぶべきです。
ただ、RethinkDB には面白い機能がいくつかあって、テーブルの join ができたり、ReQL を組み立てることでサーバサイドでデータを変形したり、sharding や replication を簡単に構成できたりします。MongoDB のように最初にでっかいファイルを allocate することも、3台以上の奇数台じゃないと replication をうまく構成できないなんてこともありません。
そういうところに魅力を感じるのであれば、RethinkDB を試してみるのもいいでしょう。とはいえ、自動フェイルオーバーはまだできないんですけどね...。
今後の RethinkDB に期待ですね!