アップデートやアップグレードがどんなシステムにとっても重要な理由に疑問を抱いたことがありますか? それは秘密ではありません: システムが関連性と効率性を保つことを保証します。 MongoDB では、それが異なることはありません。 アップデートについて考えるたびに、私たちは、効率性、セキュリティ、パフォーマンス、および更新されたシステムに付随する他の利点を追求します。 しかし、すべてのアップデートは、慎重に管理する必要がある変更を導入します。 この記事では、MongoDB バージョン 8.0 の新しい機能の一部をカバーし、この新しいバージョンにアップグレードする前に考慮すべき重要な考慮事項を強調します。 バージョン8.0で何が新しい? 最も人気のあるドキュメントデータベースは今まで以上に速くなっています。 パフォーマンス、最先端のテクノロジー、直感的な体験を求める人にとっては素晴らしい選択です。以前のバージョンと比較して、パフォーマンスと遅延性の大幅な改善を提供します。 7.0 に対する内部テストでは、32%の読み取り速度、59%のアップデート速度、および 200% + のタイム シリーズ クエリを示しています。この最新バージョンのリリースは、いくつかの重要な柱に焦点を当てています。 MongoDB 8.0 について MongoDB 8.0 は、より速い読み込み、書き込み、大量操作などのパフォーマンスの大幅な改善を提供します。 そして したがって、あなたのアプリケーションが高負荷を経験する場合、8.0にアップグレードすると、反応時間を大幅に短縮し、スケーラブルさえ保証し、システムが重い使用下でもスケーラブルになります。 Performance improvement insertMany bulkInsert MongoDB 8.0 では、 暗号化フィールドで範囲クエリを実行する機能を $lt、 $lte、 $gt、および $gte オペレーターを使用して導入します。 Security 求める暗号化 : MongoDB 8.0 では、水平スケーリングがより速く、より手頃な価格で利用可能となっています。この方法により、アプリケーションは複数のサーバーにデータを拡散することで、フラッグと呼ばれるデータベースの限界を超え、大量のリソースを事前に準備する必要はありません。MongoDB 8.0 の新しいスケーリング機能は、データの配布を最大 50 倍速化し、コストを最大 50% 削減します。 Resilience, scalability, and high availability 一般変更 求める暗号化 最新バージョンでは、Queryable Encryption により、範囲内で検索できるようになります。 で、 で、 そして、 たとえば、日付や数値などの特定の間隔でデータをフィルタリングし、データを暗号化する。 $lt $lte gt $gte エクスプレスクエリステージ Express は、単純な使用例のためのクエリパスを最適化する新しい実行段階として導入されました. If you are running a simple query that uses a single _id index, for example... db.customer.find({_id: ObjectId('670ec6b005b98857588f5b6a')}).explain() この新しい EXPRESS_IXSCAN ステージが含まれていることがわかります。 EXPRESSステージは、以下のいずれかになります。 EXPRESS_CLUSTERED_IXSCAN エクスプレス / Delete EXPRESS_IXSCAN EXPRESS_UPDATE 従来のプランステージを実行する代わりに、クエリは今度はこの新しいステージを使用します. This skipps regular query planning and execution, delivering up to 17% improvement in performance. Query Shape と Query Settings MongoDB のクエリ フォーマットは、フィルター、分類、プロジェクション、集計段階、および名前空間を含む類似のクエリを組み合わせる属性のセットを表します。これにより、MongoDB は、構造的に類似したクエリのためのクエリ プランを再利用することでパフォーマンスを向上させ、より効率的な実行につながります。 MongoDB 8.0 で始まり、クエリ フォーマットはクエリ設定をサポートし、クエリの一致のための特定の行動を定義できます。 そのような行動のひとつが、 設定: MongoDB が適用されると、その特定の値に関係なく、この形状に匹敵するすべてのクエリを自動的に拒否します。 reject: true 第三者のアプリケーションからクエリを受け取るデータベースを管理していると想像してください. One application starts sending heavy queries that perform a collection scan (COLLSCAN), significantly slowing down the system — for example, a query such as: Use case: db.pizzaOrders.find({price: 10}) // Explain Plan "winningPlan": { "stage": "COLLSCAN", "filter": { "price": { "$eq": 20 } }, }, クエリ設定は、この構造に一致するクエリを拒否するように設定できます(値に関係なく): db.adminCommand( { setQuerySettings: { find: "pizzaOrders", filter: { price: 20 }, $db: "my_database" }, settings: { comment: "Will be rejected", reject: true } } ) このコマンドは、すべてのクエリが検索するクエリ形式を設定します。 IN THE 実質は否定されるが、実際の クエリで提供された値 (焦点はクエリの構造に完全にあります) したがって、この構造に匹敵するクエリを実行する場合、 price pizzaOrders price db.pizzaOrders.find({price: 10}) クエリは MongoDB によって自動的に拒否されます: すべてのクエリ設定を表示するには、集計パイプラインの $querySettings 段階を使用できます。 db.aggregate( [ { $querySettings: {} } ] ) 結果 : [ { "queryShapeHash": "4DD2DED8A25C787DFA41325883052FABB97DDEE567B2636A3B188DDF0CCFE6F0", "settings": { "reject": true, "comment": "Will be rejected" }, "representativeQuery": { "find": "pizzaOrders", "filter": { "price": 20 }, "$db": "my_database" } } ] ただし、クエリの形状、すなわち実行されたクエリの異なる種類を確認する場合は、以下の 2 つのオプションがあります。 $QueryStatsを使います。 この集計段階は、クエリを実行するための統計を提供します。 . since the last server restart use('admin'); db.aggregate( [ { $queryStats: {} } ] ) これは、クエリパターンを分析し、パフォーマンスを最適化するのに役立ちます。 MongoDBのログをチェックする Slow クエリは、queryShapeHashes で MongoDB ログにログされます。 これは、最適化が必要な非効率的なクエリを特定するのに役立ちます。 削除するには、クエリ形式のハッシュを使用できます: db.adminCommand( { removeQuerySettings: '4DD2DED8A25C787DFA41325883052FABB97DDEE567B2636A3B188DDF0CCFE6F0' } ) このアプローチは、データベースが高リソース消費を引き起こす可能性のあるサードパーティのクエリによって影響されないことを保証するため、貴重です。 . without the need to make changes to the application 互換性と削減 行動欲求 バージョン 8.0 以前は、値を検索した場合、 , fields with the value で、 また、この新しいバージョンでは、保存されたデータは、 もはやリクエストで返されることはありません。 平等(例えば、 null undefined undefined null // People collection [ { _id: 1, name: null }, { _id: 2, name: undefined } ] このコレクションを考慮すると、次のクエリを実行すると、 db.people.find({name: null}) ...結果は: [ { _id: 1, name: null } ] Data with もはや返信されなくなります. あなたのアプリケーションにデータが含まれている場合 未定義のデータやクエリを書き換えたり、アップグレードしたりして、この行動の変更を説明できます。 undefined undefined : THE 型が削除され、一部の場合、挿入しようとすると、 に変換されることになります。 . Note undefined undefined null インデックスフィルター 利用を考える , as discussed in the query shape section of this article, since index filters are deprecated in this version. この記事のクエリ形状セクションで議論されたように、インデックスフィルターはこのバージョンでは削除されています。 より多くの機能を提供し、好ましい選択肢となっています. index filters now deprecated, it is advisable to switch to 先進的な特徴を活用するために setQuerySettings setQuerySettings setQuerySettings 計画と戦略のアップグレード 最新バージョンの新しい機能を見て、最新の MongoDB リリースにアップグレードすることを決めた後、このトピックでは、MongoDB Atlas のレプリカセットのスムーズで成功したアップグレードを確保するために理想的ないくつかの戦略とステップを説明します。 それぞれのシナリオには独自の特徴があり、アプリケーションがMongoDBの機能を使用する方法を理解することは、効果的なアップグレードに不可欠です。 アップグレード前評価 Upgrade version path すべて メンバーは、バージョン 8.0 にアップグレードする前にバージョン 7.0 を実行している必要があります。 レプリカセット 例えば、バージョン 5.0 シリーズからバージョン 8.0 に直接アップグレードすることはできず、6.0 シリーズからバージョン 8.0 にアップグレードすることはできません。 Review release notes 他の場所では、その情報よりも貴重な情報が含まれることはありません。 常にリリースされたすべてのノートに注意を払うようにしてください、特にブロックアップの変更、新しい機能、および削減された機能について。 バージョンのノートのリリース バージョンのノートのリリース Check the driver compatibility Mongodbに関連する何でもアップグレードする前に、ドライバーのドキュメントの互換性テーブルを確認することが重要です。 , you should make sure that the MongoDB version is compatible with the MongoDB driver you plan to use. この画像をご覧ください: avoid breaking your application MongoDB 8.0 のすべての機能を使用するには、ドライバ バージョン 5.2 から 5.3 を使用する必要があります。アプリケーション ドライバは、より新しいサーバー 機能を完全に活用するために更新する必要があります。 Cluster health check アップグレードを開始する前に、もう一つの重要なポイントは、レプリカセットのすべてのメンバーの健康状態をチェックすることです。 **すべてのノードが最適に動作していることを確認してください。 **この情報は、「データベースクラスター」メニューにアクセスしてクラスターをクリックして見つけることができます: この画面では、それぞれのノードに名前の隣に緑色の点があることに気づき、健康状態が良好であることを示します。 Staging cluster: your testing hub 安全なアップデートを確保し、リスクを軽減するためには、 ステージ環境は、最終ユーザーに影響を与えずに新しいバージョン、機能、変更をテストするための安全なゾーンとして機能します。 環境テスト Staging Cluster を作成する このステップでは、テスト用に専用クラスターを作成します。新しいクラスターを設定するための標準プロセスに従って、 生産環境を正確にシミュレートする 現在の生産バージョンに適合していることを確認する 2. 生産データでステージ更新 生産クラスターからの最近のバックアップを復元して、ステージ環境が現在の生産状態を反映するようにします。 バックアップを選択し、復元オプションを選択し、ステージクラスターをターゲットにすることによって、Atlas インターフェイスを介してこれを行うことができます。 3. Staging Cluster を 8.0 にアップグレード ステージ化クラスターを MongoDB 8.0 に更新して、新しいバージョンとその機能をテストします。これを行うには、クラスターをクリックして「Edit Configuration」と「Additional Settings」を選択してください。 4.あなたのアプリケーションをテスト データベースとアプリケーションの両方のテストを含む、すべてが期待通りに動作することを確認するためにテストを実行します。 生産クラスターのアップグレード ステージ化環境でテストした後、生産クラスターをアップグレードする前に、機能互換性バージョン(FCV)が適切に設定されていることを確認します。 新しい MongoDB バージョンの機能がクラスターで有効であるかを制御することによって、アップグレードプロセス中にセキュリティの追加のレベルを提供します. This allows you to transition gradually to the latest version, making sure everything works correctly before fully enabling the new features in production. FCV FCV の設定は必須ではありませんが、柔軟性を提供します。必要な場合は、FCV の設定を調整することによって、以前のバージョンに戻ることができます。 FCV を構成した後(望む場合)、生産クラスターのアップグレードに進むことができます。これを行うには、前のセクションで述べた同じ手順に従うだけで、今回はそれらを生産クラスターに適用してください。 監視 後のアップグレードは以前のすべてのステップと同様に重要であり、操作を監視することはプロセスの成功を確保するために極めて重要です。 チェックすべき重要なポイントは、 ノードの健康状態を監視し、正しく機能していることを確認します。 Node health : Keep an eye on the パフォーマンスの問題がないことを保証するための読み書き操作。 Latency of operations ラテン モニター THE アップグレード後に効率的に動作するようにします。 Query performance クエリのパフォーマンス : インデックスが正しく機能していることを確認し、必要に応じて最適化します。 Indexes 最後に、クラスター内の各ノードのメトリクスを確認してください. 彼らはあなたのシステムの全体的な健康への貴重な洞察を提供します. あなたはあなたのクラスターの「メトリクス」タブでそれらを見つけることができます: レコード あなたのアップグレードプランは、組織の特定のニーズと目標に合わせてカスタマイズする必要があります。MongoDBクラスターのサポートライフサイクルを監視し、バージョンリリースについて最新の情報を保持して、シームレスで効率的なアップグレードの準備をすることができます。 アプリケーションが MongoDB 機能とどのように相互作用するかを理解します。 あなたのアプリケーションに必要な変更を認識してください。 あなたのアップグレードを事前に計画してください。 ドライバーの更新を無視しないでください。 アップグレードを開始する前に徹底的にテストする。 あなたのアップグレードはどれほど複雑ですか? MongoDB 8.0 へのアップグレードに必要な努力は、現在のバージョン、ドライバーの互換性、データサイズ、経験レベルを含む複数の要因に依存します。 まっすぐアップグレード 既に MongoDB 7.0 を使用している場合、ドライバを更新し、完全にサポートされている Atlas レベルで実行している場合、アップグレードは一般的により速く、よりシンプルです。 複雑なアップグレード 以前のバージョン (たとえば 5.0 または 6.0) を使用している場合は、前述の通り、段階的にアップグレードする必要があります(たとえば 5.0 → 6.0 → 7.0 → 8.0)。 アップグレード時間はこれらの要因に基づいて大きく異なりますので、参照としてステージ化クラスターを使用します(前項で議論された)。 このアプローチは正確な時間を提供しませんが、アップグレードの合計期間の推定的なアイデアを提供し、それに応じて計画することができます。 can help estimate the duration. 複雑さに関係なく、ステージ環境のテストやクラスターの健康状態のモニタリングなどの最良の実践に従うことは、スムーズで信頼性の高い移行を保証します。 結論 この記事では、最新バージョンの主要な変更点、互換性の考慮事項、削減された機能、およびスムーズなアップグレードのためのベストプラクティスを強調しました。これらの側面を理解することで、MongoDB 8.0 へのシームレスな移行を保証し、さらにその強化された機能から恩恵を受けることができます。 この記事は、ブラジル・サンパウロ州の高級開発者弁護士であるRicardo Melloによって書かれています。RicardoはJavaとKotlinに焦点を当て、MongoDBアソシエイト開発者とJava SE 8プログラマーとしての認定を受けています。ソフトウェアエンジニアとしての13年の経験を持つ彼は、開発者を強化し、MongoDBでイノベーションを推進するために彼の専門知識を活用しています。 この記事は、ブラジル・サンパウロ州の高級開発者弁護士であるRicardo Melloによって書かれています。RicardoはJavaとKotlinに焦点を当て、MongoDBアソシエイト開発者とJava SE 8プログラマーとしての認定を受けています。ソフトウェアエンジニアとしての13年の経験を持つ彼は、開発者を強化し、MongoDBでイノベーションを推進するために彼の専門知識を活用しています。 リカルド・メロ リカルド・メロ リンク