设置mongo的更好方法是什么?

时间:2012-04-20 14:50:53

标签: javascript node.js mongodb

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

其中一个群体,我们将其称为“当前群组”,其中查询的文档数量很少。

另一个群体,我们称之为“积压”,是一个大量的文件,经常被查询。

我的想法是,不要将这两种类型的同一文档混合在一起,这样我就可以查询非常活跃的“当前”文档,而无需每次都查看大量的“积压”。

这些应该是两个不同的系列还是相同的“汽车”系列?

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
    });
});

OR

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
    });
});

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我想我会发一个实际的答案,现在已经在评论中充分说明了(其他答案还不够好)。

将所有内容保存在一个集合中的好处是:

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

将所有内容保存在一个集合中的缺点是:

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

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

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

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

  • 您需要运行两个查询以对整个数据集执行任何操作,并合并结果