Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

MongoDB 4.0 リリースノートの要約

More than 1 year has passed since last update.

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

省略。

fetaro
データエンジニア
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away