すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:MongoDB 5.0の新機能

最終更新日:Jun 12, 2024

このトピックでは、MongoDB 5.0の主な新機能について説明します。

背景情報

MongoDB 5.0は、以前よりも迅速に新しい機能をユーザーに提供する新しいリリースサイクルを示しています。 Versioned APIとライブリシャーディングの組み合わせにより、データベースのアップグレードやビジネスの変更時の問題が解消されます。 ネイティブの時系列プラットフォームにより、MongoDBは幅広いワークロードとビジネスシナリオをサポートできます。 新しいMongo Shellは、ユーザーエクスペリエンスを向上させます。

ネイティブ時系列プラットフォーム

MongoDB 5.0は、取り込み、ストレージ、クエリ、リアルタイム分析、視覚化から、データが古くなったときのオンラインアーカイブまたは自動有効期限まで、時系列データのライフサイクル全体をネイティブにサポートします。 これにより、時系列アプリケーションの構築と実行が合理化され、コストが削減されます。 バージョン5.0では、MongoDBはユニバーサルアプリケーションデータプラットフォームを拡張し、開発者が時系列データを簡単に処理できるようにしました。 これにより、MongoDBのアプリケーションシナリオがIoT、財務分析、ロジスティクスなどの分野にさらに拡張されます。

MongoDB時系列コレクションは、時系列データを高度に最適化された圧縮形式で自動的に保存するため、ストレージサイズとI/Oが削減され、大規模でパフォーマンスが向上します。 また、時系列コレクションは開発サイクルを短縮するため、時系列アプリケーションのパフォーマンスと分析要件に最適化されたモデルをすばやく構築できます。

次のコマンドを実行して、時系列データコレクションを作成できます。

db.createCollection("collection_name",{ timeseries: { timeField: "timestamp" } } )

MongoDBは、取得頻度をシームレスに調整し、動的に生成されたタイムパーティションに基づいて順序通りの測定値を自動的に処理します。 新しくリリースされたMongoDB Connector for Apache Kafkaは、時系列のローカルサポートを実装しています。 Kafkaトピックメッセージから時系列コレクションを直接作成できます。 これにより、データ収集中にデータを処理および集計し、それらをMongoDB時系列コレクションに書き込むことができます。

時系列コレクションは、時間でソートされたデータのクラスタ化インデックスを自動的に作成し、データクエリの待ち時間を短縮します。 MongoDBクエリAPIは、分析クエリ (移動平均や累積合計など) を実行できるようにウィンドウ関数も拡張します。 リレーショナルデータベースシステムでは、分析クエリは通常SQL分析関数と呼ばれ、3行移動平均などの行単位で定義されたウィンドウをサポートします。 MongoDBは、指数移動平均 (EMA) 、微分、積分などの強力な時系列関数を追加します。 これにより、15分の移動平均などの時間単位でウィンドウを定義できます。 ウィンドウ関数を使用して、MongoDB時系列および通常のコレクションをクエリできます。これにより、複数のアプリケーションタイプに新しい分析メソッドが提供されます。 さらに、MongoDB 5.0は、$dateAdd$dateSubstract$dateDiff$dateTruncなどの新しい時間演算子を提供します。 これにより、カスタム時間ウィンドウでデータを要約してクエリできます。

企業のMongoDB時系列データとその他のデータの両方を管理できます。 時系列コレクションは、同じデータベース内の通常のMongoDBコレクションと組み合わせることができます。 他の種類のアプリケーションにサービスを提供できない専用の時系列データベースを選択したり、複雑な統合を使用して時系列データと他のデータを混合したりする必要はありません。 MongoDBは、高性能で効率的な時系列アプリケーションを構築できる統合プラットフォームを提供し、他のユースケースやワークロードもサポートします。 これにより、複数の異なるデータベースを統合して実行するコストと複雑さがなくなります。

ライブデータの再送信

データベースバージョンの設定

説明

実装方法

MongoDBの以前のバージョン

再ハード化プロセスは複雑であり、手動操作を必要とする。

  • 方法1: 最初にコレクション全体をダンプし、新しいシャードキーを使用してデータベースを新しいコレクションにリロードします。

    このプロセスはオフライン処理を必要とする。 リロードが完了している間、アプリケーションは長期間中断されたままになります。 たとえば、3シャードクラスターで10テラバイトを超えるコレクションのダンプとリロードは、完了するまでに数日かかる場合があります。

  • 方法2: 新しいシャードクラスターを作成し、コレクションのシャードキーを設定してから、カスタム移行を実行して、設定されたシャードキーに基づいて、既存のシャードクラスターから新しいシャードクラスターに再ハードするコレクションを書き込みます。

    • このプロセスでは、クエリのルーティングと移行ロジックを処理し、移行の進行状況を常に確認して、すべてのデータが移行されていることを確認する必要があります。

    • カスタム移行は、非常に複雑で労働集約的で時間のかかるタスクであり、リスクを招く可能性があります。 たとえば、あるMongoDBユーザーは、100億のドキュメントの移行に3か月を費やしました。

