gpt4 book ai didi

mongodb分片自动增量分片键

转载 作者:行者123 更新时间:2023-12-02 05:17:40 28 4
gpt4 key购买 nike

阅读了有关分片、分片键和 block 迁移的文档后,我仍然无法掌握一个概念。

任何试图描述为什么不选择自动增量分片键的概念的人都告诉我,这是由于 mongo 将始终写入同一个分片的结果,因此这会增加负载,因为那分片将处理连续写入并迁移 block 。

我的问题是,为什么会这样?为什么自动增量值会导致写请求总是被路由到一个特定的分片?分片的全部意义不是 mongos 应该知道什么是“最不”平衡的分片,而是写入这个分片,还是我理解错了?

提前致谢

最佳答案

目前的分片机制存在这个问题。基本上,每个分片将提供其键位于连续范围内的数据。如果我们选择一个自动增量键,所有写操作都将被路由到一个分片,该分片提供比所有其他分片都大的键的数据。

这是使用自增键的集合的问题。幸运的是,我们可以选择任何属性作为分片键。对于大多数情况,我们不会被迫使用“_id”作为分片键。如果对象具有合适的属性,例如博客应用的“用户名”,我们可以将其用作分片键。如果没有合适的属性,我们可以为每个对象添加一个属性列作为分片键,这个属性可以使用一些简单的哈希算法来计算。例如,如果我们有一个自动递增的 _id,我们可以像这样简单地计算分片键:

sharding_key = _id % 257

在您拥有超过 257 个分片之前,上述哈希应该足够好。

顺便说一句,自动生成的 ObjectId 不是分片键的好选择,因为它是基于时间的。

此外,MongoDB 2.3 中还有一项新功能支持散列键(参见 https://jira.mongodb.org/browse/SERVER-2001MongoDB 2.4 release note)。

关于mongodb分片自动增量分片键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com