mongodb - MongoDB ObjectID 生成规则影响插入顺序
问题描述
我是一个新的 Mongodb 用户,从它显示的 MongoDB 官方文档链接
中:
返回一个新的 ObjectId 值。12 字节的 ObjectId 值包括:
a 4-byte value representing the seconds since the Unix epoch, a 5-byte random value, and a 3-byte counter, starting with a random value.
在我对 mongodb 的极限体验中,我认为它就像这个
时间戳 + 随机值 + 计数器
这是我的问题
1. 生成的随机数小于前一秒插入生成的随机数。数据插入的顺序和数据的ObjectID顺序不一样?是吗?
2. 计数器也以随机值启动。我认为计数器的最大值是 2^3*8 (2^24) ,但是当计数器以非常大的值开始时。会发生什么?(我的意思是这会影响写入数据的总量吗?和插入顺序)
提前致谢 。
解决方案
最后。我找到了一些关于这个问题的文件。
对存储 ObjectId 值的 _id 字段进行排序大致相当于按创建时间排序。
重要的
虽然 ObjectId 值应随时间增加,但它们不一定是单调的。这是因为他们:
仅包含一秒的时间分辨率,因此在同一秒内创建的 ObjectId 值没有保证顺序,并且由可能具有不同系统时钟的客户端生成。
这份文件显示。他们在某些情况下并不有序。
推荐阅读
- reactjs - 如何使用地理定位追踪路线?
- javascript - 如何防止 Firebase Cloud Function 崩溃以及如何发送错误消息作为响应?
- mongodb - 为什么mongodb在使用gt和lt查询时包含范围之外的值?
- webpack - 用于内联 javascript 函数的 Webpack
- c++ - Eigen Half.h 编译错误:“struct Eigen::half”没有名为“x”的成员
- r - 如何将 geom_boxplot 的五个数字提取到一个表中?
- php - 错误消息:尝试访问 bool 类型值的数组偏移量
- python - 根据系列值拆分 DataFrame
- distance - 如何确定点到四面体表面的距离?
- java - 在 Maven 属性中指定 JDK 16