mongodb中的_id的ObjectId的生成规则

MongoDB中存储的文档必须有一个"_id" 。这个键值可以是任何类型,默认是ObjectID对象。在一个集合里,每个文档都有一个唯一的“_id”,确保集合里的每个文档都能被唯一标示。

ObjectID使用12字节的存储空间,是一个由24个16进制数字组成的字符串。

ObjectId的12个字节按照如下方式生成

时间戳(1571234567123) 机器码(主机标识符) PID(进程id) 计数器
0,1,2,3 4,5,6 7,8 9,10,11
  • 前四位是时间戳,可以提供秒级别的唯一性。
  • 接下来三位是所在主机的唯一标识符,通常是机器主机名的散列值。
  • 接下来两位是产生 ObjectId 的 PID,确保同一台机器上并发产生的 ObjectId 是唯一的。
  • 前九位保证了同一秒钟不同机器的不同进程产生的 ObjectId 时唯一的。
  • 最后三位是自增计数器,确保相同进程同一秒钟产生的 ObjectId 是唯一的。

原文地址:https://www.cnblogs.com/theworld/p/12098632.html

时间: 2024-11-01 18:13:48

mongodb中的_id的ObjectId的生成规则的相关文章

MongoDB中的_id和ObjectId

ObjectId是"_id"的默认类型.它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它. 这是MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时.MongoDB从一开始就设计用来作为分布式数据库,处理多个节 点是一个核心要求.后面会讲到ObjectId类型在分片环境中容易生成得多. ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串.由于看

PD中设置外键约束名称生成规则

选择Database->Edit Current DBMS选择Scripts->Objects->Reference->ConstName可以发现右侧的Value为: FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT% 可见,该命名方法是:'FK_'+8位子表名+9位Reference名+8位父表名,你可以根据这中模式自定义为: FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT% 但是注意:oracle中约束.表名.字段名都不能超过

对MongoDB中的数据进行搜索(2)

MongoDB在大多数的情形中都是作为数据存储的模块而被使用,作为一个数据库,一般不应该承担更多的任务. 从专业性的角度来说,将文本搜索的任务交由专业的搜索引擎来负责,往往是更好的选择. 常用的搜索引擎与MongoDB往往都有着现成的工具,可以方便的进行结合. 1.Sphinx与mongodb-sphinx Sphinx是一个C++编写的文本搜索引擎,其本身与MySQL结合的非常好,可以非常方便的从MySQL中导入数据. 对于其他的数据库来说,Sphinx并不提供原生的支持,但是Sphinx提供

mongodb 数据更新与_id之间的故事

今天在对接接口的时候遇到一些问题,因为之前为了方便验证接口写的对不对是往数据库里面自己插的一些数据,刚开始用的时候还用的不亦乐乎,后来遇到更新的时候出错了. 比如我们这个APP是个医疗APP刚开始注册的时候默认都为病人,如下 当有医生想要在这个APP注册赚钱的时候需要注册提交自己的信息,如下 然后按道理来说会注册成功但是却报After applying the update to the document {_id: 3 , ...}, the (immutable) field \'_id\'

MongoDB中ObjectId的误区,以及引起的一系列问题

近期对两个应用进行改造,在上线过程中出现一系列问题(其中一部分是由于ObjectId误区导致的) 先来了解下ObjectId: TimeStamp 前 4位是一个unix的时间戳,是一个int类别,我们将上面的例子中的objectid的前4位进行提取"4df2dcec",然后再将他们安装十六进制 专为十进制:"1307761900",这个数字就是一个时间戳,为了让效果更佳明显,我们将这个时间戳转换成我们习惯的时间格式(精确到秒) $ date -d '1970-01

MongoDB中空间数据的存储和操作

本文使用官方C# Driver,实现在MongoDB中存储,查询空间数据(矢量) 空间数据的存储 本例中,从一个矢量文件(shapefile格式)中读取矢量要素空间信息以及属性表,并写入到MongoDB中去,其中读取shapefile文件以及将空间信息转成json的功能通过Ogr库实现 //打开MongoDB的Collection MongoDatabase db = server.GetDatabase("aa"); MongoCollection colSheng = db.Get

MongoDB 基础(三)mongodb 中的索引使用

MongoDB中的索引和其他数据库索引类似,也是使用B-Tree结构.MongoDB的索引是在collection级别上的,并且支持在任何列或者集合内的文档的子列中创建索引. 下面是官方给出的一个使用索引查询和排序的一个结构图. 所有的MongoDB集合默认都有一个唯一索引在字段"_id"上,如果应用程序没有为 "_id"列定义一个值,MongoDB将创建一个带有ObjectId值的列.(ObjectId是基于 时间.计算机ID.进程ID.本地进程计数器 生成的)

mongdb中的_id

MongoDB中数据的基本单元称为文档(Document).文档是MongoDB的核心概念,多个键极其关联的值有序的放置在一起便是文档. 在一个特定集合内部,需要唯一的标识文档.因此MongoDB中存储的文档都由一个"_id"键,用于完成此功能.这个键的值可以是任意类型的,默认试ObjectId对象.ObjectId对象的生成思路是本文的主题,也是很多分布式系统可以借鉴的思路. 为了考虑分布式,“_id”要求不同的机器都能用全局唯一的同种方法方便的生成它.因此不能使用自增主键(需要多台

MongoDB中常用的find

接着前一篇文章,下面主要介绍一下MongoDB中常用的find操作. 先打开MongoDB shell,通过下面一组命令插入一些数据. 1 post1 = {"title":"learn MongoDB", "author":"Wilber", "date":new Date(), "score":90} 2 post2 = {"title":"learn