0

同じ文書のセットがありますが、使用法に基づいて 2 つの異なるグループに分類できます。

これらのグループの 1 つを「現在の」グループと呼びますが、多くのクエリを実行するドキュメントの量が少ないです。

もう 1 つのグループ (「バックログ」と呼びます) は、クエリされる頻度がはるかに低い膨大な量のドキュメントです。

これら 2 種類の同じドキュメントを混在させないことで、膨大な量の「バックログ」を毎回ふるいにかけることなく、非常にアクティブな「現在の」ドキュメントをクエリできるようになると考えました。

これらは 2 つの異なるコレクションにあるべきですか、それとも同じ「車」コレクションにあるべきですか?

mongo.collection('cars', function(err, cars){
    cars.find({type:'new', color:'blue'}).toArray(function(err, newBlueCars) {
        //do something with newBlueCars
    });
});

mongo.collection('cars', function(err, cars){
    cars.find({type:'used', color:'blue'}).toArray(function(err, usedBlueCars) {
        //do something with usedBlueCars
    });
});

また

mongo.collection('cars.current', function(err, cars){
    cars.find({color:'blue'}).toArray(function(err, currentBlueCars) {
        //do something with newBlueCars
    });
});

mongo.collection('cars.backlog', function(err, cars){
    cars.find({color:'blue'}).toArray(function(err, backlogBlueCars) {
        //do something with usedBlueCars
    });
});
4

2 に答える 2

1

タイプと色を一緒に索引付けして、応答時間を短縮できます。それらを 2 つのコレクションに分ける必要はありません。これは、保守性を高めるための良い方法ではありません。両方で同じ操作が必要になる場合がありますが、この方法では、すべてを 2 回繰り返す必要があります。

于 2012-04-20T16:25:41.123 に答える
1

コメントで十分にハッシュ化されたので、実際の回答を投稿すると思いました(他の回答は十分ではありません)。

すべてを 1 つのコレクションにまとめることの利点は次のとおりです。

  • 1 回のクエリですべてのレコードをクエリできます
  • 疎インデックスを使用して、「現在の」レコードを効率的にインデックス化できます

すべてを 1 つのコレクションにまとめることの欠点は次のとおりです。

  • インデックスはおそらく、それらすべてをリードする「現在の」フィールドを持つ必要があります。これにより、余分なスペースが必要になり、ルックアップが遅くなります。
  • スパース インデックスを使用して複数のフィールドにインデックスを付けることはできません

それらを 2 つのコレクションに分割する利点は次のとおりです。

  • 無料のインデックスを取得するため、すべてのインデックスを「現在の」フィールドでリードする必要はありません
  • 「現在の」データには、RAMに簡単に収まるはるかに小さなインデックスがあります

それらを 2 つのコレクションに分割することの欠点は次のとおりです。

  • データセット全体で何かを行うには、2 つのクエリを実行し、結果をマージする必要があります。
于 2012-04-21T07:43:44.383 に答える