Reactive的objectId很长。
一个4字节的时间戳,表示对象的创建,从Unix时代开始,以秒为单位.每个进程生成一次5字节随机值.这个随机值对于机器和进程来说是唯一的。三字节递增计数器,初始化为随机值.
因此,如果创建了一个文档,我认为索引时间应该花很长时间。但实际上并非如此。
发布于 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包含时间戳,但确实存在性能问题。
https://stackoverflow.com/questions/72704387
复制相似问题