sql >> データベース >  >> NoSQL >> MongoDB

MongoDBでインデックスを作成することの危険性

    インデックスは、データベース操作の重要な部分です。適切なインデックスを定義すると、データベースサーバーのパフォーマンスに大きな違いが生じる可能性があります。ただし、MongoDBでインデックスを作成することには、日常業務で注意する必要のあるいくつかの落とし穴があります。高レベルのMongoDBは、コレクションにインデックスを作成するための3つの手法をサポートしています。

    1。フォアグラウンドインデックスビルド

    フォアグラウンドでインデックスを作成すると、データベース上の他のすべての操作がブロックされます。大規模なコレクションでは、これに数時間かかる場合があります。これは、インデックスの構築中にデータベースがダウンしていることを意味します。これがインデックスを作成するデフォルトのモードであることを考えると、多くの開発者が偶発的なインデックスの作成をトリガーする足で自分自身を撃つことは驚くべきことではありません。本番サーバーでフォアグラウンドインデックスのビルドをトリガーする正当な理由は実際にはありません(コレクションに少量のデータが含まれていることがわかっている場合を除く)。

    2。バックグラウンドインデックスビルド

    名前が示すように、バックグラウンドインデックス作成プロセスは、データベースサーバーの可用性に影響を与えることなく、バックグラウンドでインデックスを作成します。ただし、それでもリソースを大量に消費する操作であり、パフォーマンスの低下が予想されます。また、バックグラウンドで発生しているため、フォアグラウンドインデックスよりもビルドにかなり時間がかかる可能性があります。以前のバージョンのMongoDB(<2.6)では、レプリカセットのプライマリでバックグラウンドインデックスビルドを実行すると、セカンダリサーバーで「フォアグラウンド」ビルドとして実行されていましたが、ありがたいことに、もはやそうではありません。バックグラウンドビルドオンです。すべてのノード。バックグラウンドインデックスのビルドが中断された場合、サーバーの再起動時にフォアグラウンドインデックスのビルドとして再開されます。

    3。ローリングインデックスビルド

    ローリングインデックスビルドプロセスは、一度に1つのノードでのみインデックスをビルドします。次のようになります:

    1. レプリカセットからセカンダリノードをローテーションします(これを行うには、ポートを変更するか、スタンドアロンモードで再起動します)。
    2. フォアグラウンドでこのノードにインデックスを作成します。インデックスが作成されたら、ノードをローテーションしてレプリカセットに戻します。
    3. ノードが変更に追いついたら、次のノードに移動します。次のノードがプライマリである場合は、rs.stepDown()を実行してセカンダリノードにする必要があります。
    4. すすぎ、繰り返します。

    インデックスビルドプロセスの詳細は、MongoDBのドキュメントに記載されています。

    ローリングインデックスビルドを使用すると、アプリケーションのパフォーマンスに大きな影響を与えることなくインデックスを作成できます。ただし、フェイルオーバーが関係しているため、アプリケーションはそれを処理できる必要があります(とにかく処理する必要があります)。

    レプリカが設定されていない場合、ローリングインデックスビルドを実行できますか?スタンドアロンインスタンスの場合、残念ながら、唯一のオプションは「バックグラウンドインデックスビルド」です。

    ローリングインデックスビルドは、ScaleGridでインデックスをビルドするための推奨されるアプローチです。 UIも提供しており、UIからプロセス全体を簡単に開始できます。バックエンドは、完全なインデックスビルドに必要なすべてのオーケストレーションを実行します。これにより、サーバーインデックスビルドごとにサーバーがトリガーされます。セットアップを行ってから、ポイントアンドクリックするだけです!

    いつものように、さらに質問がある場合は、[email protected]までご連絡ください。


    1. MongoDB $ year

    2. MongoDBバッチ操作の最大サイズとは何ですか?

    3. githubリポジトリからDockerイメージを構築する方法

    4. MongoDB-1つのコレクションが存在しないLEFTJOINに相当