MongoDBでゆるふわDB体験

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

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

今回は,リリース間近となっているMongoDB v2.4で追加/改善された機能を紹介します。

v2.4については2月19日に行われた第7回丸の内MongoDB勉強会で取り扱いましたが,今回記事執筆のために改めて確認すると,リリースノートの項目が増えていました。まさにリリースに向けて開発中という雰囲気が伝わってきます。

今回の内容は,3月7日時点のMongoDB v2.4リリースノートを基にしています。

ひとつ前の安定バージョンであるv2.2の新機能については,この連載の以前の記事をお読みください。

新機能ダイジェスト

1. 全文検索機能
ついにインデックス付きの全文検索機能が追加されました!しかし,日本語には対応していませんので注意してください。
2. 権限によるアクセスコントロール
ロールを用いてユーザごとに読み込み権限,書き込み権限をコントロールできるようになりました。
3. JavaScriptエンジンがV8へ
デフォルトのJavaScriptエンジンが,これまでのSpiderMonkeyの拡張版からV8へ変更されました。
4. GeoJSONによる地理空間インデックス
地理空間インデックスを用いてGeoJSONフォーマットのオブジェクトを取り扱うことが可能になりました。
5. ハッシュドシャードキー
シャードキーにハッシュ化したフィールドを指定可能になりました。
6. その他の変更点
他にも細かな変更点があります。後ほど詳細に解説します。

全文検索機能

注意
全文検索は実験的機能という位置づけです。リリースノートで,本番環境での使用を避ける旨が明記されています。

2.4の目玉機能はインデックス付き全文検索です。10genのエンジニアも「ユーザから要望が多かった機能」と説明しています。ただし,執筆時(3月7日)では残念ながら日本語には対応していません。英語・フランス語・ドイツ語など15カ国語が対応言語となっています。最新の対応言語はリリースノートで確認してください。

MongoDBの全文検索は以下のような特徴を持っています。

  • 複数のフィールドを重み付けし,一括検索対象にできるScore Hit方式
  • 検索クエリには正規表現が使用可能
  • ステミングに対応

第7回丸の内MongoDB勉強会には全文検索機能に関してハンズオン資料がありますので併せてご覧ください。

権限によるアクセスコントロール

MySQLなどで権限(PRIVILEGES)を使用していたユーザにはうれしい機能です。MongoDBでも権限によるアクセスコントロールが可能になりました。権限はデータベースごとに設定可能です。{database}.system.usersコレクションに保存します。

roles(権限)内容
readすべてのコレクションのデータを読み取り可能
readWriteすべてのコレクションのデータを読み取りでき,書き込み可能
dbAdminインデックス作成,DBの統計情報取得などのデータベース管理者オペレーションが可能
userAdminsystem.usersに対して読み書きでき,ユーザの作成や権限変更などの管理が可能
clusterAdminレプリカセットやシャーディングの管理者オペレーションが可能
readAnyDatabaseadminデータベースを含めたすべての論理データベースを読み取り可能
readWriteAnyDatabaseadminデータベースを含めたすべての論理データベースを読み取りでき,書き込み可能
userAdminAnyDatabaseuserAdminとしてユーザ管理を行い,すべての論理データベースを読み取りでき,書き込み可能
dbAdminAnyDatabasedbAdminとしてデータベース管理を行い,すべての論理データベースを読み取りでき,書き込み可能

JavaScriptエンジンがV8へ

デフォルトのJavaScriptエンジンがこれまでのSpiderMonkeyの拡張版からV8へ変更され,最新のECMAscript 5thに準拠しました。またV8への変更によって並列処理性能が改善されています。

一方で,これまで使用できていたSpiderMonkeyの独自拡張機能は使用できなくなりました。たとえば,V8では標準でないE4X拡張機能をサポートしていません。これまでにMongoDBでJavaScriptを使用してきたユーザは注意してください。削除された機能の一覧はリリースノートを確認してください。

JavaScriptエンジンはmongo shellからdb.serverBuildInfo()で確認できるようになりました。

> db.serverBuildInfo()

またはinterpreterVersion()でも確認できます。

> interpreterVersion()

GeoJSONによる地理空間インデックス

MongoDBはv1.4から地理空間インデックスをサポートしていますが,今回のバージョンアップでGeoJSONフォーマットを扱えるようになりました。

以下のようなGeoJSONフォーマットでの表記が可能となり,DBへドキュメントとしてinsertできるようになりました。

オブジェクト表記
点(Point)
{ "type": "Point", "coordinates": [ 40, 5 ] }
線(LineString)
{ "type": "LineString", "coordinates": [ [ 40, 5 ], [ 41, 6 ] ] }
多角形(Polygon)
{
  "type": "Polygon",
  "coordinates": [ [ [ 40, 5 ], [ 40, 6 ], [ 41, 6 ], [ 41, 5 ], [ 40, 5 ] ] ]
}

また$geoIntersectsという新しいオペレーターが追加されました。$geoIntersectsを使うと,交差しているオブジェクトを検索することができます。

たとえば,P [ 20, 5 ]という点と交差するGeoJSONオブジェクトを検索できます。図1では点Pと交差している,三角形A,五角形B,直線Lを検索結果として取得できます。五角形C,直線MはPと交差していないため,検索結果に含まれません。

図1 $geoIntersectsで交差しているオブジェクトの検索

図1 $geoIntersectsで交差しているオブジェクトの検索

P [ 20, 5 ]と交差しているオブジェクトの検索は,地理空間インデックス作成後に以下のコマンドで行います。

> db.collection.find( { loc: { $geoIntersects:
                               { $geometry: { "type": "Point",
                                            "coordinates": [ 20, 5 ]
                                } } } } )

今回は地理空間インデックスの作成手順は省略します。第7回丸の内MongoDB勉強会にはGeoJSONを用いたハンズオンが掲載されてます。

著者プロフィール

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

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

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

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

Twitter:@syokenz


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

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

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

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

Twitter:@fetarodc


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

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

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

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

Facebook:Atsushi Hayashida

コメント

コメントの記入