文档章节

Mongo之ObjectId原理(学习笔记)

ND小龙
 ND小龙
发布于 2017/08/14 00:40
字数 703
阅读 17
收藏 0
点赞 0
评论 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
nosql mongodb 数据库 笔记

1、安装好mongodb后,设置数据库存储位置时候,路径不能有空格,否则不能成功。设置数据库存储地址:mongod --dpath=d:mongodb 2、输入mongo命令打开shell,其实这个shell就是mongodb的客户端...

AIting
2016/11/27
28
0
MongoDB 集群(二)

MongoDB 主从 主mongodb.config配置 dbpath=/usr/data/mongodb/master/master/data/db logpath=/usr/data/mongodb/master/master/log/mongodb.log logappend=true fork=true bind_ip=192.16......

lyg945
2016/11/21
23
0
yunnet/MongoDBDrivers

MongoDB Driver for Delphi/FreePascal 本人在原有地址上,有加修改,增加了条件语句 原始地址: https://github.com/fabriciocolombo/mongo4delphi A mongodb driver for Delphi/FreePascal......

yunnet
2014/06/06
0
0
mongodb ,update方法无效,请教高手!

我的数据里有 { "id" : ObjectId("509b645910ade1be6c000012"), "name" : "aaa", "age" : "21" } { "id" : ObjectId("509b645910ade1be6c000013"), "name" : "bbb", "age" : "20" } { "id" :......

zhangyuting
2012/11/08
881
1
征服 Mongodb 之 《MongoDB权威指南》读书笔记(一)

手里有本《MongoDB权威指南》,打算做个读书笔记,把常规命令、数据类型过一遍,强迫记忆。 相关文章: 征服 Mongodb 之 安装与主从配置 关于如何安装、配置、启动MongoDB等,参考上篇文章。...

quanpower
2013/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

upstream sent too big header while reading...

nginx 报错:1736 upstream sent too big header while reading response header from upstream 1. 一般处理 location ~ \.php$ { #增加下面两句 fastcgi_buffer_size 128k; ......

dubox
13分钟前
0
0
Python解析配置文件模块:ConfigPhaser

import configparser as pa# [SectionA]# a = aa# b = bb# c = cc# [SectionB]# optionint = 1# optionfloat = 1.1# optionstring = string#https://www.cnblogs.com/a......

易野
20分钟前
0
0
Java基础——面向对象

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Object的方法: clone() Object 克隆 to Strin...

凯哥学堂
22分钟前
0
0
rabbitmq学习记录(八)消息发布确认机制

RabbitMQ服务器崩了导致的消息数据丢失,已经持久化的消息数据我们可以通过消息持久化来预防。但是,如果消息从生产者发送到vhosts过程中出现了问题,持久化消息数据的方案就无效了。 Rabbit...

人觉非常君
26分钟前
0
0
毕业5年,我是怎么成为年薪30W的运维工程师

#转载# 我在大学读的是计算机专业,但大学毕业之后,进入到一家私企进行工作,工作的内容类似于网管,会经常的去修电脑,去做水晶头等内容。刚开始工作,也没想太多,最想的是丰富自己的工作...

Py爱好
33分钟前
1
0
大数据基础知识,大数据学习,涉及的知识点

一、什么是大数据 一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流 转、多样的数据类型和价值密度低四大特征。...

董黎明
48分钟前
0
0
Linux CentOS 7上安装极点五笔

话说几天前在新买的惠普笔记本上成功地安装了Linux CentOS 7操作系统、Nvidia Quandro P600驱动程序及X Window,并在VMware下安装Red Hat教学环境,彻底跳出Windows的苦海,但仍然有一件事不...

大别阿郎
今天
17
0
2018年7月20日集群课程

一、集群介绍 集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。 ...

人在艹木中
今天
0
0
spark开发机中调试snappy

目的 在Idea中的点击运行,使spark可以直接读取snappy 自己编译hadoop,以支持snappy的压缩。 自己编译的目的就是要得到支持snappy文件读写的动态链接库。如果可以在网上下载,可以跳过自行编...

benny周
今天
0
0
centos7 安装docker

1,查看系统版本 cat /etc/redhat-release 2,安装gcc yum -y install gccyum -y install gcc-c++ 3,卸载旧版本 yum remove docker \ docker-client \ ......

暗中观察
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部