1

MongoDBコレクションに特に多数のスパースインデックスを含める必要があります。その数はおそらく数千人に満たないでしょう。保存されたドキュメントはそれぞれ、比較的少数のインデックスのみを使用し、平均してそれぞれ約10〜30個です。ただし、ドキュメントは非常に多様であり、それぞれ異なるインデックスのセットが必要になります。

コレクションに1000を超えるスパースインデックスがある場合の考えられる影響に関するドキュメントが見つかりません。スペースは問題ではありません。私が特に懸念しているのは、時間の節約とクエリの設定への影響です。MongoDBは、この大きなオーバーヘッドで行き詰まりますか?

私は自分のベンチマークを実行しますが、a)誰かがこれに関するいくつかの公式ガイドラインを知っているかどうか、およびb)このシナリオの経験があるかどうかを知りたいです。

4

2 に答える 2

1

遭遇する可能性のある名前空間の制限(インデックス、コレクションなどの総数)がありますが、これは--nssizeで解除できます:http ://www.mongodb.org/display/DOCS/Using+a+ Large + Number + of + Collections

挿入にはいくらかのオーバーヘッドが追加されますが、挿入するドキュメントをほとんどのインデックスに追加する必要がないことがわかると、「すぐに失敗」するはずです。免責事項:私はあなたが考えているほど多くのベンチマークを試していません。それがうまくいくかどうか興味があります。

覚えておくべきことの1つは、$ orを使用しないと、クエリごとに複数のインデックスを使用できないことです。これは、mongodbの現在の制限です。http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Oneindexperquery

于 2012-07-07T17:14:03.870 に答える
1

これがサーバーに実装されるまで、ORクエリを2回実行できます(フィールドごとに1回)、結果をクライアントにマージします。

たとえば、オブジェクトがある場合:

{_id: 123, foo: 12}
{_id: 124, bar: 13}
{_id: 124, foo: 12, bar: 15}

1つのスパースインデックス{foo:1, _id:1}と別のインデックスを使用して、and 、次にORまたはANDの{bar:1, _id:1}ようなクエリをクライアントで実行できます。次に、一致するIDのみの完全なオブジェクトを取得できます。find({foo:12}, {_id:1})find({bar:13}, {_id:1})

注:_id検索クエリのフィールドのみを取得することで、Mongoはインデックスから結果を返すことができ、結果を提供するためにBSONを解凍する必要がないため、これを非常に迅速に行うことができます。

于 2013-01-21T10:55:52.370 に答える