BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ジャーナリングで信頼性が向上した MongoDB 1.8

ジャーナリングで信頼性が向上した MongoDB 1.8

原文(投稿日:2011/03/25)へのリンク

ドキュメント指向データベースエンジン MongoDB のバージョン 1.8 が 3月16日にリリースされた。主な変更点はジャーナリングの追加,シャーディングのパフォーマンス向上,shell のタブ補完などだ。

ジャーナリングは,ライトアヘッド(write-ahead) REDO ログによって,MongoDB にさらなる堅牢性を追加するものだ。ジャーナリングが有効な状態では,更新操作はまずジャーナルログに記録される。周期的なグループコミット (現状では 100ms 毎) 処理が,この変更を実際のデータに書き戻す役目を担う。サーバが正常にシャットダウンされれば,ジャーナルログはクリアされる。サーバ起動時にジャーナルログが存在する場合は,その内容を再実行する。これによって,サーバクラッシュ以前に反映されていなかったジャーナルログの内容は,ユーザの接続以前に実行されることが保証される。コミット間にある 100ms の開きは,将来のリリースではもっと狭くなるだろう。

MongoDB は NoSQL データベースの一例だ。SQL Server のようなリレーショナルデータベースとは違って,MongoDB のデータはドキュメントを基本的な構成単位とする。ドキュメントには JavaScript のオブジェクトのように,文字列やオブジェクト,配列,正規表現,あるいはコードなどの型を持った,キー・バリューのペア列が格納される。ドキュメントは BSON フォーマットでストアされ,ドキュメントタイプ別のコレクション (SQL Server のテーブルに相当) にグループ化される。MongoDB におけるスキーマ設計の基本は,ドキュメントそれ自身をコレクションとする価値があるか,あるいは他のコレクションの内部に属するべきか,を判断することだ。内部ドキュメントは,ちょうどクラスのメンバオブジェクトのように動作する。リレーショナルシステムでは,オーダ (order) 情報を格納するテーブルと,オーダ項目を格納する外部キー付きテーブルの2つを使用するのが一般的だが,同じシナリオに対して MongoDB で推奨されるアプローチは,オーダの単一コレクションを用意して,各オーダ内にオーダ項目の配列を保存する,という方法だ。

水平スケーリング (Horizontal Scaling) には オートシャーディング (auto-sharding) によって対応する。これはコレクション単位での順序付きデータ分散を可能にするものだ。個々のシャードはレプリカセットとして設定されたマシンのグループであり,シャードの各マシンはシャードデータの完全なコピーを保持する。シャード内では,自動的にフェールオーバが実行される。クエリは自動的に適切なシャードに振り分けられるので,どのシャードがどのデータ要素を持っているかをアプリケーションが知る必要はない。また新たなレプリカセット認証機能により,キーファイルと -keyfile オプションを用いたレプリカセットメンバ間の自動認証も提供されている。

カバーリングインデックスとスパース(sparse)インデックスも,今回リリースの新機能だ。 カバーリングインデックスによってインデックス自身へのデータ保存が,スパースインデックスによってフィールド値を持っていないドキュメントの除外が,それぞれ実現される。クエリで取得するフィールドがすべてカバードインデックスに含まれていれば,ドキュメントレコード全体を引用する必要がなくなるため,パフォーマンスが向上する。またスパースインデックスは,コレクション内で欠落する部分の多いフィールドを検索する場合のパフォーマンスを向上させる。現在のところ,スパースインデックスが持つことができるフィールドはひとつだけだ。

MongoDB のツールセットにも変更が加えられている。mongostat には,クラスタ内のノードから自動的に統計データを引き出す "ディスカバーモード (--discover)" が追加された。また mongodumo -oplogmonorestore -oplogReplay によって,高度なトランザクションログのダンプおよびリストアが実現されている。

今回のリリースの新機能に関する詳細な情報は MongoDB 1.9 webinar (web セミナ) を見てほしい。

この記事に星をつける

おすすめ度
スタイル

BT