我想知道mongodb中哈希分片键的内部结构是什么。例如,如果我的字段是一个时间戳,那么mongodb选择散列的常量是多少?
我猜关键字将是时间戳%N;N是什么?
如果这就是设计,我猜N不会随着时间而改变。如果N太小,我如何确定如果我有大量数据,那么在1个分片中不会有太多冲突?
谢谢
发布于 2013-08-26 18:52:02
散列键使用文档中的数据和标准散列函数(MD5)来生成文档的散列值。例如,假设您的索引在{name: 'hashed'}
上,并且您有以下文档:
{name: 'John', height: 73}
{name: 'Zardosht', height: 68}
MongoDB将通过MD5散列函数运行'John'
和'Zardosht'
,并获得随机形式的字节序列。然后,它将使用这些字节序列作为索引中使用的实际B树关键字。当您想要查询{name: 'John'}
时,它会再次执行MD5散列,获得与之前相同的字节序列,然后实际对该值执行索引查找。
您可以尝试使用mongo shell,并实际查看这些值是什么:
% mongodb-linux-x86_64-2.2.5/bin/mongo
MongoDB shell version: 2.2.5
connecting to: test
> db.runCommand({_hashBSONElement: {name: "John"}})
{
"key" : {
"name" : "John"
},
"seed" : 0,
"out" : NumberLong("5553133884637223031"),
"ok" : 1
}
> db.runCommand({_hashBSONElement: {name: "Zardosht"}})
{
"key" : {
"name" : "Zardosht"
},
"seed" : 0,
"out" : NumberLong("8641066842148283865"),
"ok" : 1
}
请注意,在我描述的任何内容中都没有N
,所以您不必担心这样的限制。
https://stackoverflow.com/questions/18440399
复制相似问题