散列索引

哈希索引收集并存储索引字段值的哈希值。

哈希索引支持使用哈希分片键进行分片基于哈希的分片使用字段的哈希索引作为分片键来跨分片集群对数据进行分区。

用例

与范围分片相比,使用散列分片键对集合进行分片可以使分片之间的数据分布更加均匀

如果您的分片键单调增加,则使用散列索引作为分片键在分片之间均匀分配数据,而不是将数据写入上限为 maxKey的分片。

单调递增分片键的常见示例是时间戳和ObjectId值。

行为

浮点数字

哈希索引在哈希之前将浮点数截断为 64 位整数。例如,哈希索引使用相同的哈希来存储值2.32.22.9。这是一个碰撞,其中多个值被分配给单个散列键。冲突可能会对查询性能产生负面影响。

为了防止冲突,不要对无法可靠地转换为 64 位整数然后再转换回浮点数的浮点数使用哈希索引。

哈希索引不支持大于 2 53的浮点数 。

局限性

哈希索引对数组字段和唯一属性有限制。

数组字段

哈希函数不支持多键索引。您无法在包含数组的字段上创建哈希索引,也无法将数组插入哈希索引字段。

唯一约束

您不能对散列索引指定唯一约束。相反,您可以创建具有唯一约束的附加非散列索引。MongoDB 可以使用该非散列索引来强制所选字段的唯一性。

开始使用

要创建哈希索引,请参阅创建哈希索引。

细节

本节介绍哈希索引的技术细节。

哈希函数

重要的

当 MongoDB 使用哈希索引来解析查询时,它会使用哈希函数自动计算哈希值。应用程序不需要计算哈希值。

要查看某个键的哈希值是什么,请使用该 convertShardKeyToHashed()方法。此方法使用与散列索引相同的散列函数。

嵌入文档

散列函数会折叠嵌入的文档并计算整个值的散列。

了解更多

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""