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 group分组
- mongodb基本数据类型
- mongodb连接池
- mongodb python教程(python使用pymongo操作mongo的完整步骤)
- mongodb可视化工具
- mongodb distinct去重
- mongodb insert操作
- mongodb简单介绍和安装
- mongodb用户权限
- MongoDB聚合函数
- mongodb eval 执行服务器端脚本
- mongodb查询
- mongodb中mapreduce实例
- python mongodb 基本操作(Python使用pymongo库操作MongoDB数据库的方法实例)
- mongodb容器化部署映射端口访问(Docker 部署 MongoDB容器的方法)
- docker怎么装mongodb(Docker 搭建集群MongoDB的实现步骤)
- 张勇 阿里新任掌门人(阿里新任掌门人)
- 毛戈平全国第一柜花落银泰 高端国货迎来 高光 时刻(毛戈平全国第一柜花落银泰)
- 14岁丧父 20岁丧母,从苦难走向辉煌的银泰创始人沈国军(14岁丧父20岁丧母从苦难走向辉煌的银泰创始人沈国军)
- 银泰集团董事长沈国军获评 北京影响力 十大企业家(银泰集团董事长沈国军获评)
- 15帅气男士发型,清爽时尚很有型,喜欢就试试(清爽时尚很有型)
- 哪几个历史人物被影协主席李雪健演的活灵活现(哪几个历史人物被影协主席李雪健演的活灵活现)
热门推荐
- bootstraptable使用教程(bootstrap Table的使用方法总结)
- SQL Server批处理注意的事项
- javascript弹出菜单(Javascript实现简易导航栏)
- sqlserver查询信息表(SQL Server中Table字典数据的查询SQL示例代码)
- sql数据分页如何查询(SQL分页查询方式汇总)
- js Date对象
- sql取整数函数(SQL中位数函数实例)
- mysql慢日志查询会输出插入语句吗(MySQL三种日志有啥用?如何提高MySQL并发度?)
- apache和yii域名配置(Yii 框架控制器创建使用及控制器响应操作示例)
- python多进程与多线程详解(Python线程之定位与销毁的实现)