このトピックでは、MongoDB 5.0 の主な新機能について説明します。
背景情報
MongoDB 5.0 は、ユーザーに新機能をより迅速に提供するための新しいリリースサイクルの始まりです。例えば、バージョン管理された API やライブリシャーディングなどの機能により、将来のデータベースのアップグレードが簡素化され、進化するビジネスニーズに対応できます。ネイティブの時系列データプラットフォームにより、MongoDB はより広範なワークロードとユースケースをサポートできるようになり、新しい MongoDB Shell はユーザーエクスペリエンスを向上させます。
ネイティブの時系列プラットフォーム
MongoDB 5.0 は、汎用アプリケーションデータプラットフォームを拡張して時系列データの処理を簡素化し、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、$dateSubtract、$dateDiff、$dateTrunc などの新しい日付演算子を提供し、カスタムのタイムウィンドウでデータを集計およびクエリできます。
時系列コレクションは、通常の MongoDB コレクションと同じデータベースに配置できます。他の種類のアプリケーションに対応できない特化型の時系列データベースを選択したり、時系列データと他のデータを混在させるために複雑な統合を実装したりする必要はありません。統合プラットフォームを提供することで、MongoDB は、他のユースケースやワークロードもサポートしながら、パフォーマンス専有型で効率的な時系列アプリケーションを構築できます。これにより、複数の異なるデータベースを統合および実行するコストと複雑さが解消されます。
ライブリシャーディング
| データベースのバージョン | 特徴 | 実装方法 |
| MongoDB 5.0 以前 | MongoDB 5.0 以前では、リシャーディングは複雑な手動プロセスでした。 |
|
| MongoDB 5.0 以降 |
|
reshardCollection コマンドを実行し、リシャーディングするデータベースとコレクションを選択し、新しいシャードキーを指定するだけです。
説明
|
バージョン管理された API
- アプリケーションの互換性
MongoDB 5.0 以降、バージョン管理された API は、最も一般的なコマンドとパラメーターの安定したセットを定義します。これらは、年次のメジャーリリースと四半期ごとのラピッドリリースの両方で変更されません。アプリケーションとデータベースのライフサイクルをデカップリングすることで、ドライバーを MongoDB API の特定のバージョンに固定できます。これにより、データベースのアップグレードや改善が行われても、アプリケーションをコード変更なしで何年も実行し続けることができます。
- 新機能と改善を追加する柔軟性
バージョン管理された API により、MongoDB は下位互換性を維持しながら、各リリースでデータベースに新機能や改善を柔軟に追加できます。API を変更する必要がある場合、新しい API バージョンを導入して、既存のバージョン管理された API と同じサーバーで並行して実行できます。MongoDB のリリーススケジュールが加速するにつれて、バージョン管理された API を使用すると、最新の MongoDB 機能をより迅速かつ簡単に採用できます。
Write Concern のデフォルトが Majority レベルに
majority です。書き込み操作は、プライマリノードに適用され、大多数のセカンダリノードのジャーナルに永続化された後にのみ成功として確認され、標準でより強力なデータの耐久性を保証します。接続管理の最適化
デフォルトでは、net.serviceExecutor を synchronous として設定すると、各クライアント接続はバックエンドの MongoDB サーバー上の 1 つのスレッドに対応します。スレッドの作成、切り替え、削除はリソースを大量に消費する操作です。接続数が多すぎると、スレッドはサーバーリソースを大幅に消費します。
接続ストームとは、接続数が非常に多いか、接続作成のレートが制御不能になる状態です。この問題にはさまざまな原因があり、多くの場合、サービスのパフォーマンスがすでに低下しているときに発生します。
- ドライバーが一度に作成できる接続数を制限し、データベースサーバーの過負荷を防ぐためのシンプルで効果的な方法を提供します。
- ドライバーが接続プールをチェックする頻度を減らし、応答しない、または過負荷のサーバーノードが回復する時間を与えます。
- ドライバーは、利用可能なサーバーからランダムに選択するのではなく、より健全な接続プールを持つ高速なサーバーにワークロードを向けます。
これらの対策は、以前のバージョンからの mongos クエリルート指定レイヤーの改善と組み合わせることで、高い同時実行負荷を処理する MongoDB の能力をさらに強化します。
長時間実行されるスナップショットクエリ
長時間実行されるスナップショットクエリは、アプリケーションの多様性と回復力を向上させます。デフォルトで 5 分間の持続時間 (またはカスタムの長さに調整可能) のクエリを実行しながら、ライブのトランザクションデータベースと一貫性のあるスナップショット隔離を維持できます。セカンダリノードでスナップショットクエリを実行することもできます。これにより、単一のクラスターで異なるワークロードを実行し、それらを異なるシャードにスケールアウトできます。
MongoDB は、MongoDB 4.4 で導入された Durable History と呼ばれる基盤となるストレージエンジンの機能を通じて、長時間実行されるスナップショットクエリを実装します。Durable History は、クエリが開始されてから変更されたすべてのフィールド値のスナップショットを保存します。Durable History を使用することで、データが変更されてもクエリはスナップショット隔離を維持できます。Durable History は、ストレージエンジンのキャッシュプレッシャーを軽減するのにも役立ち、書き込み負荷が高いシナリオでより高いクエリスループットを可能にします。
新しい MongoDB Shell
より良いユーザーエクスペリエンスを提供するため、MongoDB 5.0 では完全に再設計された MongoDB Shell (mongosh) が導入されました。モダンなコマンドラインエクスペリエンス、強化されたユーザビリティ機能、強力なスクリプト環境を提供します。新しい MongoDB Shell は、現在 MongoDB プラットフォームのデフォルトのシェルです。構文のハイライト、インテリジェントな自動補完、コンテキストヘルプ、役立つエラーメッセージなどの機能が含まれており、直感的でインタラクティブな体験を提供します。
- 強化されたユーザーエクスペリエンス
- クエリと集約をより簡単に記述し、より読みやすい結果を得られます。
新しい MongoDB Shell は構文のハイライトをサポートしており、フィールド、値、データの型を区別しやすくなり、構文エラーを回避できます。エラーが発生した場合、新しい MongoDB Shell は問題を特定し、解決策を提案します。
- クエリとコマンドをより速く入力できます。
新しい MongoDB Shell はインテリジェントな自動補完をサポートしています。ご利用の MongoDB のバージョンに基づいて、メソッド、コマンド、MQL 式の候補を提案します。
例:コマンドの構文を思い出せない場合、MongoDB Shell から直接すばやく調べることができます。secondary [direct: secondary] sample_mflix → db.movies.createIndex db.movies.createIndexes db.movies.createIndex secondary [direct: secondary] sample_mflix → db.movies.createIndex.help() db.coll.createIndex({ category: 1 }, { name: 'index-1' }): Creates one index on a collection For more information on usage: https://docs.mongodb.com/manual/reference/method/db.collection.createIndex secondary [direct: secondary] sample_mflix →
- クエリと集約をより簡単に記述し、より読みやすい結果を得られます。
- 高度なスクリプト環境
新しい MongoDB Shell のスクリプト環境は、Node.js REPL (Read-Eval-Print Loop) 上に構築されています。スクリプトでは、すべての Node.js API と npm の任意のモジュールを使用できます。ファイルシステムからスクリプトをロードして実行することもでき、レガシーシェルと同様に
load()とeval()を使用してスクリプトを実行し続けることができます。 - 拡張性とプラグイン
新しい MongoDB Shell は高度に拡張可能で、MongoDB のすべての機能を使用して生産性を向上させることができます。
新しい MongoDB Shell では、Snippets プラグインをインストールできます。シェルは Snippets を自動的にロードし、すべての Node.js API と npm パッケージを使用できます。MongoDB はまた、指定されたコレクションのスキーマを分析するためのプラグインなど、便利な機能を備えた Snippets リポジトリを維持しています。また、お好みのプラグインを使用するように MongoDB Shell を設定することもできます。説明 プラグインは現在、MongoDB Shell の実験的な機能です。
PyMongoArrow とデータサイエンス
新しい PyMongoArrow API を使用すると、Python を使用して MongoDB 上で複雑な分析や機械学習を実行できます。PyMongoArrow は、単純な MongoDB クエリの結果を、Pandas DataFrame や NumPy 配列などの一般的なデータ形式にすばやく変換し、データサイエンスのワークフローを効率化できます。
スキーマ検証の改善
スキーマ検証は、MongoDB でデータガバナンスのコントロールを強制する方法です。MongoDB 5.0 では、スキーマ検証がよりシンプルでユーザーフレンドリになりました。操作が検証に失敗すると、MongoDB は説明的なエラーメッセージを生成します。このメッセージは、どのドキュメントがコレクションのバリデーターのルールに準拠していなかったか、またその理由を理解するのに役立ち、ルールに違反するコードを迅速に特定して修正することができます。
再開可能なインデックス構築
MongoDB 5.0 では、進行中のインデックス構築は、ノードの再起動後に中断したところから自動的に再開されます。これにより、計画的なメンテナンス操作によるビジネスへの影響が軽減されます。例えば、データベースノードを再起動またはアップグレードする際に、大規模なコレクションで進行中のインデックス構築が失敗することを心配する必要がなくなります。
リリースモデルの変更
MongoDB は多くのバージョンとプラットフォームをサポートしているため、各リリースは 20 以上のサポート対象プラットフォームで検証される必要があります。この広範な検証作業は、新機能の配信を遅らせていました。そのため、MongoDB 5.0 から、リリースはメジャーリリースとラピッドリリースに分けられます。ラピッドリリースは開発およびテスト目的でダウンロード可能ですが、本番環境での使用は推奨されません。
その他の機能
MongoDB 5.0 の機能に関する詳細については、「Release notes for MongoDB 5.0」をご参照ください。