文档章节

Mongo之ObjectId原理(学习笔记)

ND小龙
 ND小龙
发布于 2017/08/14 00:40
字数 703
阅读 22
收藏 0

ObjectId

    ObjectId 是"_id" 的默认类型。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。这时MongoDB 采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因。

    MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。最重要的是ObjectId 类型在分片环境中容易生成。

    ObjectId 使用12 字节的存储空间,每个字节两位十六进制数字,是一个24 位的字符串。

    

    前4 个字节是从标准纪元开始的时间戳,单位为秒。这会带来一些有用的属性。时间戳,与随后的. 5 个字节组合起来,提供了秒级别的唯一性。

    这4 个字节也隐含了文档创建的时间。绝大多数驱动都会公开一个方法从ObjectId 获取这个信息。

    接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。这样就可以确保不同主机生成不同的ObjectId,不产生冲突。

 

    前9 字节保证了同一秒钟不同机器不同进程产生的ObjectId 是唯一的。后3 字节就是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId 也是不一样的。同一秒钟最多允许每个进程拥有2563(16 777 216)个不同的ObjectId。

 

_id

    实际开发中,MongoDB 中存储的文档的 _id,这个键的值可以是任何类型。每个文档都有唯一的"_id" 值,来确保集合里面每个文档都能被唯一标识。   如果插入文档的时候没有"_id" 键,系统会自动帮创建一个,且默认是个ObjectId 对象。

 

    虽然ObjectId 设计成轻量型的,易于生成,但是毕竟生成的时候还是产生开销。在客户端生成体现了MongoDB 的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。这种理念背后的原因是,即便是像MongoDB 这样的可扩展数据库,扩展应用层也要比扩展数据库层容易得多。将事务交由客户端来处理,就减轻了数据库扩展的负担。

    在客户端生成ObjectId,驱动程序能够提供更加丰富的API。例如,驱动程序可以有自己的insert 方法,可以返回生成的ObjectId,也可以直接将其插入文档。如果驱动程序允许服务器生成ObjectId,那么将需要单独的查询,以确定插入的文档中的"_id" 值。

本文转载自:http://book.51cto.com/art/201112/307016.htm

共有 人打赏支持
ND小龙
粉丝 10
博文 45
码字总数 2295
作品 0
福州
MongoDB学习笔记-- 插入、查找(三)

创建一个集合并向该集合中添加文档 当我们向某集合中插入文档时,如果该集合不存在,mongodb会自动创建该集合,不需手动创建集合,同时也不需要指定文档的结构。 创建并插入文档 j = {name:...

无名99268
2013/10/15
0
0
初识MongoDB-用法和用途

用意:记录一下自己学习MongoDB的一些体会. 适合范围, 安装和用法. 一. MongoDB相关 JavaScript统一天下 JavaScript正在快节奏地统一整个web开发流程. JvaScript是WEB前端开发的唯一依靠, 依赖...

清风漫步
2014/02/21
0
0
The little mongoDB book测试数据及笔记

./mongod ./mongo show dbs 或show databases use learn show collections 或show tables P5 db.system.indexes.find() db.unicorns.insert({name: 'Leto', gender: 'm', home: 'Arrakeen', ......

cyper
2014/05/19
0
1
基于Mongodb分布式存储物理文件

在之前的文章中介绍了如何对关系型数据数据通过auto-sharding进行分布式数据存储,今天介绍如何对物理文件(小文件,基本小于100K)进行分布式存储。 接着看一下要配置的测试环境(与前一篇中...

长平狐
2012/11/06
119
0
Ubuntu安装MongoDB以及CRUD

看这里:http://my.oschina.net/sunhaojava/blog/208408 以下是从MongoDB in Action摘录的. http://www.mongodb.org/downloads 找到最新版本的下载路径 使用工具或curl下载(绿色,解压即可使...

cyper
2014/05/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

活动招募 HUAWEI HiAI公开课·北京站-如何在4小时把你的APP变身AI应用

人工智能和机器学习是全球关注的新趋势,也是当前最火爆、最流行的话题。当你拿手机用语音助手帮你点外卖,智能推荐帮你把周边美食一网打尽;当你拿起P20拍照时,它将自动识别场景进行最美优...

华为终端开放实验室
11分钟前
0
0
匹配两位小数,js正则

var regex = /^\d*(\.[1-9]|\.\d[1-9])*$/ console.log(1.2,regex.test(1.2)); console.log(0.3,regex.test(0.3)); console.log(1.03,regex.test(1.03)); ......

微信小程序-暗潮
16分钟前
0
0
905. Sort Array By Parity - LeetCode

Question 905. Sort Array By Parity Solution 题目大意:数组排序,偶数放前,奇数在后,偶数的数之间不用管顺序,奇数的数之间也不用管顺序 思路:建两个list,一个放偶数,一个放奇数,最...

yysue
21分钟前
0
0
h5 禁止手机自带键盘弹出

html: <div style="width: 350px;margin:50px auto;"><input type="text" id="datePicker" class="date_picker form-control" placeholder="点击选择入住日期" /></div> js: $("#date......

Delete90
38分钟前
1
0
color透明度对照表

透明度百分比 数值 100% 不透明 FF 95% F2 90% E6 85% D9 80% CC 75% BF 70% B3 65% A6 60% 99 55% 8C 50% 80 45% 73 40% 66 35% 59 30% 4D 25% 40 20% 33 15% 26 10% 1A 5% 0D 0% 完全透明 ......

_无问西东
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部