暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB(NoSQL)知识点讲解及12字节ObjectId都由什么组成,为何保证唯一(一)

1136

  现在很多公司都会在使用MySQL、Oracle数据库的同时,采用MongoDB存储复杂表单数据,首先介绍一下什么是MongoDB:

  MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。

(1)MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

(2)MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。

(3)MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。


MongoDB的一些知识点:

  1.  MongoDB不但区分数据类型,也区分大小写,不像数据库不区分大小写

  2. MongoDB的文档不能有重复的键

  3. MongoDB数据库名:不能是空字符串,不得含有空格、. 、$、/、\等等,数据库名应该全部小写,最多为64位字符串

  4. MongoDB一般作为网络服务器来运行,客户端可以连接到该服务器并执行操作,要启动该服务器,需运行mongod可执行文件

  5. 在没有参数的情况下,使用默认数据目录/data/db,并使用27017端口,mongod还会启动一个非常基本的HTTP服务器,监听数字比主端口号高1000的端口号,28017,可访问,http://localhost:28017来获取数据库的管理信息

  6. CRUD:db.集合名.insert、db.集合名.find、db.集合名.update、db.集合名.remove(这里只是简单介绍,后续文章会进行详细介绍)

  7. MongoDB存储的文档中,必须有一个”_id“键作为唯一标识



ObjectId构成

  1. ObjectId是”_id“的默认类型,ObjectId使用12字节的存储空间,每个字节两位十六进制数,ObjectId是一个12字节的BSON类型数据,前四个字节表示时间戳+3字节机器码+2字节进程号+3字节随机数(自动增加的计数器)

  2. 时间戳,与随后的五个字节组合起来,提供秒级别的唯一性,但是不保证ObjectId会按照插入的顺序排列

  3. 时间戳前九个字节保证了同一秒钟不同进程不同机器产生的ObjectId是唯一的,后三个字节确保相同进程同一秒产生的ObjectId也是不一样的,同一秒最多允许256的三次幂个不同的ObjectId

  4. 机器码是所在主机的唯一标识符,通常是机器主机名的散列值,确保不同主机生成不同的ObjectId

  5. 进程标识符(PID)确保同一台机器上并发的多个进程产生的ObjectId是唯一的

文章转载自琢磨先生DataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论