由于分片数据库使用分片键来拆分块和路由查询,所以我认为更多的分片键可能有助于使更多的查询有针对性
我试图像这样指定多个键
db.runCommand( { shardcollection : "test.users" , key : {_id:1, email : 1 ,address:1}
但我不知道它是否有效以及这样做的缺点是什么
在这里要清楚,您只能拥有一个分片键。所以你不能有多个分片键。
但是,您建议使用复合索引作为分片键。这可以做到,但有一些限制。
例如_id
,email
和的组合address
必须是唯一的。
用于选择 shard key 的文档。还有一些我无法在此处列出的注意事项。请看那个文件。
分片键的选择基于:
{coarseLocality : 1, search : 1}
roughLocality 是您想要的数据的任何位置,搜索是对数据的常见搜索。
你必须在你的分片键上有一个索引,所以如果你选择一个你不查询的随机值的键,你基本上是在浪费一个索引。每个额外的索引都会使写入速度变慢,因此保持索引的数量尽可能低很重要。
所以,增加分片键组合并没有多大帮助。
摘自 Kristina Chodrow 的书“Scaling MongoDB”。