【发布时间】:2018-03-17 23:26:36
【问题描述】:
根据 mongoDB 文档,不建议为大型数组创建多键索引,那么替代方案是什么?
我想在我的应用用户的一个联系人也开始使用该应用时通知他们,因此我必须上传和管理每个用户的联系人列表。 我们正在使用带有副本集的 mongoDB 和两台辅助机器。 mongo 可以处理具有数百个值的数组的多键索引吗? 管理数十万用户的数百个联系人可能非常困难。
多键解决方案如下所示:
{
customerId: "id1",
contacts: ["aaa", "aab", "aac", .... "zzz"]
}
索引:createIndex({ contacts: 1 })。
另一种解决方案是将每个联系人保存在自己的文档中,并保存与他相关的所有应用用户:
{
phone: "aaa",
contacts: ["id1", "id2", "id3"]
},
{
phone: "aab",
contacts: ["id1"]
},
{
phone: "aac",
contacts: ["id1"]
},
......
{
phone: "zzz",
contacts: ["id1"]
}
index: createIndex( { phone: 1 } )
在上传联系人列表时,两者的写作表现都很差:
第一个用于计算巨大的索引,第二个用于同时更新大量文档。
有没有更好的方法?
我正在使用带有两台辅助机器的副本集,分片键有帮助吗?
谢谢
【问题讨论】:
标签: arrays mongodb performance indexing multikey