MongoDB 5.0

  • reshardCollectionコマンドを実行して、リハードを開始します。

  • reshardingプロセスは効率的です。

    単純にデータのバランスを再調整する代わりに、リシャーディングプロセスは、現在のコレクションデータのすべてをバックグラウンドで新しいコレクションにコピーして書き換えます。 このプロセス中、アプリケーションの新しい書き込みも同期されます。

  • reshardingプロセスは十分に自動化されます。

    再転送の期間は、数週間または数か月から数分または数時間に短縮され、長く複雑な手動データ移行が回避されます。

  • オンラインリシャーディングを使用すると、開発環境またはテスト環境でさまざまなシャードキーの効果を簡単に評価できます。 シャードキーを変更することもできます。

ワークロードの拡大または進化に応じて、コレクションのシャードキーをオンデマンドで変更できます。 このプロセスでは、データベースのダウンタイムやデータセット内の複雑な移行は必要ありません。 MongoDB ShellでreshardCollectionコマンドを実行して、リシャードするデータベースとコレクションを選択し、新しいシャードキーを指定できます。

reshardCollection: "<database>.<collection>", key: <shardkey>
説明
  • <database>: リシャードするデータベースの名前。

  • <collection>: リシャードするコレクションの名前。

  • <shardkey>: シャードキーの名前。

  • MongoDBでreshardCollectionコマンドを実行すると、既存のコレクションが複製され、既存のコレクション内のすべての操作ログが新しいコレクションに適用されます。 すべての操作ログを適用した後、MongoDBは新しいコレクションに切り替え、既存のコレクションを削除します。

バージョン対応API

  • アプリケーションとの互換性を向上

    MongoDB 5.0のVersioned API機能は、アプリケーションで最も一般的に使用される一連のコマンドとパラメーターを定義します。 これらのコマンドは、年次メジャーリリースや四半期ごとのラピッドリリースを含むすべてのデータベースリリースで変更されません。 その結果、アプリケーションライフサイクルはデータベースライフサイクルから切り離され、ドライバーを特定のバージョンのMongoDB APIに固定することができます。 これにより、データベースをアップグレードした後でも、コードを変更することなく、アプリケーションを数年間実行し続けることができます。

  • 新しい機能と改善を柔軟に追加できます

    Versioned APIを使用すると、完全な下位互換性を備えた各バージョンのデータベースに新しい機能を追加できます。 APIを変更すると、既存のバージョンのAPIと同時に、同じサーバー上で新しいバージョンのAPIを実行できます。 新しいMongoDBバージョンがより速いペースでリリースされると、Versioned API機能により、最新バージョンの機能に簡単にアクセスできます。

デフォルトの過半数の書き込みに関する懸念

MongoDB 5.0以降、Write Concernのデフォルトのランキングは多数です。 書き込み操作がコミットされ、書き込み操作がプライマリノードに適用され、大多数のセカンダリノードのログに永続化された場合にのみ、書き込み成功がアプリケーションに返されます。 これにより、MongoDB 5.0はすぐにデータの耐久性を保証します。

説明

書き込み懸念は完全に調整可能です。 書き込み懸念を設定して、データベースのパフォーマンスとデータの耐久性のバランスを取ることができます。

接続管理の最適化

デフォルトでは、クライアント接続はバックエンドMongoDBサーバー上のスレッドに対応します。 つまり、net.serviceExecutorsynchronousに設定されます。 スレッドの作成、切り替え、または破棄には、大量のシステムリソースが必要です。 多数のクライアント接続が存在する場合、スレッドは大量のリソースを消費します。

接続の数が多い、または接続の作成が制御不能である状況は、「接続ストーム」と呼ばれる。 接続ストームは、さまざまな理由で発生する可能性があります。 サービスがすでに減速しているときによく発生します。

これに応じて、MongoDB 5.0は次の対策を講じます。

  • ドライバーが作成しようとする接続の数を制限し、データベースサーバーがオーバーロードされるのを防ぎます。

  • ドライバーが接続プールをチェックする頻度を減らし、応答しないサーバーノードまたは過負荷のサーバーノードをバッファリングして回復できるようにします。

  • 使用可能なサーバーをランダムに選択するのではなく、最も健康的な接続プールを持つより高速なサーバーに切り替えることをドライバーに許可します。

前述の対策と以前のバージョンのmongosクエリルーティング層で行われた改善により、MongoDBが高い同時実行性を処理する機能がさらに強化されます。

実行時間の長いスナップショットクエリ。

実行時間の長いスナップショットクエリにより、アプリケーションの汎用性と柔軟性が向上します。 デフォルトでは、この機能によって実行されるスナップショットクエリの期間は5分です。 実行期間はカスタマイズ可能です。 さらに、この機能は、ライブおよびトランザクションワークロードのパフォーマンスに影響を与えることなく、スナップショット分離の保証との強力な整合性を維持し、セカンダリノードでスナップショットクエリを実行できるようにします。 これにより、単一のクラスターでさまざまなワークロードを実行し、ワークロードをさまざまなシャードにスケールできます。

