shard key
需要有高的散列程度(应该包含不同的值)。也就是shard key
需要拥有很多不同的值。便于数据的切分和迁移。- 尽量与应用程序融合。让mongos面对查询时可以直接定位到某个
shard
。 - 具有随机性。这是为了不会让某段时间内的
insert
请求全部集中到某个单独的分片上,造成单片的写速度成为整个集群的瓶颈。用ObjectId
作为shard key
时会发生随机性差情况。ObjectId
实际上由进程ID+TIMESTAMP + 其他因素
,所以一段时间内的timestamp
会相对集中。不过随机性高会有一个副作用,就是查询性比较差。可用hash key
(散列值)增加随机性。 - 如果片键变化少,又想它作为片键,可以选择使用组合片键。
- 片键数量有限,这种片键称为:小基数片键。这种片键,到数据量变多的时候,会造成数据无法分隔,磁盘逐渐耗尽的情况。
- 片键无法修改。
- 组合片键:{”值映射多个数据块”,”搜索字段”}