gpt4 book ai didi

mongodb 将 bsonid 替换为 auto inc 整数基准

转载 作者:IT王子 更新时间:2023-10-29 06:04:36 25 4
gpt4 key购买 nike

我已经研究过这个话题,但仍然无法得到结论性的答案。我想知道最好将 mongodb _id (BsonObj) 替换为和 Auto Inc intger

自从我阅读了here将 _id 替换为 auto inc int 不是最佳做法

Generally in MongoDB, you would not use an auto-increment pattern for the _id field, or any field, because it does not scale for databases

我已经使用 _id -> {redis.incr("my_id")} 实现了这个

它有效,但我想知道:1. 为什么 mongo 首先使用 Bsson,为什么他们没有内置功能将其替换为 auto inc?2. auto inc integer 是否存在大规模基准?

最佳答案

正如他们在文章中所说,使用自增键对数据库的可扩展性不是很好。

可以提及以下几点:

  • 自动递增键倾向于将最近插入的行/文档定位在同一页或索引数据结构(例如 btrees)中的 block 中。许多插入数据的连接会产生争用。即使是支持行级锁定的可扩展性很强的数据库(例如 Oracle)也无法避免这个问题。不过,这一点并不真正适用于 MongoDB,因为锁定粒度要差得多(数据库锁定)。

  • 单调序列可以触发涉及昂贵的索引重新平衡的数据管理模式。这取决于 btree 的实现,但是在 btree 的一端插入而在另一端删除往往会使 btree 不平衡。

  • 在基于范围分区的分布式系统中(例如使用自动分片功能时的 MongoDB),自动增量键倾向于将最近插入的文档的事件定位在同一节点上。工作负载将应用于一个特定的分片,而不是分布在所有分片上。它将在集群中创建一个热点。

基准通常没有用,因为它们不适用于您的工作量。您可以构建自己的基准测试,如果您想看到使用单调序列作为主键的负面影响,请务必使用许多并行连接来插入数据。

请注意,在您的示例中,Redis 和 MongoDB 都倾向于序列化工作负载,因为 Redis 是单线程的,如果 MongoDB 流量集中在单个节点上,您将争用数据库锁。

如果您仍想使用自动递增键,请确保避免对该键进行分片,或使用 hashed shard key .

关于mongodb 将 bsonid 替换为 auto inc 整数基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020710/

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