_id 和 ObjectId

MongoDb存储的文档必须有一个"_id"键。"_id"键的值可以是任何类型,默认为ObjectId对象。

ObjectId    优点:轻量,不同机器都能用全局唯一的同种方法方便地生成它,这是mongo采用ObjectId而非其他比较常规做法(如主键自增)的主要原因。

ObjectId简介

ObjectId存储字节为12字节,每个字节为2个十六进制数字

12字节的生成方式如下:

0|1|2|3-4|5|6-7|8-9|10|11

时间戳   -机器  -PID-计数器

ObjectId字节解释

0,1,2,3字节为秒级时间戳

4,5,6字节为机器名散列值

7,8字节为进程标识符

9,10,11字节为计数器

前9字节保证了同一秒钟不同机器不同进程产生的ObjectId是唯一的。后3字节为自动增加的计数器,确保相同进程同一秒产生的ObjectId也不同。

同一秒钟最多允许每个进程拥有2**24(python方式表示即2的24次方)个不同的ObjectId


专业词汇

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。

你可能感兴趣的:(_id 和 ObjectId)