Mongodb ObjectId格式
ObjectId是一个24位的字符串,实际是由一组十六进制的字符构成,共12个字节。(1个字节8位能表示2个十六进制数,12个字节能表示24个十六进制数)。
ObjectId 是一个12字节 BSON 类型数据,有以下格式:
- 前4个字节表示时间戳(精确到秒的时间戳)
- 接下来的3个字节是机器标识码
- 紧接的两个字节由进程id组成(PID)
- 最后三个字节是随机数。
我们的SpringBoot、SpringMVC程序往Mongodb插入一个文件时,这个ObjectId不是Mongodb生成的,而是由我们的应用程序生成的保存到Mongodb数据库。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring-boot-starter-data-mongodb实现了ObjectId类,里面实现了ObjectId的生成。
首先看一下ObjectId有一个静态代码块
0x01000000 ---> 0000 0001 0000 0000 0000 0000 0000 0000 ---> 2^24
0x00008000 ---> 0000 0000 0000 0000 1000 0000 0000 0000 ---> 2^15
RANDOM_VALUE1代表了3个字节的机器标识符
RANDOM_VALUE2代表了2个字节的进程id(两个字节的最大值为2^16,但是操作系统的pid范围的最大值默认是2^15,所以随机生成数最大值的范围到2^15就够了)
ObjectId类里还有一个重要的变量,NEXT_COUNTER,它是一个静态线程安全的Integer(在同一个java进程中,在一秒内,多个线程同时生成ObjectId,最后每个ObjectId的最后三个字节一定是不一样的),最后三个字节的随机数将由它来生成,初始值是随机的,每使用一次就自增1,使用的时候会跟0x00ffffff相与,保证数值在三个字节以内。
private static final AtomicInteger NEXT_COUNTER = new AtomicInteger(new SecureRandom().nextInt());
Mongodb ObjectId格式相关推荐
- mongodb objectid java_我可以确定字符串是否是MongoDB ObjectID吗?
回答(10) 2 years ago 我发现mongoose ObjectId验证器用于验证有效的objectIds,但我发现了一些无效ID被认为有效的情况 . (例如:任何12个字符长的字符串) v ...
- mongodb 时间格式的转换
mongodb内置的时间类是ISODate,当我们使用springdatamongo的时候,Spring 会将java.util.Date一直对应 而要想在数据库中对时间格式做相互转换的话,要注意时以 ...
- mysql_时间段维度统计,关于MongoDB时间格式转换和时间段聚合统计的用法总结
一 . 背景需求 在日常的业务需求中,我们往往会根据时间段来统计数据.例如,统计每小时的下单量:每天的库存变化,这类信息数据对运营管理很重要. 这类数据统计依赖于各个时间维度,年月日.时分秒都有可能. ...
- java objectid_关于MongoDB ObjectId
ObjectId的构成 ObjectId的值由12个字节组成,其中, 4个字节表示时间戳(自Unix纪元以来的秒数),记录创建时间: 3个字节表示机器标识符,保证不同主机产生不同的ObjectId值: ...
- java objectid_如何在java中创建mongoDB objectid
参考 How to add an array to a MongoDB document using Java?后 我用java创建了一个mongo模式 它有子元素,我得到主文件的_id 我想在子元素 ...
- Python Cerberus
cerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库) 前言 文章内容有点多,是自己学习cerberus的记录,原文,由于篇幅有限,源码的解析就没有了,源码不是 ...
- MongoDB SpringBoot ObjectId序列化json为String
mongodb的ObjectId默认序列化为bean对象,如果需要转换为json字符对象,配置如下 @Configuration public class JacksonConfig implemen ...
- mongodb 字符串转bson_BSON及mongoDB数据类型
JSON是一种被广泛使用的轻量级的数据交换格式,支持现今绝大多数主流的开发语言.而近几年崛起的mongDB则采用了类JSON的数据格式,在JSON之上进行了丰富和增强,使得mongoDB可以处理及报错 ...
- 【MongoDB】5.MongoDB与java的简单结合
1.首先 你的清楚你的MongoDB的版本是多少 就下载对应的架包 下载地址如下: http://mongodb.github.io/mongo-java-driver/ 2.新建一个项目 把架包 ...
最新文章
- 2018 俄罗斯世界杯赛程时间表
- neo4j安装_Neo4J和Enterprise Java的撤消功能
- DAY4-打卡第四天-2018-1-12
- c++builder传递参数_参数按值传递和按地址传递过程中,指向内存的指针如何变化?...
- pojo类不能有默认值怎么办_打印机不能打印是什么原因 打印机不能打印处理方法介绍【详解】...
- 【CodeVS】1993草地排水
- 读写锁分离的循环队列
- 网络的小区号和网络tac_网络问政|城基路老旧小区排污管长期堵塞没人管?
- 学了python的感悟_初学python之感悟
- java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载
- 软件测试中期答辩,中期答辩材料创新张颖
- 通过网页端保存ins图片的方法(谷歌浏览器)
- 人工智能专业好就业吗?AI就业前景
- 对策论基础---矩阵对策的解法
- 部门来了个测试工程师,一副小毛孩样,本以为很菜,谁想到...
- Tarena - 分组查询
- I9 9900K线程_彗星降落人间——Intel第十代台式机酷睿处理器评测之I9篇
- 计算机教案三维目标,教学设计的三维目标
- 福大软工 · 最终作业 - 软件工程实践总结(个人)
- Linux下如何颁发证书:学习使用openssl搭建一个CA
热门文章
- 做父母“不吼不叫”的六种方法
- 网游已成文化产业支柱:年入600亿为电影4.5倍
- openpnp - camera - FPS掉帧的解决思路
- 联想小新Pro16和小新air15 的区别 哪个更值得入手
- 如何把map转成json字符串
- 设计模式 - Reactor 模式
- 调试经验——Ryzen vs i7(AMD锐龙处理器与Intel i7处理器性能对比)
- Orleans 2.0 官方文档 ——Grains定时器和提醒器(Reminder)
- InfluxDB删除数据
- 贫瘠之地手游一直显示连接服务器,《炉石传说》贫瘠之地的锤炼进入异常解决攻略 进不去如何解决...