MongoDB 4.4(現在ベータ版)は、MongoDBコミュニティからの開発者の提案に対処することを主な議題として展開されています。このバージョンは、便利で信頼できる規模で動作するデータベースの機能を強化するためにリリースされたため、「ユーザー主導のエンジニアリング」の原則に基づいて開発され、多数の改善された機能を提供できるようになりました。
MongoDB4.4の機能の改善
MongoDBクエリルーターは、複数のレプリカセットと並行して読み取りリクエストを発行し、最も効率的なノードからのデータ結果が返されるため、アプリケーションのレイテンシが短縮されます。
スケーリングプロセス中にデータ分散を変更した後、シャードキーにサフィックスを追加します。
これは、セカンダリレプリカのキャッシュを事前にウォームアップして、計画されたメンテナンスや停止によって発生する可能性のあるプライマリ選挙の余波を減らす機能です。
アグリゲーションの機能強化には、アグリゲーション式の定義とコスチューム、複数のmongoコレクションからのデータの単一の結果セットへの結合、文字列操作、配列処理の新しい演算子など、さまざまな改善があります。いくつかの機能強化は次のとおりです。
$ out
$ out操作が改善され、攻撃性があった同じデータベース内のコレクションにしか出力できなかった以前のバージョンとは対照的に、コレクションの結果を異なるデータベースに出力するようになりました。
$ indexStats
$ indexStatsには、フィールドを含むMongoDB 4.4の新しいフィールド出力があります:
| これはブールフラグであり、作成中のインデックスを示します。 |
spec | |
| |
$ merge
MongoDB 4.4では、アップグレード中の同じコレクションで出力するように$mergeが改善されました。さらに、$lookupのようにパイプラインに表示されるコレクションに出力することもできます。
$planCacheStatsの変更
$ planCacheStatsの状態が改善され、MongoDB4.4でmongodインスタンスとmongosインスタンスの両方を実行できるようになりました。さらに、$ planCacheSTatsには、mongoを実行するときのホストフィールドと呼ばれる新しいフィールドがあります。 PlanCache.list()は、$planCacheStats集計ステージのラッパーです。
$collStatsの変更
$ collStatsは、拡張ドキュメント中にクエリexecstatsを受け入れるように作成されています。さらに、コレクションは次の説明を持つフィールドとしてスキャンします;
フィールド名 | 説明 |
nonTailble | これは、調整可能なカーソルを使用しないいくつかのクエリでコレクションスキャンを実行する64ビット整数です。 |
| Totalは、調整可能なカーソルを使用しない、コレクションスキャンで実行されるクエリのコレクションです。 |
$ unionWith Aggregation
MongoDBは$unionWithを追加しました。これは、コレクションセットを統合する機能です。つまり、複数のコレクションからのパイプラインの結果を1つのセットに統合します。
$unionWith構文
$unionWithの一般的な構文は次のとおりです。
cd{ $unionWith: { coll: "<collection>", pipeline: [ <stage1>, ... ] } }
$ unionWithには、コレクションからのすべてのドキュメントを含めるために使用される構文の簡略化されたバージョンがあります。
{ $unionWith: "<collection>" } // include all documents from the specified collection
$アキュムレータアグリゲーション
$ accumulatorは、カスタムアキュムレータ演算子を指定するMongoDB4.4のもう1つの新機能です。アキュムレータは、ドキュメントがパイプラインに沿って進行しても状態を変更しないオペレータです。 $ accumulator演算子を使用して、MongoDBでサポートされていないJavaScript関数を実行できます。 $ accumulatorは、パイプラインの次の3つのステージにあります。
- $bucketステージ:1つ以上のドキュメント入力を含むドキュメントのみを出力します。
- $ groupステージ:指定された_idでドキュメントを入力し、特定のグループごとにドキュメントを出力します
- $bucketAutoステージ:ドキュメントエントリをバケットと呼ばれる特定のグループ番号に並べ替えます。
$accumulatorの構文は次のとおりです。
{ $accumulator:{
init: <code>,
initArgs: <array expression>, // Optional
accumulate: <code>,
accumulateArgs: <array expression>,
merge: <code>,
finalize: <code>, // Optional
lang: <string>
}}
$ function Aggregation
$ function集計は、JavaScriptの集計関数を定義します。
$ function演算子を使用して、MongoDBでサポートされていない動作を使用する関数を定義できます
$functionの構文は次のとおりです。
{
$function: {
body: <code>,
args: <array expression>,
lang: "js"
}
}
MongoDBレプリカセットの新機能
MongoDB 4.4には、中断された同期プロセスを再開しようとする機能があります。
以前のバージョンのMongoDBでは、セカンダリは、ソースから同期するために発行されたリクエストによってoplogのバッチを収集していました。 MongoDB 4.4では、ソースからの同期プロセスは、oplogエントリの連続ストリームをセカンダリ同期プロセスに送信します。
ロールバックのMongoDB4.4から、コレクションディレクトリには、コレクションのUUIDとコレクションの名前空間に応じた名前が付けられます。
MongoDB 4.4以降では、oplogエントリを保持する最小時間数を指定できます。
MongoDB 4.4には、一度に1人以下の投票者を追加または削除できるreplSetReconfigというコマンドがあります。 MongoDB 4.4のもう1つの新機能は、replSetGetConfigの変更です。 MongoDB 4.4 replSetConfigは、新しいオプションcommitmentStatusを規定できます。
MongoDB 4.4以降では、単一のハッシュフィールドを持つ複合シャードキーを使用してコレクションをシャーディングできます。 4.4より前のバージョンでは、MongoDBはハッシュフィールドを持つ複合シャードキーをサポートしていませんでした。複合ハッシュシャーディングは、ゾーンシャーディングなどの機能をサポートします。この場合、プレフィックス(つまり、最初の)非ハッシュフィールドまたはフィールドはゾーン範囲をサポートし、ハッシュフィールドはシャーディングデータのより多くの分散をサポートします。たとえば、次の操作は、ゾーン化されたシャーディングをサポートする複合ハッシュシャードキーのコレクションをシャーディングします。
sh.shardCollection(
"examples.compoundHashedCollection",
{ "fieldA" : 1, "fieldB" : 1, "fieldC" : "hashed" }
)
MongoDB 4.4では、構成サーバーは基本的に、デフォルトで、シャードコレクションのシャードに対するファイルの不規則性をチェックします。コマンドserverStatusは、フィールドshardedIndexConsistencyを返し、構成サーバーで実行しているときにファイルの不規則性を報告します。 MongoDB 4.4では、事前に複数のremoveShard操作があります。以前の適応では、removeShardは、別のremoveShard操作が事前に行われている可能性についてミスを返します。
フォーム4.4以降、MongoDBはシャードキーの見積もりに対する512バイトの制約を排除します。 MongoDB 4.2以前の場合、シャードキーは512バイトを超えることはできません。
MongoDB 4.4では、古いチャンクがある場合、カタログキャッシュがそれを復活させて、チャンクを持つシャードを取得します。
MongoDB 4.4には、カタログキャッシュの復活を損なうためのパラメーターであるenableFinerGrainedCatalogCacheRefreshがあります。 enableFinerGrainedCatalogCacheRefreshは、シャードに焦点を当て、より熟練したカタログキャッシュの復活動作を利用します。
enableFinerGrainedCatalogCacheRefreshパラメーターのデフォルトはtrueです。
MongoDB4.4のクエリとシャーディングの機能強化
MongoDBには、データを複数のノードに分散したり、シャーディングしたりすることで継続的にスケールアウトするという伝統があります。特定のドキュメントのシャードキーは割り当て前にのみ変更でき、割り当て後は変更できないため、シャードキーはドキュメントを保持します。
MongoDBの進化により、MongoDBで提供されたコンテンツのシャードを再調整することが困難になりました。リバランスを有効にするために、MongoDB 4.4リリースでは、ドキュメントのシャードキーを変更できるようにするリファイン可能なシャードキーが導入されました。
リファイン可能なシャードキーを使用すると、シャードに一緒に属するドキュメントで要件を変更できるため、ドキュメントのシャードキーを変更できるため、動的に再調整できます。
リバランスは、ユーザーが時間の経過とともにどのように表示するかに応じて、プログラム的または積極的に行うことができます。
データをサーバー上で移動および統合してクライアントに渡すことができ、完全な結果を管理するためにプロセスを複数回実行する必要はありません。
$ functionは、サーバー側でより複雑な集計の実行を可能にし、データ処理プロセスを強化する、衣装を着た集計の1つです。
リリースされたMongoDB4.4には、さまざまなバージョンのコスチューム手順が表示されます。衣装を着た機能は、ベータ版のパフォーマンスの向上にリンクされています。それでも、$ functionは、他の衣装を着た組み込みの機能が進行中のプロセスで十分でない場合にのみ呼び出されます。
MongoDBクエリ言語とドライバー
- カスタムアグリゲーションの外観には、アグリゲーション実行パイプラインの一部としてMongoDBを拡張する所有者機能があります。
- Union Aggregationは、複数のコレクションからのデータをUnion Aggregationパイプラインにブレンドすることで、より詳細な分析と調査を行います。
- 書き込みの懸念事項とグローバル読み取りにより、書き込みの耐久性とクラスター読み取りの分離を構成します。
- ストリーミングレプリケーションと同時インデックス作成により、MongoDB4.4のユーザーにデータを提供するためのレプリカラグが減少します。
- ヘッジされた読み取りにより、MongoDBの複数のデータレプリカに読み取り要求を送信することでp65とp99のレイテンシが最小化されるため、結果はできるだけ早く返されます。
- 複合ハッシュキーがシャードキーを使用してさまざまなシャードに均等に分散されるため、データの局所性を維持します。
- シャードキーをいつでも定義および改良する場合、ダウンタウンにはシステムがありません。
- MongoDB 4.4ベータ版の認証は50%以上高速で、TLS1.3です。
- MongoDB Atlasに接続するには、AWS IASM認証が必要です。これにより、一時的なAmazon IAMクレデンシャルと既存のレギュラーを再利用することで、クラウドネイティブのセキュリティが簡素化されます。
- 再開可能な初期同期によってノードを回復します。これにより、新しいレプリカを追加してスケールアウトプロセスが容易になります。計画されたメンテナンスまたは停止後にセカンダリのキャッシュをウォームアップするミラー化された読み取りによるプライマリ選挙の影響の軽減。
MongoDB 4.4は、システムのパフォーマンス機能を改善することにより、非リレーショナルドキュメントベースのデータベースでより良いエクスペリエンスを実現しました。この改善により、MongoDB 4.4を使用して、分析、運用、およびトランザクションのアプリケーションをより高速に実行できるようになりました。
MongoDB 4.4では、操作の要件の変化に応じてデータ分散を定義する際の柔軟性も可能になっています。 MongoDB 4.4の改善により、クラウドであるMongo Atlasを使用しながら、レイテンシー、高度化、セキュリティ制御の点で信頼性が向上しました。