MongDb存储的文档必须有一个"_id"键(主键)文档的唯一标识
- 插入文档不存在该键时 会自动创建 可以服务器来做 但通常交由客户端驱动程序完成 原因如下:
- 虽ObjectId易生成 但是生成则会产生开销
- MongDb的设计理念是 能从服务器端转移到驱动的 就尽量转移 因为可扩展式数据库 扩展应用层要比扩展数据库容易的多 将事务交由客户端来处理 就减轻了数据库扩展的负担
类型
ObjectId
- 轻量型 不同机器可用全局唯一的同种方法生成 MongDb设计上就是做分布式数据库 处理多个节点是核心要求 所以采用ObjectId 替代常规自增主键这种(需要多个服务器 同步自动增加主键) 要更加省时省力
- 存储空间--12字节:每个字节是两位十六进制数字 所以是一个24位的字符串(ObjectId表示的大小 其实是实际可存储数据的两倍长 所以每次创建其实只有几位数字的变化)
- 创建方式--12字节创建方式如下
- 时间戳
- 标准纪元开始 单位--秒 4个字节 与随后5个字节结合 确认秒级别唯一性
- "大致"有序 因为时间戳在前 所以ObjectId大致会按照插入顺序排列 (基于这点 设为索引可提高效率) 【注】不是百分百有序
- 机器
- 主机唯一标识符 3个字节 一般是主机名的散列值 【保证不同机器ObjectId唯一】
- PId
- 进程标识符 2个字节 【保证同台机器不同进程ObjectId唯一】
- 计数器
- 自动增加计数器 3个字节 【保证同台机器、同一进程、同一秒产生的ObjectId唯一】 同一秒最多容许同一进程拥有256^3(16 777 216)个不同的ObjectId
posted @
2023-02-28 10:17
C余L小R鱼
阅读(
58)
评论()
编辑
收藏
举报