我有一个集合(约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 document,
Indices setup,
Database and server status
答案 0 :(得分:2)
您可能需要考虑一种对此类访问模式更有效的数据模型。
MongoDB中的性能是通过确保您的查询完全编入索引以及正在使用的索引fit in memory (or in cache, for WiredTiger)来实现的。允许查询多个字段的任何组合的访问模式将是昂贵的,因为它将不可避免地导致尝试索引每个字段组合,这将对抗失败的战斗。
考虑一个faceted search data model,它允许一组有限的索引更好地覆盖各种查询过滤器。
答案 1 :(得分:0)
好吧,我以elasticsearch + mongo-connector结束了。