如何提高MongoDB中多字段搜索的性能?

时间:2017-07-06 23:22:26

标签: python django mongodb

我有一个集合(约900k的文档和计数)。你可以在附件中看到的doc方案。我希望在任何字段组合中搜索任何子文档中的几乎每个字段。例如:

for(j in c("gear", "carb"))
    set(dt, i = which(dt[[j]] == 4 & dt[["wt"]] == 2.620), j = j, value = 0)

dt
#     mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1: 21.0   6  160 110 3.90 2.620 16.46  0  4    0    0
# 2: 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# 3: 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

硬件 4 x英特尔至强E5-2650 2.60GHz,16 GB RAM,SSD磁盘,SDD驱动器8GB交换。
应用程序依赖项: python 3.6,Django,mongoengine,pymongo。

更多信息:
Sample documentIndices setupDatabase and server status

2 个答案:

答案 0 :(得分:2)

您可能需要考虑一种对此类访问模式更有效的数据模型。

MongoDB中的性能是通过确保您的查询完全编入索引以及正在使用的索引fit in memory (or in cache, for WiredTiger)来实现的。允许查询多个字段的任何组合的访问模式将是昂贵的,因为它将不可避免地导致尝试索引每个字段组合,这将对抗失败的战斗。

考虑一个faceted search data model,它允许一组有限的索引更好地覆盖各种查询过滤器。

答案 1 :(得分:0)

好吧,我以elasticsearch + mongo-connector结束了。