MongoDBは、基礎となるストレージエンジンのDurable historyというプロジェクトを使用して、長期にわたるスナップショットクエリを実装します。 このプロジェクトは、MongoDB 4.4から利用可能です。 永続的な履歴には、クエリの開始以降に変更されたすべてのフィールド値のスナップショットが格納されます。 クエリは永続履歴を使用してスナップショットの分離を維持できます。 データが変更された場合、永続的な履歴は、ストレージエンジンのキャッシュ圧力を軽減するのにも役立ち、書き込み負荷の高いシナリオでのクエリのスループットを向上させます。

新しいMongoDBシェル

ユーザーエクスペリエンスを向上させるために、MongoDBシェルは、最新のコマンドラインエクスペリエンス、強化されたユーザビリティ機能、および強力なスクリプト環境を提供するようにゼロから再設計されました。 新しいMongoDBシェルがMongoDBのデフォルトシェルになりました。 新しいMongoDB Shellは、構文の強調表示、インテリジェントなオートコンプリート、コンテキストヘルプ、便利なエラーメッセージを導入して、視覚化されたインタラクティブなエクスペリエンスを作成します。

  • 向上したユーザーエクスペリエンス

    • クエリと集計の実装が簡単になり、読みやすさが向上

      新しいMongoDB Shellは、構文の強調表示をサポートしているため、フィールド、値、およびデータ型を簡単に区別して構文エラーを回避できます。 エラーが続く場合、新しいMongoDBシェルは問題を特定し、解決策を提供できます。

    • 高速なクエリとコマンド入力

      新しいMongoDBシェルは、インテリジェントなオートコンプリート機能を提供します。 新しいMongoDBシェルは、MongoDBのバージョンに基づいて、メソッド、コマンド、およびMQL式のオートコンプリートプロンプトを提供できます。

      コマンドの構文を忘れた場合は、MongoDBシェルですばやく検索できます。 サンプル構文: Sample syntax

  • 高度なスクリプト環境

    新しいMongoDBシェルのスクリプト環境は、Node.js REPLインタラクティブインタープリターの上に構築されています。 スクリプトでは、すべてのNode.js APIとnpmモジュールを使用できます。 ファイルシステムからスクリプトをロードして実行することもできます。 新しいMongoDB Shellでは、以前のバージョンのMongoDB Shellと同じ方法で、load() メソッドとeval() 関数を引き続き使用してスクリプトを実行できます。

  • 拡張性とプラグイン

    新しいMongoDBシェルは簡単に拡張できます。 これにより、MongoDBのすべての機能を使用して生産性を高めることができます。

    スニペットプラグインは、新しいMongoDB Shellにインストールできます。 スニペットはMongoDBシェルに自動的にロードでき、スニペットはすべてのNode.js APIとnpmパッケージを使用できます。 MongoDBは、特定の収集パターンのプラグインの分析などの機能を提供するスニペットリポジトリを維持します。 指定されたプラグインを使用するようにMongoDBシェルを構成することもできます。

    説明

    プラグインは現在、MongoDBシェルの実験的な機能です。

PyMongoArrowとデータサイエンス

新しいPyMongoArrow APIを使用すると、Pythonを使用してMongoDBに複雑な分析と機械学習タスクを実装できます。 PyMongoArrowは、単純なMongoDBクエリ結果をPandas DataFramesやNumPy配列などの一般的なデータ形式にすばやく変換して、データサイエンスのワークフローを簡素化できます。

スキーマ検証の改善

スキーマ検証は、MongoDBがデータアプリケーション管理に使用する方法です。 MongoDB 5.0では、スキーマ検証がよりシンプルで使いやすいものになりました。 操作の検証が失敗すると、コレクションの検証規則に準拠していないドキュメントとその理由を強調表示するために、説明的なエラーメッセージが生成されます。 これにより、検証ルールに影響を与えるエラーコードをすばやく特定して修正できます。

再開可能なインデックス作成タスク

進行中のインデックス作成タスクでノードの再起動が発生した場合、MongoDB 5.0により、タスクは中断したところから自動的に再開できます。 これにより、計画されたメンテナンス作業のビジネスへの影響が軽減されます。 たとえば、データベースノードを再起動またはアップグレードするときに、大規模なコレクションに対して進行中のインデックス作成タスクが失敗することを心配する必要はありません。

バージョンリリース調整

MongoDBはさまざまなバージョンとプラットフォームをサポートしており、各バージョンはMongoDBがサポートする20を超えるプラットフォームで検証する必要があります。 検証ワークロードが重いため、新しいMongoDB機能の提供が遅くなります。 配信速度を上げるために、MongoDBは5.0リリースから、メジャーリリースとラピッドリリースの2つの異なるシリーズとしてリリースされます。 迅速なリリースは、評価と開発の目的で利用できます。 運用環境ではRapid Releasesを使用しないことを推奨します。

その他の機能

その他の機能については、「MongoDB 5.0のリリースノート」をご参照ください。