MongoDB 1.6はシャーディングや障害発生時に自動的にデータベースの切り替えや復元を行うレプリカセットの追加により、スケールアウト問題を解決する。
シャーディング
MongoDB 1.6の主な改善点は、シャーディングによるスケールアウト機能だ。MongoDBはダウンタイムなしで、データベースやコレクション、コレクション内のオブジェクトを複数のシャードにまたがって自動的に配布する。多くの場合、いくつかのデータコレクションが他のものよりもずっと大きくなる傾向があるので、シャーディングコレクションはより望ましいものであり、データベース全体を配布するのは無駄である。
シャード構成は次の図で示されているように、シャード、ルーティングプロセス、構成サーバからなっている。
mongod – メインのデータベースプロセス。1つのシャードを表し、自動フェイルオーバーを提供するためのレプリカセットを構成する。mongodプロセスのうちの1つが、レプリカセットのマスタとなる。マスタがダウンした場合は、他のサーバにマスタの役割が移譲される。
mongos – ルーティングプロセス。単一のサーバであるかのように、シャードされたデータベースとクライアントを連携させる。必要があれば複数のmongosサーバをたてることができる。それらは状態を共有しない。
config servers – 各構成サーバは、システムにどんなシャードが存在しているかといったような、クラスタのメタデータを含んでいる。保護のために複数の構成サーバがあり、1つがダウンしたら、構成サーバは読み取り専用モードになる。ただし、シャードは読み書きモードで動作し続ける。
レプリカセット
MongoDB 1.6のもう1つも主要な機能は、初期のマスタ/スレーブレプリケーションをベースに、自動フェイルオーバーとリカバリ機能を追加したレプリカセットである。クラスタには最大7つのサーバーがあり、それぞれのノードがプライマリノードになることができる。あらゆる書き込みはプライマリノードに対して行われ、一方各ノードから読み込むことができる。
その他の改善
$orクエリ – $or
演算子はクエリ内でブーリアンや式をサポートする。
db.foo.find( { name : "bob" , $or : [ { a : 1 } , { b : 2 } ] } )
Windows Service – mongodはWindowsサービスとして実行できる。しかしmongosをWindowsサービスにすることはできない。
wオプション –n番目のサーバに操作が伝播するまで、書き込みをブロックすることができる。
ドキュメントデータベースのサポート企業である、10genのCEO兼共同出資者、Dwight Merriman氏によれば、MongoDB 1.6はすでにbit.lyやfoursquareによってプロダクトの中で使われている。bit.lyはピーク時には1000台のサーバを並列化して、およそ5000万人のユーザを支えている。また、Foursquareは数百万のユーザーをかかえており、PostresからMongoDBへ移行したとのことだ。
MongoDB 1.6についてもっと知りたければ、リリースノートやMongoDB Jiraを参照してほしい。