MongoDBでゆるふわDB体験

第8回 リリース間近! MongoDB 2.4の新機能

この記事を読むのに必要な時間:およそ 3 分

ハッシュドシャードキー

シャードキーをハッシュ化することで,データの偏りを防ぐことが可能になりました。

たとえば,シャードキーにメールアドレスを選択した場合を考えてみましょう。みなさんの携帯の電話帳を思い浮かべてみてください。2つのサーバへシャーディングするために,どこかのアルファベットで区切ろうとしても,データに偏り無くわけることは難しいと思います。

図2 ハッシュ化前

図2 ハッシュ化前

ハッシュ化とは,ハッシュ関数を用いて数値や文字列から固定長の値を生成することです。5文字のアルファベットが生成されるハッシュ関数を例に挙げて,説明します。生成される値はランダムなので,AからZまでほぼ同じ数だけ生成されます。

図3 ハッシュ化後

図3 ハッシュ化後

シャードキーであるメールアドレスをハッシュ化することで,データを偏りなく分散させることが可能になりました。

図4 ハッシュ化されたシャードキーでシャーディング

図4 ハッシュ化されたシャードキーでシャーディング

このように,ハッシュドシャードキーを用いることでシャーディングをより簡単に設定できるようになり,データを均等に分散させることが可能になります。

その他の変更点

ケルベロス認証のサポート

WindowsのActive Directoryなどで使用されているケルベロス認証をサポートしました。ただし,サブスクリプト版のみでのサポートです。サブスクリプト版はMongoDBの開発元である10genからサポートを購入することで入手可能となります。

Map-Reduceと$whereオペレーターへ制限の追加

Map-Reduceと$whereオペレーターから,グローバル関数やグローバルプロパティへのアクセスが制限されました。たとえば,mongo shellでよく使用するdbプロパティはグローバルプロパティなので,Map-Reduceと$whereオペレーターからはアクセスできなくなりました。

db.killOp()がインデックス作成に対応

実行中のインデックス作成を,db.killOp()で停止できるようになりました。killOpの引数にはオペレーションIDを取ります。db.currentOp()で取得しましょう。

$setOnInsertオペレーターの追加

$setOnInsertオペレーターを使用することで,upsert時にinsertするドキュメントを指定可能になりました。

_id=1のドキュメントが無い場合,以下のコマンドを実行すると,

> db.collection.update( { _id: 1 },
                        { $setOnInsert: { x: 25, y: 30 } },
                        { upsert: true } )
$setOnInsertで指定した,このようなドキュメントがinsertされます。
{ "_id" : 1, "x" : 25, "y" : 30 }

--setParameterオプションの追加

v2.2まではrunCommandで設定していたパラメーターを,起動時のオプションで指定できるようになりました。v2.2では,以下のコマンドを実行する必要がありました。

> use admin
> db.runCommand( { setParameter: 1, logLevel: 2 } )

v2.4からはmongodの起動時にオプションとして指定できます。

$ mongod --setParameter logLevel=2

確認はrunCommandからgetParameterを行います。

> use admin
> db.runCommand( { getParameter: 1, logLevel: 1 } )
{ "logLevel" : 2, "ok" : 1 }

次回のテーマ

MongoDB v2.4には全文検索,GeoJSON対応,ハッシュドシャードキーなど先進的な機能が追加されました。全文検索に関しましては現状では日本語に対応していませんが,今後が楽しみな機能です。また権限によるアクセスコントロールやケルベロス認証のサポートなど,エンタープライズを意識した機能が追加されたのも特徴的だと思います。MongoDBの開発方針としてエンタープライズを意識しているものと思われます。

次回はMongoDBの機能のひとつである,地理空間インデックスについて紹介する予定です。

著者プロフィール

藤崎祥見(ふじさきしょうけん)

野村総合研究所 OpenStandia所属。オープンソースのR&Dとセミナー講師を担当。

Debian,Ubuntu,Liferayのコミュニティで活動した後,MongoDBの翻訳に関わり,丸の内MongoDB勉強会を始める。

実家がお寺で,住職の資格を所持する坊主系エンジニア。

Twitter:@syokenz


渡部徹太郎(わたなべてつたろう)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIやサポートの業務に従事。

藤崎と共同で丸の内MongoDB勉強会を始める。

趣味は自宅サーバ。好きなものはLinuxとRuby。

Twitter:@fetarodc


林田敦(はやしだあつし)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIや製品開発業務に従事。

丸の内MongoDB勉強会では広報兼雑用係を務める。

趣味はレザークラフト,ダイビング,スキー,キャンプ,ジェットスキー,カメラ等々。作って滑って撮って潜れるエンジニア。

Facebook:Atsushi Hayashida