リリース間近！MongoDB 2.6のリリースノート翻訳: 新機能と改善点


MongoDB 2.6のリリースノート翻訳シリーズ、第4弾です。前回までは、大きな追加/変更があったAggregation PipelineとWrite Commandを紹介しました。今回は、その他の機能追加/変更です。細かいですが、便利な機能やメソッドが追加されています。

注1: MongoDB 2.6は年内リリース予定です。
注2: MongoDBでは2.5.xは開発バージョンで、2.6.xがリリースバージョンとなります。


元のリリースノートはこちら
http://docs.mongodb.org/master/release-notes/2.6/


他の翻訳

- [まとめ！MongoDB 2.6のリリースノート翻訳と所感](http://qiita.com/syokenz/items/a0be8a8bc8b79d471ccf)
- [リリース間近！MongoDB 2.6のリリースノート翻訳: 既存機能の変更点](http://qiita.com/syokenz/items/8a261ccead180b3e3243)
- [リリース間近！MongoDB 2.6のリリースノート翻訳: Aggregation Pipelineの変更点](http://qiita.com/syokenz/items/e3a09442445478832a36)
- [リリース間近！MongoDB 2.6のリリースノート翻訳: 新登場のWrite Commandたち](http://qiita.com/syokenz/items/98feb3fe8511b78d8a2d)
- [リリース間近！MongoDB 2.6のリリースノート翻訳: エンタープライズ向け機能](http://qiita.com/syokenz/items/c3e4c5ec94152365c7d3)

## 目次

- シャーディングの改善点
 - シャーディングから孤立したデータの削除をサポート
 - 同一シャード上の連続したチャンクのマージ機能
- コレクションレベルでのアクセスコントロール
- ユーザー定義ロール
- SSL機能の改善点
 - 必要に応じてサーバ起動時にSSL証明書のパスフレーズ入力を求める機能
 -  ユーティリティツールがSSLをサポート
 - 強いSSL暗号のみを許可
 - 同じポート上でSSL接続と非SSL接続のサポート
 - x.509認証
- インデックス構築の改善点
 - レプリカセット時にセカンダリーのバックグラウンドでのインデックス構築
 - 再起動時にインデックス構築を自動で継続
-  ユーティリティツールの改善点
 - グローバルに使える<code>mongorc.js</code>ファイル
 - すべてのユーティリティツールが<code>--quiet</code>オプションをサポート
 - <code>mongoimport</code>がコレクション名を指定しなかった場合、ファイル名を使用するようになりました
 - <code>mongostat</code>が<code>--discover</code>オプション使用時に<code>--rowcount</code>オプションをサポートしました
- <code>maxConns</code>オプションのデフォルト値制限
- 制限時間を指定して強制終了するオペレーションの追加
- 地理空間インデックスのエンハンス点
- C++ドライバのエンハンス点
- WindowsでMongoDBのMSIパッケージが利用可能に
- レプリカセットのステータス取得メソッドの追加

## シャーディングの改善点

### シャーディングから孤立したデータの削除をサポート

新しい[cleanupOrphaned](http://docs.mongodb.org/master/reference/command/cleanupOrphaned/#dbcmd.cleanupOrphaned)コマンドはシャードから孤立したデータを削除するメカニズムを提供し、シャードクラスターのメンテナンスを助けます。孤立データとは、クラスタ内の別シャードに所属するシャードサーバー上のコレクションにも存在しているデータです。孤立データは、マイグレーションの失敗や異常終了によるマイグレーションクリーンナップの結果、残った物です。
_訳注: 孤立データ（Orphaned data）とは、マイグレーションの失敗で削除できなかった不要なデータです。シャードの管理から孤立しているデータという意味でOrphanedと呼ばれているようです。_

### 同一シャード上の連続したチャンクのマージ機能

[mergeChunks](http://docs.mongodb.org/master/reference/command/mergeChunks/#dbcmd.mergeChunks)は1つのシャード上にある連続したチャンクを結合するための機能を提供します。これにより、ドキュメント削除時にシャードのコレクションに残った、余分な空チャンクを結合することができます。

詳細については[mergeChunks](http://docs.mongodb.org/master/reference/command/mergeChunks/#dbcmd.mergeChunks)を参照してください。また、[Merge Chunks in a Sharded Cluster](http://docs.mongodb.org/master/tutorial/merge-chunks-in-sharded-cluster/)はこの操作のドキュメントとなっています。


## コレクションレベルでのアクセスコントロール

MongoDB 2.5.3 からコレクションごとにユーザー権限を指定する機能を提供します。詳細についてはcollection-level-access-controlを参照してください。

_訳注: 参照してくださいとありますが、執筆時(2013/12/24)には元のリリースノートにcollection-level-access-controlへのリンクが張られていません。_

## ユーザー定義ロール

MongoDBが提供するデフォルトのロールに加えて、カスタムユーザーロールを作成する機能が追加されました。加えて、adminデータベースに全てのユーザーとユーザー定義のロールデータを格納し、ユーザーとロールを管理するための新しいコマンドセットが提供されたことで、グローバルなユーザー管理を提供します。

新しい認証モデルとユーザー定義のロールの詳細ついては、[Authorization](http://docs.mongodb.org/master/core/access-control/#authorization)を参照してください。

_訳注: MongoDBはv2.4からロール機能が追加されました。デフォルトで提供するロールはこちらの記事にまとめられています。_
_[第8回　リリース間近！ MongoDB 2.4の新機能](http://gihyo.jp/dev/serial/01/mongodb/0008)_


## SSL機能の改善点

### 必要に応じてサーバ起動時にSSL証明書のパスフレーズ入力を求める機能

MongoDB 2.5.4でmongodまたはmongosは、暗号化されたSSLプライベートキーへのパスフレーズ入力用に、起動時にユーザーへプロンプトを表示することができます。これは、コマンドライン上や設定ファイルでのテキストによるパスフレーズ提供の代替手段を提供します。
[SSL Certificate Passphrase](http://docs.mongodb.org/master/tutorial/configure-ssl/#ssl-certificate-password)を参照してください。

### ユーティリティツールがSSLをサポート

MongoDBのユーティリティーツールに含まれるプログラムは、mongodおよびmongosへのSSL接続をサポートしました。より詳細な情報は[MongoDB Tools](http://docs.mongodb.org/master/tutorial/configure-ssl/#mongodb-tools-support-ssl)を参照してください。

_訳注: 今回新しくSSL接続がサポートされたユーティリティーツールは、以下のプログラムです。_

- _mongodump_
- _mongoexport_
- _mongofiles_
- _mongoimport_
- _mongooplog_
- _mongorestore_
- _mongostat_
- _mongotop_

### 強いSSL暗号のみを許可

MongoDBのSSL暗号化は、全ての接続に対して128ビット以上の鍵長が必要となり、強いSSLのみ許可されます。
強い暗号要件は、弱い暗号の使用を強制している古い、または悪意あるクライアントからの防ぐことができます。

### 同じポート番号でSSL接続と非SSL接続のサポート

SSLコネクションを使用するMongoDBクラスターのアップグレードを可能にするため、MongoDBサーバーは同一TCPポートでSSL暗号化されたコネクションと暗号化されてないコネクションの両方の接続をサポートします。[Upgrade a Cluster to Use SSL](http://docs.mongodb.org/master/tutorial/upgrade-cluster-to-ssl/)を参照してください。

### x.509認証

MongoDBはシャードやレプリカセットのメンバーの内部認証のため、安全なSSL接続で使用するためのX.509証明書による認証を導入しました。

[Use x.509 for Client Authentication](http://docs.mongodb.org/master/tutorial/configure-x509/#x509-client-authentication) と [Use x.509 for Replica Set/Sharded Cluster Member Authentication](http://docs.mongodb.org/master/tutorial/configure-x509/#x509-internal-authentication)を参照してください。

## インデックス構築の改善点

### レプリカセット時にセカンダリーのバックグラウンドでのインデックス構築

MongoDB 2.5.0以降で、バックグラウンドでのインデックス構築がプライマリーノード上で開始した場合、セカンダリーノードでもバックグラウンドでのインデックス構築を複製します。以前のバージョンではプライマリーノードがバックグラウンドでインデックス構築を行っても、セカンダリーノードではフォアグラウンドで全てのインデックスを構築していました。

全てのインデックス構築において、プライマリーノードが正常にインデックス構築を完了するまで、セカンダリーノードはインデックス構築を開始しません。

### 再起動時にインデックス構築を自動で継続

シャットダウンや停止時にmongodがインデックス構築をしていた場合、再起動時にインデックス構築を継続するようになりました。以前のバージョンでは、インデックス構築はmongodのシャットダウン前に完了している必要がありました。

この機能を停止するための起動時オプション、<code>noIndexBuildRetry</code>がMongoDB 2.5以降で追加されました。<code>noIndexBuildRetry</code>はmongodの直前のシャットダウン時にインデックス構築が完了していなくても、インデックス構築を継続させないようにすることができます。

## ユーティリティツールの改善点

### グローバルに使える<code>mongorc.js</code>ファイル

<code>mongorc.js</code>ファイルが<code>/etc</code>ディレクトリ（Windowsの場合は<code>%ProgramData%\MongoDB</code>フォルダ）に存在していた場合、mongoシェルは起動時にこのファイルの内容を評価します。その後に、ユーザーのホームディレクトリに<code>.mongorc.js</code>ファイルが存在する場合、mongoシェルはそのファイルを読み込み、評価します。

<code>--norc</code>オプションは、ユーザーの<code>.mongorc.js</code>ファイルの読み込みを抑制します。

<code>/etc</code>ディレクトリの<code>mongorc.js</code>ファイルには、シェルを起動するユーザーの読み取り権限が必要です。

### すべてのユーティリティツールが<code>--quiet</code>オプションをサポート

MongoDBの全ての実行可能なファイルが<code>--quiet</code>オプションをサポートしました。このオプションは、エラーメッセージを除く全てのログ出力を抑制します。


### <code>mongoimport</code>がコレクション名を指定しなかった場合、ファイル名を使用するようになりました

<code>-c</code>オプション、または<code>--collection</code>オプション無しで実行された場合、<code>mongoimport</code>はコレクション名として入力されたファイル名を使用するようになりました。入力されたファイルに拡張子がある場合、拡張子は省略されます。

### <code>mongostat</code>が<code>--discover</code>オプション使用時に<code>--rowcount</code>オプションをサポートしました

<code>mongostat</code>が、<code>--discover</code>オプションと<code>--rowcount</code> <code>(-n)</code>オプションを使用して、指定した行数分の出力を行います。以前のバージョンでは、<code>--discover</code>は<code>--rowcount</code>オプションを上書きし、ユーザーが処理を終了させるまで出力を行っていました。

_訳注: 例えば、_

```
mongostat --discover --rowcount 3
```

_と実行すると、結果を3行出力して<code>mongostat</code>は終了します。以前のバージョンでは<code>--discover</code>を使用すると、<code>--rowcount</code>で指定しても、<code>Ctrl-C</code>で終了するまで出力されてました。_


## <code>maxConns</code>オプションのデフォルト値制限

MongoDB 2.5.0以降、mongodやmongosでの<code>--maxConns</code>オプションで、デフォルト値を超える数値の設定が制限されるようになりました。以前のバージョンでは、最大20,000まで<code>maxConns</code>を設定できました。

_訳注: <code>maxConns</code>のデフォルト値はシステムによって変わります。OSのulimitやファイルディスクリプタの値を見て変更されます。デフォルト値を超える値を<code>--maxConns</code>オプションで設定しても、変更されなくなりました。_

[maxConns](http://docs.mongodb.org/master/reference/configuration-options/#maxConns)を参照してください。


## 制限時間を指定して強制終了するオペレーションの追加

カーソルメソッドに<code>maxTimeMS()</code>と、コマンドに対応したオプションが追加されました。<code>maxTimeMS</code>は操作に対する制限時間を指定することができます。操作が指定された制限時間を超えると、<code>db.killOp()</code>と同様のメカニズムを用いて操作を終了させます。MongoDBは操作のみを指定された割り込みポイントで終了させます。

_訳注: 例えば、_

```
db.collection.find({description: /August [0-9]+, 1969/}).maxTimeMS(50)
```

_と実行したクエリーは、50ミリ秒で強制終了されます。_


## 地理空間インデックスのエンハンス点

以下のタイプのGeoJSONオブジェクトが、2dsphereインデックスで使用できるようになりました。

- [MultiPoint](http://docs.mongodb.org/master/core/2dsphere/#geojson-multipoint)
- [MultiLineString](http://docs.mongodb.org/master/core/2dsphere/#geojson-multilinestring)
- [MultiPolygon](http://docs.mongodb.org/master/core/2dsphere/#geojson-multipolygon)
- [GeometryCollection](http://docs.mongodb.org/master/core/2dsphere/#geojson-geometrycollection)

_訳注: 今回のバージョンアップで、複数のGeoJSONオブジェクトを一つのドキュメントとして扱えるようになりました。例えば、<code>$geoIntersects</code>クエリーを使う際に、複数オブジェクトをグルーピングするような使い方ができます。_

## C++ドライバのエンハンス点

C++ドライバでは、<code>replSetGetStatus</code>の代わりに<code>isMaster</code>コマンドを用いて、レプリカセットの監視を行うようになりました。C++ドライバでは、アクセス制御が有効になっているシステムをサポートすることができます。


## WindowsでMongoDBのMSIパッケージが利用可能に

Microsoft Windows用のMSIパッケージの配布を開始しました。WindowsでMongoDBをインストールする際には、MSIパッケージを使用することが推奨されています。


## レプリカセットのステータス取得メソッドの追加

レプリカセットのステータスに関する情報を提供するため、2つの新しいメソッドが追加されました。

- [rs.printReplicationInfo()](http://docs.mongodb.org/master/reference/method/rs.printReplicationInfo/#rs.printReplicationInfo)
- [rs.printSlaveReplicationInfo()](http://docs.mongodb.org/master/reference/method/rs.printSlaveReplicationInfo/#rs.printSlaveReplicationInfo)

<code>rs.printReplicationInfo()</code>メソッドは、プライマリーノードから見えるレプリカセットの状態をレポートフォーマットで提供します。出力フォーマットは<code>db.printReplicationInfo()</code>と同一です。

<code>rs.printSlaveReplicationInfo()</code>メソッドは、セカンダリーノードから見えるレプリカセットの状態をレポートフォーマットで提供します。出力フォーマットは<code>db.printSlaveReplicationInfo()</code>と同一です。


***

今回は以上となります。