文档章节

Mongodb自动生成的ObjectId可能会重复

Meta-Life
 Meta-Life
发布于 2016/09/20 10:43
字数 305
阅读 499
收藏 0

BSON ObjectId 占用空间小,可快速生成,可能唯一,可作为document的默认主键。它由12字节组成:

  • 4个字节 时间戳,代表ObjectId生成时间,单位是秒
  • 3个字节 产生ObjectId的机器识别码
  • 2个字节 产生ObjectId的进程id
  • 3个字节 以随机数初始化的一个计数器,java驱动以静态变量的形式共享计数器保证同一进程生成的随机数是递增的

注意:如果一秒内有多个进程生成的ObjectId,那么此时生成的ObjectId并不代表数据插入顺序;由于ObjectId由客户端生成的,所以客户端间的时钟偏移也会导致ObjectId顺序混乱

那么自动生成的ObjectId在什么情况下可能重复呢?

  1. 计数器溢出:同一机器同一客户端在一秒能插入超过16,777,216 (2^24) 的记录
  2. 非递增的随机计数器:一些驱动可能会使用随机数作为计数器,有1 / 16777216的几率重复。
  3. 机器和进程id散列冲突:不同的机器和进程生成了同一个hash

© 著作权归作者所有

共有 人打赏支持
Meta-Life
粉丝 2
博文 19
码字总数 6384
作品 0
东城
高级程序员
私信 提问
关于MongoDB ObjectId

ObjectId的构成 ObjectId的值由12个字节组成,其中, 4个字节表示时间戳(自Unix纪元以来的秒数),记录创建时间; 3个字节表示机器标识符,保证不同主机产生不同的ObjectId值; 2个字节表示...

群星纪元
04/10
0
0
MongoDB ObjectId详解及使用

MongoDB ObjectId详解及使用 2017年09月13日 14:25:18 universsky2015 阅读数:11802 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/universsky2015/article...

linjin200
02/22
0
0
MongoDB Plugin 1.0.2 发布,支持读写分离等特性

MongoDB Plugin 1.0.2 发布了,改进记录如下: --MongoKit-- 日志根据MongoDB官方建议使用SLF4J 去掉MongoKit的find中list的final声明 MongoKit的find现在会自动将每一行的ObjectId变为字符串...

tbaby
2016/05/16
2.2K
0
Linux下的Mongodb部署应用梳理

一、Mongodb简介 官网地址:http://www.mongodb.org/ MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。MongoDB 是一个介于关系数据库和非关系数据库之...

拎壶冲冲冲
2018/08/15
0
0
初识MongoDB-用法和用途

用意:记录一下自己学习MongoDB的一些体会. 适合范围, 安装和用法. 一. MongoDB相关 JavaScript统一天下 JavaScript正在快节奏地统一整个web开发流程. JvaScript是WEB前端开发的唯一依靠, 依赖...

清风漫步
2014/02/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
16分钟前
0
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
0
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
0
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
3
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部