4

由于分片数据库使用分片键来拆分块和路由查询,所以我认为更多的分片键可能有助于使更多的查询有针对性

我试图像这样指定多个键

db.runCommand( { shardcollection : "test.users" , key : {_id:1, email : 1 ,address:1}

但我不知道它是否有效以及这样做的缺点是什么

4

2 回答 2

4

在这里要清楚,您只能拥有一个分片键。所以你不能有多个分片键

但是,您建议使用复合索引作为分片键。这可以做到,但有一些限制。

例如_id,email和的组合address必须是唯一的。

用于选择 shard key 的文档。还有一些我无法在此处列出的注意事项。请看那个文件。

于 2011-04-14T19:16:48.770 回答
3

分片键的选择基于:

{coarseLocality : 1, search : 1}

roughLocality 是您想要的数据的任何位置,搜索是对数据的常见搜索。

你必须在你的分片键上有一个索引,所以如果你选择一个你不查询的随机值的键,你基本上是在浪费一个索引。每个额外的索引都会使写入速度变慢,因此保持索引的数量尽可能低很重要。

所以,增加分片键组合并没有多大帮助。

摘自 Kristina Chodrow 的书“Scaling MongoDB”。

于 2012-10-23T19:28:37.603 回答