mongodb objectid类型
类别:数据库 浏览量:1178
时间:2013-8-24 mongodb objectid类型
mongodb objectid类型
mongodb的objectid类型是一个24位的自动生成的字符串,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,mongodb从开始设计就被定义为分布式数据库。
当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key
例如:
> db.t_test.insert({"name":"cyz"}) > db.t_test.findOne({"name":"cyz"}) { "_id" : ObjectId("4df2dcec2cdcd20936a8b817"), "name" : "cyz" }
可以发现这里多出一个Objectid类型的_id,当然了,这个_id是系统默认生成的,你也可以为其指定一个值,不过在同一collections中该值必须是唯一的
其中objectid类型的24位字符串的组成方式如下:
前4位是一个unix的时间戳,是一个int类别,我们将上面的例子中的objectid的前4位进行提取“4df2dcec”,然后再将他们安装十六进制专为十进制:“1307761900”,这个数字就是一个时间戳,为了让效果更佳明显,我们将这个时间戳转换成我们习惯的时间格式
2011年 06月 11日 星期六 03:11:40 UTC
接下来的三个字节,就是 2cdcd2 ,这三个字节是所在主机的唯一标识符,一般是机器主机名的散列值,这样就确保了不同主机生成不同的机器hash值,确保在分布式中不造成冲突,这也就是在同一台机器生成的objectid中间的字符串都是一模一样的原因。
pid
上面的Machine是为了确保在不同机器产生的objectid不冲突,而pid就是为了在同一台机器不同的mongodb进程产生了objectid不冲突,接下来的0936两位就是产生objectid的进程标识符。
increment
前面的九个字节是保证了一秒内不同机器不同进程生成objectid不冲突,这后面的三个字节a8b817,是一个自动增加的计数器,用来确保在同一秒内产生的objectid也不会发现冲突,允许256的3次方等于16777216条记录的唯一性。
mongodb产生objectid还有一个更大的优势,就是mongodb可以通过自身的服务来产生objectid,也可以通过客户端的驱动程序来产生,如果你仔细看文档你会感叹,mongodb的设计无处不在的使
用空间换时间的思想,比较objectid是轻量级,但服务端产生也必须开销时间,所以能从服务器转移到客户端驱动程序完成的就尽量的转移,必须将事务扔给客户端来完成,减低服务端的开销,另还有一点原因就是扩展应用层比扩展数据库层要变量得多。
mongodb的ObejctId生产思想在很多方面挺值得我们借鉴的,特别是在大型分布式的开发,如何构建轻量级的生产,如何将生产的负载进行转移,如何以空间换取时间提高生产的最大优化等等。
您可能感兴趣
- mongodb查询
- MongoDB的MapReduce的用法
- java连接mongodb(Docker连接mongodb实现过程及代码案例)
- MongoDB命令与SQL语法对比
- mongodb备份和还原
- docker中的mongodb(Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解)
- mongodb容器化部署映射端口访问(Docker 部署 MongoDB容器的方法)
- mongodb可视化工具
- Mongodb数据导入导出
- MongoDB中的索引的操作
- mongodb基本数据类型
- mongodb常用命令的语法
- mongodb eval 执行服务器端脚本
- mongodb distinct去重
- 什么是mongodb 固定集合
- mongodb group分组
- 人从众 火炎焱 全椒再现 正月十六走太平 的魅力(人从众火炎焱全椒再现)
- 官宣 全椒籍明星许海峰 奚秀兰 方芳 王璐瑶携手回家 走太平(全椒籍明星许海峰)
- 以前全椒人是怎么过冬的 满满都是回忆(以前全椒人是怎么过冬的)
- NVIDIA显卡份额冲上88 A饭发愁 游戏优化恐没A卡份了(NVIDIA显卡份额冲上88A饭发愁)
- AMD YES A卡还是N卡 A卡和N卡的区别(AMDYESA卡还是N卡)
- 以后显卡多了一个新选择,N卡和A卡外又多了个I卡(以后显卡多了一个新选择)
热门推荐
- python爬取百度搜索pdf文档(Python实现的爬取百度文库功能示例)
- python将网站图片本地存储(详解Python下载图片并保存本地的两种方式)
- html5自动轮播图代码(HTML5播放实现rtmp流直播)
- 哪里有免费的云服务器价格实惠(安全的美国云服务器哪里比较便宜?)
- iis服务器安装错误(IIS7.0配置过程中出现HTTP 错误 403.14的解决方法)
- python 二维数组怎么取第二列(python实现二维数组的对角线遍历)
- python自动识别旋转验证码(Python实现字符型图片验证码识别完整过程详解)
- nginxrewrite有什么功能(Nginx Rewrite使用场景及代码案例详解)
- iframe跨域原理(详解使用postMessage解决iframe跨域通信问题)
- vue图片组件使用方法(Vue图片裁剪组件实例代码)