有什么方法可以让Mongo过滤动态记录更快?

时间:2014-12-03 13:46:00

标签: mongodb

方案

我有Mongo集合Items,其中包含动态项目对象。目前我有超过300万条记录。我在MongoSharp中使用C#,但我认为它与我的问题无关。

以下是Item示例(它的字段多于3 ):

{
  _id : "1234567890",
  Code : 888596937,
  RefNumber : "GHTZKL",
  ...
}

AFAIK使用TextSearch毫无意义,因为它不是真正的单词,只是一些代码所以它不会给我任何有益的东西。我也不能将它们全部编入索引,因为那时我必须索引每一个字段。

问题

现在,当我过滤数据时,需要大约1-3秒(在ssd上)。有什么方法可以让我更快地过滤我的物品,或者它能尽快得到它?

1 个答案:

答案 0 :(得分:0)

您没有提到要搜索的字段,但听起来您想搜索任意属性。这是一个常见的设计,并与MongoDB的反模式接壤。避免现在收集的收集扫描的唯一方法是索引要搜索的字段,但是当您不知道字段将提前是什么时,将索引每个字段。可能。对此的解决方案仅命名公共字段(及其上的索引),然后将其他字段分组到文档中的数组中的名称/值对。然后,您可以索引该数组以进行快速搜索。

关于NVP阵列的一个警告:如果你的阵列变得非常大(数百个属性),你的索引大小将会大幅增加。尝试保持阵列尺寸相当小是最好的。

有关此设计模式的详细信息,请参阅Asya' great writeup