Mongodb ObjectId格式

article/2025/10/3 9:53:04

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());

 

 


http://chatgpt.dhexx.cn/article/5oQJv8kc.shtml

相关文章

java objectid_关于MongoDB ObjectId

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

从根上理解MongoDB的ObjectId生成原理!

想写这篇文章好久了&#xff0c;一直抽不出时间。这两天端午节放假&#xff0c;我和娃都泡在图书馆&#xff0c;在他看书的空闲期&#xff0c;我拿出电脑写下了本文。 我们都知道&#xff0c;在分布式系统中&#xff0c;分布式 ID 有很多特殊的要求&#xff0c;其中之二就是要求…

ArcGIS中的OBJECTID、FID 和 OID 的区别!不要傻傻分不清

喜欢就关注我们吧 时常有很多我朋友分不清OBJECTID、FID 和 OID有什么区别&#xff0c;不懂得怎么应用和管理&#xff0c;今天我们来说个明白。 ArcGIS Desktop 产品要求独立表和属性表均具有 ObjectID字段&#xff0c;该字段包含唯一的长整型用于标识每个记录。 此 ID 由 Esri…

Mongo中id介绍

好记忆不如按烂笔头 &#xff0c;即便是最简单的&#xff0c;时间长了也难免会忘记&#xff0c;记下可以让你更明白。 2.6.6 _id和ObjectId MongoDB 中存储的文档必须有一个"_id" 键。这个键的值可以是任何类型的&#xff0c;默认是个ObjectId 对象。在一个集合里面…

canal

简介 canal [kənl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署&#xff0c;存在跨机房同步的业务需求&#xff0c;实现方式主要是基于业务 trigger 获取增…

阿里的数据同步神器——Canal

前言 同步数据的神器: Canal安装配置 canal [kə’nl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署, 存在跨机房同步的业务需求, 实现方式主要是基于业务 trigger 获取增量变更。从 2…

使用Canal组件订阅MySQL binlog数据增量

一、简介 Canal是一款强大的开源组件&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。 1. canal 工作原理 canal 模拟 MySQL slave 的交互协议&#xff0c;伪装自己为 MySQL slave &#xff0c;向 MySQL master 发送dump 协议MySQ…

mysql进阶:canal搭建主从|集群架构

0.引言 之前我们讲解过canal的各种应用&#xff0c;但是对于生产环境来讲&#xff0c;服务高可用是必须保证的。因此canal单节点是不能满足我们的需求的。就需要搭建canal集群。 1. canal集群模式 从架构方式上出发&#xff0c;我们用来保证服务高可用的手段主要是主从架构、…

ElasticSearch 7.15.2 使用java canal 接入实现灵活化增量数据准实时同步

前言&#xff1a; ①canal.adapter-1.1.5 支持一对一单表的增量数据同步ElasticSearch 7&#xff1b; ②对于多表聚合场景的SQL满足不了我们的业务需求。 ③采用java canal 接入&#xff0c;可以实现灵活化增量数据准实时同步 文章目录 一、java canal 接入1. 依赖导入2. 增加配…

浅入浅出keepalived+mysql实现高可用双机热备

当数据库发生宕机的情况,如果配置了数据库主从同步模式或主主同步模式,则可以从从库中获取数据。 当数据库发生宕机的情况,要求应用系统实现高可用,应用系统不会受到影响,需要对mysql进行双机热备实现数据库的高可用。 实现双机热备的方式有Mycat组件方式、canel组件方式、…

【硬刚大数据】大数据同步工具之FlinkCDC/Canal/Debezium对比

欢迎关注博客主页&#xff1a;微信搜&#xff1a;import_bigdata&#xff0c;大数据领域硬核原创作者_王知无(import_bigdata)_CSDN博客 欢迎点赞、收藏、留言 &#xff0c;欢迎留言交流&#xff01;本文由【王知无】原创&#xff0c;首发于 CSDN博客&#xff01;本文首发CSDN论…

4、Canal的 instance模块

一、总体结构 如确所述&#xff0c;Canal server的模式有两种&#xff1a;manager和spring 在core模块中&#xff0c;定义了CanalInstance接口&#xff0c;以及其抽象类子类AbstractCanalInstance。 在spring模块&#xff0c;提供了基于spring配置方式的CanalInstanceWithSpr…

canal实现mysql数据同步

前言 canal是实现mysql数据备份,异地灾备,异地数据同步等重要的中间件,在实际的业务场景中有着广泛的使用,本文基于小编所在项目中一个异地数据同步的场景为例,通过案例演示下利用canal实现mysql数据同步的过程 同步原理 如上图所示,为canal同步mysql数据的原理的简单示…

SpringBoot系列之canal和kafka实现异步实时更新

SpringBoot系列之canal和kafka实现异步实时更新 实验开发环境 JDK 1.8SpringBoot2.2.1Maven 3.2+开发工具 IntelliJ IDEAsmartGit1、什么是阿里canal? canal是阿里开源的, 对数据库增量日志解析,提供增量数据订阅和消费的组件。引用官网的图片,canal的工作原理主要是模拟…

Java:SpringBoot整合Canal+RabbitMQ组合实现MySQL数据监听

canal [kə’nl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费 目录 一、MySQL设置二、启动Canal服务端三、通过Canal客户端消费数据四、通过RabbitMQ消费数据1、启动RabbitMQ2、修改canal配置3、消…

Kubernetes 学习19基于canel的网络策略

一、概述 1、我们说过&#xff0c;k8s的可用插件有很多&#xff0c;除了flannel之外&#xff0c;还有一个流行的叫做calico的组件&#xff0c;不过calico在很多项目中都会有这个名字被应用&#xff0c;所以他们把自己称为project calico&#xff0c;但是很多时候我们在kubernet…

基于canel的网络策略

基于canel的网络策略 canel工作的默认网段是192.168.0.0/16的网段 官网&#xff1a;https://docs.projectcalico.org/v3.2/introduction/ 参考地址&#xff1a; https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel 分别运行&#xff1a;…

REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题

文章目录 ①. 缓存和数据库双写一致保证②. 缓存数据一致性-解决方案③. 缓存数据一致性-解决-Canal ①. 缓存和数据库双写一致保证 ①. 只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题 ②. 那么,如何解决一致性问题&#xff1f;提…

binlog+canel windows服务器下mysql数据的部署过程

1.开启mysql的binlog功能&#xff0c;并配置binlog模式为row。 1.1windos下修改mysql的my.ini文件&#xff08;该文件在C:\ProgramData\MySQL\MySQL Server 5.7&#xff0c;而不是C:\Program Files\MySQL\MySQL Server 5.7下的my-default.ini文件&#xff0c;C:\Pr…

十九、基于canel的网络策略

说明 Calico的官方地址&#xff1a;https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/flannel 安装canel之前需要注意 如果您使用的是pod CIDR 10.244.0.0/16&#xff0c;请跳至下一步。如果您使用的是其他pod CIDR&#xff0c;请使用以下命令设…