今回の記事を含めて6回にわたって連載してきたMongoDB 2.6のリリースノート翻訳シリーズですが、最終回になって驚きの事実が。
過去の投稿で"MongoDB 2.6は年内リリース予定です。"と書いてきましたが、
MongoDB 2.6は年内にリリースされる予定はありませんでした!
すみません、完全に勘違いしていました。JIRAを見ると、まだまだ先のようです。直近では、MongoDB 2.4.9(と2.5.5)が 2014年1月7日にリリース予定となっています。
https://jira.mongodb.org/browse/SERVER
今回はリリースノートの内容をまとめてみました。
目次
- 2.6で何が変わったの?
- すぐに使える注目の新機能
- 検証が必要な新機能
- 2.4からアップグレードするべきか?
- MongoDBの今後
- 翻訳記事へのリンク
2.6で何が変わったの?
1. Aggregation Pipelineの機能増えた
aggregation()
でcursorを返すようになったのと、返り値をそのままコレクションに書き込めるようになったのは大きな進化。explainもできるようになりました。$cond
がObjectを取れるようになったので、条件分岐が書きやすくなったけど、複雑なことをやると遅くなるかも。$sort
と$group
のパフォーマンスが改善されたとあったので、そのあたりは速くなっているのでしょう、たぶん。
2. 書き込み処理が大変更
insert, update, deleteの内部処理が全く別物へ。バルクインサートをうたっているので、一括でのinsertは速くなってたりしてるのかなぁ。mongoシェルからのinsertに書き込み保証レベル(セカンダリーまで保証とか)などをオプションで付けれるようになった。新しいメソッドを使いたい人はドライバもアップグレードしましょう。JIRAをみるとドライバ開発チームが大変そう。そりゃそうだよなぁ。
3. 新しいユーザー権限管理システム
自分でカスタムロールを作成できるようになった。カスタムロールにはリソースとしてデータベースやコレクションを、アクションとしてinsertやfindを指定できる。この辺りは、着実にOracleやMySQLに近づいて来てますね。2.4以前のバージョンとは互換性がないので注意です。
4. セキュリティ関連が向上
2.2, 2.4と毎回セキュリティ機能は向上していて、今回の2.6でもエンタープライズユースを意識したバージョンアップになっています。大きなところでは、SSL周りが変わってます。mongodumpやmongostatなどのツールがSSL接続に対応しました。MongoDBはSaaSのホスティングサービスを使用しているユーザーも多いと思いますので、これはうれしいですね。LDAP認証はエンタープライズ版でサポートされました。
すぐに使える注目の新機能
mongorc.js
bashrcみたいにシェルを起動したときに読み込む設定ファイル。ここによく使う関数を定義しておけば幸せになれる。絶対に使うでしょこれは。
レプリカセットのステータス取得メソッドの追加
rs.printReplicationInfo()とrs.printSlaveReplicationInfo()。プライマリー、セカンダリーから見えるdb.printReplicationInfo()を返してくれる。使いそう。
maxTimeMS()
各カーソルメソッドに制限時間を持たせられる。いつ返ってくるかわからないような検索を実行する時に使うのかな。使いどころはありそう。
ユーティリティーツールのSSL対応
mongodumpやmongostatなどがSSL接続に対応した。定期的にリモートホストからmongodumpでバックアップしている場合はSSL接続すると安心ですね。
検証が必要な新機能
セカンダリーノードのバックグラウンドインデックス構築
動きかたの検証が必要。
GeoJSONの追加オブジェクト
どう使うのかまだ思いつかない。
過去バージョンからの移行でハマるかもしれないところ
maxConnsの制限値
システムデフォルト値以上は設定できなくなりました。システムデフォルト値はulimitやファイルディスクリプタの値によって変わるので、maxConnsを設定している場合は注意が必要です。
フィールド名の特殊文字制限
フィールド名に“$”や”.”が使えなくなりました。
ユーザー権限周り
新しいユーザー権限モデルは2.4以前と互換性がありません。
再起動時にインデックス構築を自動で継続
デフォルトでOnなので勝手にやって欲しくない場合は、noIndexBuildRetry
を使いましょう。
2.4からアップグレードするべきか?
- Aggregation Pipelineをヘビーに使いたい人
- 新しいユーザー権限モデルを使ってユーザー管理したい人
はアップグレードにメリットがあるかと思います。
2.6の機能をフルに使うにはドライバもアップグレードしないといけないので影響範囲が大きく、なかなか大変です。なので、まだやらないかな。mongorc.jsは使いたいですが。mongorc.js狙いでmongoシェルだけアップグレードするのはありかもしれません。
MongoDBの今後
JIRAの2.7.xのチケットを見たところの所感
Aggregation関連は今後も機能追加されていく
Aggregation Pipelineに関連するチケットが25件ありました。2.5.5では全文検索をサポートするみたい。
話はそれますが、全文検索が日本語が対応する兆しはまったく無し。
Windows版バイナリのサポートが強化される
Windowsに関連するチケットが36件ありました。
MapReduce, 全文検索は放置
MapReduceに関するチケットはBugFixが主、性能改善は見込めなさそう。全文検索は今のところチケット無し。
気になる機能
- コレクションレベルでのロック Fix Version: Planning Bucket A
- データの暗号化 Fix Version: planned but not scheduled
- 他にもPostgreSQLのautovacuumみたいな機能、読み込み専用のView機能、組み込み用への対応のチケットがありました。Fix Versionはnoneですが。
当初の方針通りパフォーマンスを改善しつつ、RDBライクな機能を追加していくようです。
来年のMongoDB 2.6のリリースを楽しみに待ちましょう。