前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >遇到的一则MongoDB objectid冲突的问题

遇到的一则MongoDB objectid冲突的问题

作者头像
保持热爱奔赴山海
发布2020-05-21 10:41:59
发布2020-05-21 10:41:59
1.7K0
举报
文章被收录于专栏:数据库相关数据库相关

最近开发反馈sentry遇到mongodb写入报 objectid 重复的情况,类似下图:

我们生产用的是mongo3.4的版本

官方文档介绍3.4的 objectid生成规则如下:

https://docs.mongodb.com/v3.4/reference/method/ObjectId/

  • a 4-byte timestamp value, representing the ObjectId’s creation, measured in seconds since the Unix epoch  4 个字节表示时间戳, unixtime
  • a 5-byte random value  5 个字节随机数
  • a 3-byte incrementing counter, initialized to a random value 3 个字节表示一个自增的数

举例子:

24位的objectid,我们按照上面的规则来拆分成3段:

5ec428fca413e054714e7fb2拆分:

5ec428fc --> 1589913852 --> 2020-05-20 02:44:12

a413e05471 -->704708105329

4e7fb2 --> 5144498

5ec428fca413e054714e7fb3拆分:

5ec428fc --> 1589913852 --> 2020-05-20 02:44:12

a413e05471 --> 704708105329

4e7fb3 --> 5144499

可以看到,上面的2个objectid只有最后的counter段有差异,生产上如果我们写入并发比较高,还是会出现objectid冲突的情况发生的。

附带,mongodb3.2的objectid生成规则(和3.4版本不同):

https://docs.mongodb.com/v3.2/reference/method/ObjectId/

  • a 4-byte value representing the seconds since the Unix epoch,
  • a 3-byte machine identifier,
  • a 2-byte process id, and
  • a 3-byte counter, starting with a random value.

参考: https://blog.wolfogre.com/posts/mongo-objectid-design/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档