2017-06-21 135 views
0

快速提问是否索引。对于在文档数组中查找特定“user_id”的集合,经常有查询。见下面 -Mongodb索引或不索引

_id:"bQddff44SF9SC99xRu", 
participants: 
[ 
    { 
     type:"client", 
     user_id:"mi7x5Yphuiiyevf5", 
     screen_name:"Bob", 
     active:false 
    }, 
    { 
     type:"agent", 
     user_id:"rgcy6hXT6hJSr8czX", 
     screen_name:"Harry", 
     active:false 
    } 
] 

}

难道是添加一个索引 'participants.user_id' 是个好主意?该数组被频繁添加,偶尔项目被删除。

更新 我用同一套数据的本地测试后添加索引,这当然似乎在蒙哥过程中的高CPU使用率有所下降。由于这些文件只有少量更新,我认为这是正确的举措。我正在寻找更多可能的索引和优化。

+0

你是否经常查询?你能忍受增加的写入时间与查询的性能增益吗?这些通常是决定是否使用索引的事情。什么不应该影响你是某人在这里的意见。做什么适合你。 –

回答

0

为什么要索引?查询时是否存在严重延迟问题?还是你想提前优化?

最终这里有很多变数使得它很难回答。包括但不限于:

  • 如何往往是查询集合中取得
  • 多少文档
  • 有多少用户在每个文档中
  • 添加多久/从文件中删除用户插入文档后。
  • 你需要优化插入/更新到集合

这可能是因为索引不是答案,而是你是如何构建你的数据。

+0

所以,是的,mongo进程的CPU使用率非常高。我使用Mongodb Compass标识的特定查询似乎每秒执行几次。我可以看到它每次搜索整个集合(34,000个并且正在增长)。用户至少会插入一个文档一次,并且每小时可以进行10次任何其他添加或删除操作。 –