0

我有一组相同的文档,但可以根据使用情况分为两个不同的组。

其中一个组,我们将它们称为“当前”,有少量文档被大量查询。

另一组,我们将它们称为“积压”,是查询频率较低的大量文档。

我的想法是,不混合这两种类型的同一文档将允许我查询非常活跃的“当前”文档,而无需每次都筛选大量“积压”。

这些应该在两个不同的集合中还是在同一个“汽车”集合中?

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

您可以将类型和颜色索引在一起并获得良好的响应时间,无需将它们分成两个集合,这不是可维护性的好习惯。您可能需要对两者进行相同的操作,但这样一来,您将需要重复所有操作两次。

于 2012-04-20T16:25:41.123 回答
1

我想我会发布一个实际的答案,因为它已经在评论中充分散列(另一个答案不够好)。

将它们全部保存在一个集合中的好处是:

  • 可以在单个查询中查询所有记录
  • 可以使用稀疏索引来有效地索引“当前”记录

将它们全部保存在一个集合中的缺点是:

  • 索引可能需要有“当前”字段引导所有索引,这会占用额外空间并使查找速度变慢
  • 无法使用稀疏索引索引多个字段

将它们分成两个集合的好处是:

  • 您将获得一个免费索引,因此您无需使用“当前”字段引导所有索引
  • 您的“当前”数据将具有更小的索引,可以轻松放入 RAM

将它们分成两个集合的缺点是:

  • 您需要运行两个查询才能对整个数据集执行任何操作,并合并结果
于 2012-04-21T07:43:44.383 回答