MongoDB 4.0のリリースノートの要約しました。
直訳ではなく分かりやすいように適宜補足して訳しております。
また、一部細かい部分は割愛しています。
複数ドキュメントのトランザクション(Multi-Document Transactions)
MongoDB4.0から複数のドキュメントをatomicな操作として操作できる、multi-document transactionsがサポートされる。これはレプリカセットに対してのみ(※)有効。トランザクションの外側からはトランザクション内で変更途中のデータが見えない。
※)単一のmongodインスタンスではトランザクションは使えない。1つのmongodのみを含むレプリカセットを構築すればトランザクションは利用可能。
【重要】多くのケースにおいて、multi-document transactionsによる操作は、一つのドキュメントの更新よりもパフォーマンスが悪化する。また、multi-document transactionsをサポートしてからといって、今まで推奨してきた非正規化してデータを保持するスキーマデザインが置き換えられるというわけではない。つまり、multi-document transactionsを使うよりも、データの重複をあえて許容して一回の更新が一つのドキュメントで済むようにスキーマデザインでするほうが、多くのケースで最適である。すなはち、多くのケースでは、multi-document transactionsの利用を最小限に留めるべきである。
トランザクションを使うにはfeatureCompatibilityVersionが4.0である必要がある
featureCompatibilityVersionは、古いバージョンのMongoDBと互換性のないデータを保持するかどうかの設定であり、トランザクションを使うには値が「4.0」に設定されている必要がある。つまり、3.6以前と互換性のないデータに変換しないと、トランザクション機能は利用できない。
ちなみに、以下の機能も利用にもfeatureCompatibilityVersionが「4.0」である必要がある。
- ハッシュ関数SCRAM-SHA-256
- AggregationにおけるtoBool等の変換機能
- $dateToString option changes
- 新しく追加された「change stream」
mongoシェルでのトランザクションの使い方
- Session.startTransaction() :multi-statement transactionを始める
- Session.commitTransaction() :トランザクションをコミットするCommits the transaction.
- Session.abortTransaction() :トランザクションをアボートする
トランザクションの読み込みオプションであるRead Concern に新たにsnapshot
レベルを導入した
トランザクション使用時の読み込みオプションとして、Read Concern = snapshotが指定できるようになった。Read Concern = snapshotを指定したトランザクションは、「Write Concern = majorityで更新したトランザクション」がコミットしたデータのみを読み込むことを保証する。
※リリースノートあった記載では不十分であったため、トランザクションの説明ページの説明から補足しています。
aggregation関連
型変換や文字列操作の機能追加。その他詳細は割愛。
MongoDB Drivers関連
いろいろな言語で最新バージョンのドライバをリリースした。詳細は割愛。
Seucurity関連
ハッシュ化方式で SCRAM-SHA-256の追加。その他詳細は割愛。
MMAPv1の非推奨化
MongoDBの古いストレージエンジンであるMMAPv1が非推奨となった。次のリリースでMMAPv1は無くなる。
レプリカセット関連
- 古いレプリケーションプロトコルpv0の廃止
- 古いレプリケーション方式Master-Slaveレプリケーションの廃止
-
--nojournal
のオプションを指定できなくする
rollback関係のエンハンス
まず初めに、MongoDBにおけるrollbackとは、RDBMSにおけるクラッシュリカバリ時のロールバックではないので注意が必要。
MongoDBにおけるrollbackとは、レプリケーションラグが発生している状態でプライマリが停止し、そのノードが復旧したときにすでにレプリカセット内では無かった事になっている更新(プライマリしか存在を知らない更新)を巻き戻す行為のことである。詳しくは公式マニュアル参照。
そのrollbackに以下のエンハンスが入った。
rollbackTimeLimitSecs
パラメータの導入
ロールバックに含める対象のドキュメントの秒数を指定できる。その秒数は、common point(レプリカ内のみんなが知っている更新時刻)からクラッシュしたプライマリに存在する更新ログ(oplog)の最新時間の差である。
※訳が分かりにくくてすみません。少し自信ないです。
Rollback Filesコマンドの導入
今まではrollbackによって「なかったことにされた更新」は、データディレクトリの中のとあるファイルに履かれていたが、MongoDB4.0からはcreateRollbackDataFiles
によって、出力するかどうか制御できるようになった。
レプリカセットのステータスコマンドの結果エンハンス
replSetGetStatus(いわゆるrs.status())の結果がよりリッチになった。詳細は割愛。
Change Streamsの導入
change stream cursorという機能が追加され、データベースに対する変更のうち、システムで使うコレクション以外の変更を、捕捉できるカーソルが使えるようになった。
また全てのデータベースに対し変更を捕捉することもできる。
mongoシェルからの利用
- db.watch() 特定データベースに対して変更を捕捉
- Mongo.watch() 全てのデータベースに対し変更を捕捉
無料のモニタリング(Free Monitoing)
クラウドで、単一ノードもしくはレプリカセットのモニタリングが無料でできる
db.enableFreeMonitoring()コマンドを打つだけで実行でき、ユニークなURLが発行される
シャーディング関連
以下のコマンドの書き込み保証オプションがmajorityになった。majorityとはクラスタの過半数以上のノードでコマンドが完了するまでアプリケーションにOKを返さない待ち方である。
addShard sh.addShard()
create db.createCollection()
drop db.collection.drop()
dropDatabase db.dropDatabase()
enableSharding sh.enableSharding()
movePrimary
renameCollection db.collection.renameCollection()
shardCollection sh.shardCollection()
removeShard
setFeatureCompatibilityVersion
Windows向けの.msiインストラ
インストールの最中にWindowsのサービスの設定と開始ができるようになった
Platform Support
対応プラットフォームが増えた。詳細は割愛。
General Improvements
省略。