14

MongoDBの既存のインデックスを削除せずに変更できますか?ドキュメントにはそれについて何も表示されていません。

文字列フィールドに一意でないインデックスがあります。コレクションは約600万のドキュメントです。レプリカセットです。

インデックスを削除して新しいインデックスを追加できることはわかっています。しかし、2つの理由で問題があります。

1)インデックスが存在しない場合、一部のクエリは非常に遅くなります。2)(私のプロジェクトに)新しいインデックスを追加すると、DBに非常に高い負荷がかかり、Webサイトの速度が明らかに低下します。

4

1 に答える 1

13

あなたが説明するようにインデックスを変更する方法はありません。パフォーマンスの観点からの結果が似ていると思う場合、たとえば、この操作が行われている間、データベースは半分作成/変更されたインデックスをどのように使用しますか?

代わりに、バックグラウンドオプションを使用して単一ノードでインデックスを作成することをお勧めします。これが構成の場合は、時間がかかりますが、通常の操作にそれほど干渉することはありません。それが終わったら、あなたはあなたの暇なときに古いインデックスを落とすことができます。

ただし、レプリカセット(推奨)がある場合は、インデックスの作成が常に(現在)セカンダリのフォアグラウンドで行われることに注意する必要があります。セカンダリへの負荷を回避したい場合は、ここで概説する手順に従って、メンバーを一度に1つずつ取り出し、セットに再参加する前に必要なインデックスを作成する必要があります。

http://docs.mongodb.org/manual/administration/indexes/#index-building-replica-sets

アップデート

2.6リリース以降、セカンダリでのバックグラウンドインデックスの構築が可能になります(詳細については、リリースノートを参照してください)。これは以前のバージョンにバックポートされることはないため、上記の注意事項は2.6より前のバージョンにも当てはまります。

最後に、一般的な注意として、バックグラウンドで構築されたインデックスは、一般に、フォアグラウンドで構築されたインデックスよりも大きく、効率が低いため、上記の方法論には引き続き使用できます。

于 2012-12-07T19:38:48.863 に答える