#Release Notes for MongoDB 4.0
Release Notes for MongoDB 4.0の翻訳です。
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unportedライセンスにて配布されています。
自分用のメモを整形しただけなので、誤訳表記ゆれリンク間違いなどいっぱいあると思います。
コメントを頂ければありがたいです。
まとめを一言で
複数ドキュメントでのACIDトランザクションがサポートされた。
ただしレプリカセットまで。
シャード内でのトランザクションサポートは、次期4.2でサポート予定。
https://docs.mongodb.com/manual/release-notes/4.0
Multi-Document Transactions
MongoDBはバージョン4.0から、レプリカセットに対して、
マルチドキュメントトランザクションを実行する機能を提供します。
マルチドキュメントトランザクションでは、トランザクションがコミットされるまで、
トランザクション内の書込み操作はトランザクション外からは見えません。
つまり、マルチドキュメントトランザクションはアトミックです。
重要:
多くの場合、マルチドキュメントトランザクションは
シングルドキュメントの書き込みよりもパフォーマンスコストが大きくなります。
そしてマルチドキュメントトランザクションの可用性を、効果的なスキーマ設計の代替にするべきではありません。
多くのシナリオでは、非正規化データモデル(埋め込みドキュメントとアレイ)は、引き続きデータおよびユース・ケースに最適です。
つまり、多くのシナリオでは、データを適切にモデリングすることで、マルチドキュメントトランザクションの必要性を最小限に抑えることができます。
Feature Compatibility
レプリカセットのすべてのメンバのfeatureCompatibilityVersionは、4.0以上である必要があります。
メンバーのfeatureCompatibilityVersionをチェックするには、メンバーに接続し、次のコマンドを実行します:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
featureCompatibilityVersionフラグの詳細については、set FeatureCompatibilityVersionを参照してください。
mongo Shell Methods
Method | Description |
---|---|
Session.startTransaction() | マルチステートメントトランザクションをはじめる |
Session.commitTransaction() | トランザクションをコミットする |
Session.abortTransaction() | トランザクションを中止する |
MongoDB Drivers
クライアントは、トランザクションを使用するために、MongoDB4.0用のドライバへ更新する必要があります。
Read Concern snapshot
MongoDB 4.0は、マルチドキュメントトランザクションのために新しいread concernレベル
"snapshot"を導入しています。
MongoDBはマルチドキュメントトランザクションのために、
より強い"local" 及び "majority"のread concernに置き換える場合があります。
read concernを受け入れるすべての操作のリストについては、readConcernのサポートを参照してください。
Read Preference
読み取り操作を含むマルチドキュメントトランザクションでは、read preferenceにprimaryを使用する必要があります。
特定のトランザクションでのすべての操作は、同じメンバーにルーティングする必要があります。
Commands
-
abortTransaction
- 対応するドライバメソッドまたはmongoシェルヘルパーSession.abortTransaction()を使用してください。
-
commitTransaction
- 対応するドライバメソッドまたはmongoシェルヘルパーSession.commitTransaction()を使用してください。
Locks
デフォルトでは、マルチドキュメントトランザクションは、トランザクションの操作に必要なロックを取得するために5ミリ秒待ちます。
トランザクションが5ミリ秒で必要なロックを取得できない場合、トランザクションは中断されます。
maxTransactionLockRequestTimeoutMillisパラメータを使用して、トランザクションがロックを取得するまでのwait時間を調整できます。
トランザクションは、中断またはコミット時にすべてのロックを解放します。
$currentOp
aggregationパイプラインステージである$currentOp(およびcurrentOpコマンドとmongoシェルヘルパーでのdb.currentOp()メソッド)は、トランザクションの一部としてロックを保持するアクティブではないセッションに関する情報を返します。
Parameters
- transactionLifetimeLimitSeconds:トランザクションが期限切れとみなされ、次回のクリーンアップ処理が実行されたときに中断される、マルチドキュメントトランザクションの存続期間を指定します。
- maxTransactionLockRequestTimeoutMillis:マルチドキュメントトランザクションがトランザクション操作で必要とされるロックを取得するまでのwait時間を指定します。
Aggregation
New Type Conversion Operators
MongoDB 4.0では、型変換に以下の新しいaggregation operatorが追加されています。
Operator | Description |
---|---|
$convert | 値を指定された型に変換します。 |
$toBool | 値をbooleanに変換します。 |
$toDate | 値を日付に変換します。 |
$toDecimal | 値をDecimal128に変換します。 |
$toDouble | 値をDoubleに変換します。 |
$toInt | 値をintegerに変換します。 |
$toLong | 値をlongに変換します。 |
$toObjectId | 値をObjectIdに変換します。 |
$toString | 値を文字列に変換します。 |
New String Operators
MongoDB 4.0では、次の新しいaggregation文字列演算子が追加されています。
Operator | Description |
---|---|
$ltrim | 空白または指定された文字を、文字列の先頭から削除します。 |
$rtrim | 空白または指定された文字を、文字列の末尾から削除します。 |
$trim | 空白または指定された文字を、文字列の先頭と末尾から削除します。 |
Additional Improvements
$bucket
$bucketステージでは、$literalでラップされたboundaries document argumentsが不要になりました。
$dateToString
$dateToString aggregation operatorには、次のオプションの変更があります。
ノート
featureCompatibilityVersion(fCV)が "4.0"以上に設定されている必要があります。
* 新しいオプションonNullは、日付がnullまたは欠落している場合に返す値を指定します。
* オプションformatが、オプションになりました。
$dateFromParts
year、isoYear、およびtimezone以外のフィールドに指定された値が有効な範囲外の場合、
$dateFromPartsは日付を計算するために、他の日付パーツとの差から日付を計算します。 詳細については、Value Rangeを参照してください。
$dateFromString
$dateFromString aggregation operatorは、オプションのformatフィールドを持つようになりました。
$currentOp
aggregation pipelineステージ$currentOpは、次の新しいオプションをサポートします。
- idleSessionsオプションは、トランザクションの一部としてロックを保持している、アクティブでないセッションに関する情報を返します。
- localOpsオプションは、シャード上で実行されている操作ではなく、現在のmongosインスタンスでローカルに実行されている操作をレポートできます。
MongoDB Drivers
以下のドライバが、MongoDB 4.0と機能互換性があります。
- Java 3.8.0
- Python 3.7.0
- C 1.11.0
- C# 2.7
- Node 3.1.0
- Ruby 2.6.0
- Perl 2.0.0
- PHPC 1.5.0
- Scala 2.4.0
Security
Add Support for SCRAM-SHA-256
ノート:
SCRAM-SHA-256を使用するには、
featureCompatibilityVersionを4.0に設定する必要があります。featureCompatibilityVersionの詳細については、View FeatureCompatibilityVersionとsetFeatureCompatibilityVersionを参照してください。
MongoDBはSHA-256のハッシュ関数を使用するSCRAM認証メカニズム、SCRAM-SHA-256のサポートを追加します。
SCRAM-SHA-256の繰り返し回数を変更するために、MongoDBは新しいパラメータscramSHA256iterationCountを追加します。
New Option for Create and Update User Operations
SCRAMユーザーを作成または更新する際、特定のSCRAMメカニズムまたはユーザーcredentialsを指定できます。具体的には、MongoDB4.0では、以下のコマンドとmongoシェルヘルパーにオプションを追加しました。
Command | Method |
---|---|
createUser | db.createUser() |
updateUser | db.updateUser() |
SCRAM-SHA-256を使用する場合、MongoDB(サーバ)にはundigestedなパスワードが必要です。MongoDB 4.0から、createUserコマンドのためにdigestPasswordのデフォルト値はtrueで、passwordDigestorのデフォルト値は"server"です。
以前のMongoDBバージョンでは、digestPasswordはそれぞれfalseとclientでした。
New Option for isMaster Command
MongoDB 4.0から、isMasterコマンドはオプションのフィールドsaslSupportedMechs: を受け入れ、実行結果に追加フィールドisMaster.saslSupportedMechsを含め返します。
isMaster.saslSupportedMechsは、指定されたユーザーのcredentialsを作成するために使用される、SASLメカニズムの配列です。
Remove Support for MONGODB-CR
バージョン4.0から、MongoDBはdeprecatedだったMongoDB Challenge-Response(MONGODB-CR)認証メカニズムのサポートを削除します。
バージョン3.0以降、MongoDBは、すでにMOGODB-CRユーザーが存在しており、認証スキーマをアップグレードしていない2.6以前のデプロイメントからアップグレードされていない限り、MongoDB-CRユーザーの作成をサポートしていません。
デプロイメントにMOGODB-CRスキーマに格納されたユーザーcredentialsがある場合は、
バージョン4.0にアップグレードする前に、Salted Challenge Response Authentication Mechanism (SCRAM)にアップグレードする必要があります。SCRAMへのアップグレードについては、Upgrade to SCRAMを参照してください。
usersInfo Enhancement
usersInfoコマンドは、次のように指定して、すべてのデータベースの情報を返すことができます。
{ usersInfo: { forAllDBs: true } }
usersInfoおよびmongoシェルヘルパーdb.dbgetUser()およびdb.dbgetUsers()メソッドは、新しいオプションのフィルタドキュメントを受け入れます。フィルタドキュメントは、条件に一致するユーザーのみを返すために、$matchステージ条件を指定します。
usersInfoコマンドとmongoシェルヘルパーdb.dbgetUser()およびdb.dbgetUsers()メソッドは、ユーザーのメカニズムフィールドを返します。
TLS 1.2
MongoDB 4.0バイナリfor macOSはTLS 1.2をサポートします。
Disable TLS 1.0
MongoDBバイナリmongod, mongos,そしてmongoはTLS 1.1+が利用可能なシステムで
TLS 1.0暗号化のサポートを無効化しました。
TLS 1.0をサポートする必要がある場合は:
- mongodインスタンスでは、net.ssl.disabledProtocolsにnoneを指定するか、引数オプションに--sslDisabledProtocols noneを追加
- mongosインスタンスでは、net.ssl.disabledProtocolsにnoneを指定するか、引数オプションに--sslDisabledProtocols noneを追加
- mongoシェルにおいては、引数オプションに--sslDisabledProtocols noneを以下のバージョンで追加
- MongoDB version 4.0+
- MongoDB version 3.6.5+
- MongoDB version 3.4.15+
macOSにおいて、バージョン3.6.4以前のmongoシェルをMongoDB 4.0移行に接続するには、
TLS 1.0を明示的に有効にする必要があります。
AES-GCM
MongoDB Enterprise on Windowsでは、AES256-GCMをサポートしなくなりました。
New Privilege Actions
free Cloud monitoringをサポートするため、MongoDBはクラスタリソースで利用可能な以下の特権アクションを追加します。
MongoDBは、clusterMonitorロールを変更してこれらの権限を含めます。
x.509 Authentication Certificate Restrictions
MongoDB 4.0以降、--sslAllowInvalidCertificatesまたはssl.allowInvalidCertificates:trueを指定した場合、x.509認証を使用すると、無効な証明書でTLS / SSL接続を確立するだけで済みますが、認証には不十分です。
無効な証明書を使用してx.509認証を実行する場合は、証明書を有効な証明書に更新します。 たとえば、信頼できるCAで既存の証明書に署名するか、カスタムCAを使用する場合は、net.ssl.CAFileを使用してCAを指定します。
Enable System Store for SSL on Windows and Mac
--sslCertificateSelectorオプション(certificateSelector setting) を使用すると、mongod、mongoシェル、およびmongosは、WindowsおよびMac用のシステムSSL証明書ストアを使用できます。
--sslClusterCertificateSelectorオプション(clusterCertificateSelector setting)を使用すると、mongodおよびmongosは、クラスタ内の内部SSL通信用にWindowsおよびMac用のシステムSSL証明書ストアを使用できます。
Deprecate MMAPv1
バージョン4.0以降、MongoDBはMMAPv1ストレージエンジンを廃止し、将来のリリースでMMAPv1を削除します。
MMAPv1ストレージエンジンをWiredTiger Storage Engineに変更する方法については、以下を参照してください。
- Change Standalone to WiredTiger
- Change Replica Set to WiredTiger
- Change Sharded Cluster to WiredTiger
Replica Set
Remove pv0 for Replica Sets
MongoDB 4.0は、非推奨のレプリカセットプロトコルのバージョン0、pv0を削除します。
MongoDB 4.0にアップグレードする前に、pv1にアップグレードする必要があります。
pv1にアップグレードするためには、mongoシェルをレプリカセットのプライマリに接続し、
次の一連の操作を実行します。
cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);
catchUpTimeoutMillisを使用すると、より高速なフェイルオーバー及びw:1の書き込み設定の保持の間で優先順位を付けることができます。
pv1の詳細については、Replica Set Protocol Versionを参照してください。
Remove Master-Slave Replication
MongoDB 4.0は、非推奨だったマスタースレーブレプリケーションのサポートを削除します。
MongoDB 4.0にアップグレードする前に、マスタースレーブレプリケーションを使用している場合は、
レプリカセットにアップグレードする必要があります。
マスタースレーブレプリケーションを変換するには、 Convert a Master-Slave Deployment to a Replica Setを参照してください。
Journaling and Replica Sets
MongoDB 4.0から、--nojournalオプションまたはstorage.journal.enabled: falseを、WiredTigerストレージエンジンを使用するレプリカセットメンバーに対して指定することはできません。
rollbackTimeLimitSecs Parameter Available
MongoDB 4.0では、新しいrollbackTimeLimitSecsパラメータを使用することで、ステップダウンされたプライマリの、共通ポイントと最後のoplog書き込みエントリとの間の時間制限を秒単位で設定できます。
Wait for Background Index Builds
バージョン4.0以降、MongoDBはロールバックを開始する前に、進行中のバックグラウンドインデックス構築が完了するまで待機します。
Rollback Files
MongoDBはロールバック中かどうかを判断するための、ロールバック中に影響を受けるドキュメントを含むロールバック・ファイルを作成するかどうかを決めるパラメータcreateRollbackDataFilesを追加します。
replSetGetStatus Output Changes
replSetGetStatusは、次の新しいフィールドを返します。
replSetGetStatusから返される次のフィールドは廃止されました。
Change Streams
MongoDBは次の機能を追加しました。
- 1つのデータベース(admin、local、configデータベースを除く)のchange stream cursorを開いて、システムコレクション以外のすべてのコレクション対する変更を監視します。
- デプロイメントのchange stream cursorを開いて、admin、local、およびconfigを除くすべてのデータベースのシステムコレクション以外のすべてのコレクションに対する変更を監視します。
ノート:
featureCompatibilityVersion(fCV)が "4.0"以上に設定されている必要があります。
MongoDBは、変更ストリームカーソルの開始時刻(startAtOperationTimeオプション)を指定する機能を追加します。
また、変更イベントドキュメントには次のものがあります。
- イベントのoplogエントリからのタイムスタンプに対応した、clusterTime
- 操作がマルチドキュメントトランザクションの一部である場合のtxnNumberとlsid
mongo Shell Methods
Method | Description |
---|---|
db.watch() | 単一データベース(admin、local、configデータベースを除く)の変更ストリームカーソルを開き、すべてのシステムコレクション以外に対する変更を監視します。対応するMongoDBドライバ方法については、ドライバのマニュアルを参照してください。 |
Mongo.watch() | 管理、ローカル、および構成以外のすべてのデータベースにわたるすべてのシステムコレクション以外に対する変更を監視するために、デプロイメントの変更ストリームカーソルを開きます。対応するMongoDBドライバ方法については、ドライバのマニュアルを参照してください。バージョン4.0の新機能です。 |
Free Monitoring
MongoDB 4.0(コミュニティエディション)は、スタンドアロンまたはレプリカセットのフリークラウドモニタリングを提供します。
Enable/Disable
デフォルトでは、実行時に次のメソッド、コマンドを使用してフリーモニタリングを有効/無効にできます。
mongo Shell Methods | Command |
---|---|
db.enableFreeMonitoring() | setFreeMonitoring |
db.disableFreeMonitoring() |
起動時に、次のいずれかを使用して、フリーモニタリングを有効または無効にすることもできます。
- コンフィグファイルによる設定 cloud.monitoring.free.state
- コマンドラインオプション--enable FreeMonitoring
View Status
フリーモニタリングの状態を見るために、MongoDBは次のコマンドとシェルヘルパーを提供します。
mongo Shell Methods | Command |
---|---|
db.getFreeMonitoringStatus() | getFreeMonitoringStatus |
serverStatusとdb.getServerStatus()ヘルパーには、freeMonitoringフィールド内の統計も含まれます。
Access Control
フリーのクラウドモニタリングをサポートするため、MongoDBはクラスタリソースに利用可能な次の権限アクションを追加します。
組み込みロールであるclusterMonitorには、この新しい権限アクションが含まれています。
Sharded Clusters
mongosは、シャード化されたクラスタのメタデータに影響を及ぼす以下の操作に、
"majority"を使用します。
.msi Installer on Windows
MongoDB 4.0以降では、MongoDBをサービスとして設定し起動することがインストール中にできます。
Platform Support
- MongoDB 4.0(Community&Enterprise)は以下のサポートを追加しています。
- MongoDB 4.0(Community)は以下のサポートを追加しています。
- s390x RHEL 6.x
- MongoDB 4.0はSLES 11をサポートしていません。
- SLES 11のサポートは、MongoDB 3.2.20+、3.4.15+、および3.6.4+でも削除されています
- MongoDB 4.0はUbuntu 12.04をサポートしていません。
- Ubuntu 12.04のサポートは、MongoDB 3.2.20+、3.4.15+、および3.6.4+でも削除されています。
- 将来のリリースでは、MongoDBは次のプラットフォームのサポートを終了します。
- Windows 7/2008R2
- Windows 8/2012
- Windows 8.1/2012R2
- Ubuntu 14.04
- すべてのプラットフォームのサポートマトリックスについては、Supported Platformsを参照してください。
General Improvements
Commands
- コマンドlistCollectionsは、データベース上のIntent Shared lockを取得します。 以前のバージョンでは、コマンドはデータベースに対してShared lockを取得していました。
- コマンドlistCollectionsおよびそのmongoシェルヘルパーdb.getCollectionInfos()は、次のオプションを受け入れます。
- nameOnly コレクションの名前と型だけを返します。(コレクションのロックを必要としません)
- authorizedCollections listCollectionsを実行するために必要な特権を持たないユーザーが、nameOnly:true、authorizedCollections:trueというコマンドを実行して、ユーザーに特権を持つコレクションを返すことができます。
- serverStatusコマンドとそのmongoシェルヘルパーdb.serverStatus()の出力には、shardingStatisticsが含まれます。 shardingStatisticsには、シャード化されたクラスタ上のメタデータ更新に関するデータが含まれます。
- mongoシェルヘルパーdb.collection.drop()は、write concernオプションを受け入れます。
- セッション内でクリエイトされたカーソルの場合、セッション外でgetMoreを呼び出すことはできません。 同様に、セッション外でクリエイトされたカーソルの場合、getMoreをセッション内で呼び出すことはできません。
- コマンドdbHashには、次のフィールドが出力されます。
- cappedコレクションリスト内の、capped フィールド
- コレクションとそれに対応するUUIDに含まれる uuids フィールド
- killOpコマンドは、mongosで実行されているクエリの終了をサポートするようになりました。 mongosで実行すると、killOpは複数のシャードで実行されているクエリを強制終了できます。
Geospatial Query Improvements
- 地理空間クエリ演算子の$nearよび$nearSphereは、シャードされたコレクションのクエリをサポートします。
- MongoDB4.0以降、2dインデックスでminDistanceオプションを使用して、$geoNearaggregation演算子とgeoNearコマンドをサポートします。同様に、$nearおよび$nearSphereは、2dインデックスのために$minDistanceオプションをサポートしています。以前は、minDistanceと$minDistanceは2dsphereインデックスでのみ使用できました。
- MongoDB 4.0では、$geoNearaggregation演算子とgeoNearコマンドのキーオプションを追加し、複数の地理空間インデックスを持つコレクションにクエリを実行する際に、使用する地理空間インデックスを指定できるようになりました。以前は、$geoNearaggregation演算子またはgeoNearコマンドを使用するために、コレクションには地理空間インデックスを1つしか持てませんでした。
Network Layer Improvements
- taskExecutorPoolSizeパラメーターのデフォルト値を1に変更しました。
- 新しいパラメータAsyncRequestsSenderUseBatonを有効にすると、single Task Executor connection pool使用時に、Linuxにてmongosの分散/収集操作のパフォーマンスを最適化できます。
- コネクションプールを管理するために次のパラメータを追加しました。
Configuration Options
- mongosは以下をサポートします。
- コマンドラインオプションのslowms及び--slowOpSampleRate
- コンフィグファイルオプションのoperationProfiling.slowOpThresholdMs 及びoperationProfiling.slowOpSampleRate
Miscellaneous
- JavaScriptエンジンのJITコンパイラーがデフォルトで無効になりました。
- MozJSをESR45.9.0にアップグレードしました。
- ログメッセージにRECOVERYコンポーネントを追加しました。
- MongoDB 4.0では、mongoシェルから接続するときに、appName接続文字列オプションを使用してカスタムアプリケーション名を設定するサポートが追加されました。以前は、appNameを使用してカスタム値を設定し、mongoシェルがデフォルトのMongoDBシェル値をアプリケーション名として使用しているMongoDBドライバのみをサポートしていました。
- ドキュメントのハッシュ値を返すためのmongoシェルメソッド convertShardKeyToHashedを追加しました。
Changes Affecting Compatibility
一部の変更は互換性に影響し、ユーザアクションが必要になる場合があります。互換性の変更の詳細については、Compatibility Changes in MongoDB 4.0を参照してください。
Upgrade Procedures
FEATURE COMPATIBILITY VERSION
アップグレードするためには、3.6インスタンスのfeatureCompatibilityVersionを3.6に設定する必要があります。 バージョンを確認するには
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
featureCompatibilityVersionの検証と設定、およびアップグレードに関するその他の前提条件/考慮事項の詳細については、以下それぞれのアップグレード手順を参照してください。
MongoDBアプリケーションを中断せずにスムーズに移行するために、MongoDB offers major version upgrade servicesという4.0へのアップグレードに関するガイダンスを提供します。
Download
MongoDB 4.0をダウンロードするには、MongoDB Download Centerへ。
こちらも参照して下さい。
Known Issues in 4.0.0
-
- mongoreplayはMongoDB4.0にてinsert/findコマンドを表示しません。
-
- MongoDB 4.0は、MacOS 10.13+での不正なシャットダウン中にデータを失う可能性があります。
-
- 単一メンバーのレプリカセットを使用してマルチドキュメントトランザクションを使用すると、パフォーマンスに大きな影響を与えることがあります。単一メンバーのレプリカセットは、テスト/開発目的でのみ使用するべきであり、本番使用に推奨されません。
ノート:
単一メンバーのレプリカセット上のマルチドキュメントトランザクションパフォーマンスは、複数のメンバを持つレプリカセットのパフォーマンスを示すものではありません。
-
SERVER-35758:
- グローバルdbオブジェクトに関連付けられたセッションを使用してトランザクションを実行すると、mongoシェルのシェルプロンプトでエラーが発生します。
Report an Issue
問題を報告するには、MongoDBサーバーまたは関連プロジェクトのいずれかにJIRAチケットを登録するためhttps://github.com/mongodb/mongo/wiki/Submit-Bug-Reportsを参照してください。