通りの言葉は、使用しているインデックスをメモリに保持できないと、MongoDBの速度が低下するということです。これはシャーディングでどのように機能しますか?シャードはそれ自体のBTreeのみをメモリに保持しますか、それともすべてのシャードはコレクション全体のインデックスをメモリに保持する必要がありますか?
2 に答える
シャードはそれ自体のBTreeのみをメモリに保持しますか...?
はい、各シャードは独自のインデックスを管理します。
通りの言葉は、使用しているインデックスをメモリに保持できないと、MongoDBの速度が低下するということです。
シャーディングインデックスとセカンダリインデックスを使用すると、実際にはさらに悪化することが予想されます。重要な問題は、ルータープロセス(mongos
)がセカンダリインデックスのデータについて何も知らないことです。
シャードキーを使用してクエリを実行すると、正しいサーバーに直接ルーティングされます。ほとんどの場合、これによりワークロードが平準化されます。したがって、100個のクエリを100台のサーバーに分散させることができ、各サーバーは1個のクエリにのみ応答します。
ただし、二次キーを使用してクエリを実行する場合、そのクエリはすべてのサーバーに送信される必要があります。したがって、ルーターへの100クエリは、100サーバー全体で10,000クエリ、またはサーバーごとに100クエリになります。サーバーを追加すると、これらの「非シャードキー」クエリの効率は低下します。ワークロードのバランスがとれることはありません。
詳細については、こちらのMongoDBドキュメントをご覧ください。
インデックスのそれ自体の部分(他のシャードのデータについては知りません)。そうしないと、スケーリングはうまく機能しません。シャーディングの詳細については、次のドキュメントを参照してください: http ://www.mongodb.org/display/DOCS/Sharding+Introduction