MongoDB术语(持续更新)

MongoDB作为目前排名最高的非关系型数据库(目前排名第四),作为排名第一的文档型数据库,涉及到了一些原来没有的概念和术语,为了深入了解MongoDB,需要逐步了解清楚这些概念和术语。

ObjectId

作为文档型数据库,MongoDB数据库的每个文档必须有一个"_id"字段,这个字段拥有唯一值,并且自动生成,是主键。这个唯一的值就是ObjectId。

ObjectId是12个字节的BSON类型,构成如下:

ObjectId的组成
01234567891011
时间戳机器标识符进程ID计数器
54f92930b82f199305541bcf
54f92930b82f199305541bcf
  • 时间戳:前4个字节,生成ObjectId时的时间戳(秒级);
  • 机器标识符:再三个字节,MongoDB所在主机的标识符,一般为主机名称的hash值,这样不同的主机就有不同的标识符,同一台主机上的不同MongoDB实例生成的ObjectId机器标识符是一样的,但是在多主机的分布式环境中,机器标识符来保障ObjectId的不冲突。
  • 进程ID:再两个字节,PID,机器标识符确保在分布式环境中不同的主机上生成的ObjectId不冲突,而进程ID来确保在同一台主机上,多个MongoDB进程生成的ObjectId不冲突。
  • 计数器:再三个字节,前面的九个字节确保了在不同机器不同的MongoDB进程在一个时间戳(1秒)生成的ObjectId不冲突,最后这三个字节来确保在一个时间戳内(1秒内)生成的ObjectId不冲突。

ObjectId的组成完美的解决了分布式环境下高并发情况下的主键唯一性的问题。在类似的应用场景中,可以学习借鉴。

ObjectId示例:

> mongo

MongoDB shell version: 3.0.0
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user

> use TonySharpMongoDB

switched to db TonySharpMongoDB

> db.TonySharpCollection.insert({Name:"Tony",Key:"MongoDB3.0"})

WriteResult({ "nInserted" : 1 })
> db.TonySharpCollection.find()
{ "_id" : ObjectId("54f92930b82f199305541bcf"), "Name" : "Tony", "Key" : "MongoDB3.0" }

BSON Type

BSON = Binary JSON,类似于JSON的一种二级制存储格式,类JSON,支持内嵌的文档对象和数组对象,和JSON不一样的是,扩展增加了一些数据类型,比如Date和BinData类型。

BSON的初始设计基于下面三点的特性:1、轻量性;2、可遍历性;3、高效性;基于以上特点MongoDB选择了BSON作为数据存储和数据交换的格式。

转载于:https://www.cnblogs.com/TonySharp/p/4317887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值