首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活性MongoDb objectId是长的。但为什么索引这么快?

活性MongoDb objectId是长的。但为什么索引这么快?
EN

Stack Overflow用户
提问于 2022-06-21 16:43:51
回答 1查看 55关注 0票数 0

Reactive的objectId很长。

一个4字节的时间戳,表示对象的创建,从Unix时代开始,以秒为单位.每个进程生成一次5字节随机值.这个随机值对于机器和进程来说是唯一的。三字节递增计数器,初始化为随机值.

因此,如果创建了一个文档,我认为索引时间应该花很长时间。但实际上并非如此。

  1. 但是为什么_id索引速度这么快?如果我在创建文档时手动设置id值(除了随机唯一的长值),那么索引时间会很长吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-21 17:41:13

ObjectID是96位,就在BIGINT的中间,BIGINT是64位,通常用于自动递增SQL数据库中的in和UUID( 128位)。它们没那么大。

ObjectID("507f1f77bcf86cd799439011")在视觉上看起来比"4949320344“大,但是如果后者存储为128位数字,那么它的空间就会更大。

ObjectID相对于UUID*的一个优点是,通过增加时间戳,它们的值会增加:新is比旧is大。这意味着,如果您插入了一个文档,然后再插入另一个文档,就不难将索引扫描到应该插入的位置。如果将随机值放入ObjectID(),则需要更长的时间才能确定它在索引中的归属位置。

* UUIDv7 (以及v6和v8)通过类似ObjectID来解决这个问题,因为它们以增加时间戳开始,然后是随机数据。这使得它们作为主键很有用。UUIDv1包含时间戳,但确实存在性能问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72704387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档