mongodb阅读笔记
-
G8bao7
2014-01-11 12:59:44
-
NoSQL
-
原创
内存映射存储引擎
将所有数据文件映射到内存,有操作系统负责将数据写入磁盘、调入调出内存页面
特点:
mongodb服务器进程的虚拟大小非常大(会超过整个数据集大小),由操作系统处理哪些数据驻留内存
不能控制数据写入磁盘的顺序,并且不能保证数据的持久性
32位服务器,每个mongod只能处理2G(2^31)数据,因为必须用32位地址访问。64位岂不是会很大?
一个服务器有多少个mongod?
支持功能
聚合:MapReduce、其他聚合工具
索引:都是辅助索引:唯一、复合、地理空间
集合上限: 2G?如何设置?数据分布在不同的数据文件,如何实现?
可以存储大型文件和文件的元数据
存储格式:binary json,即BSON
存储: 客户端驱动将数据(插入文档、查询条件)转换为BSON,然后发往服务器
返回: 服务器将BSON格式的文档返回给客户端,由客户端驱动解码,转为本机文档
用BSON格式目的: 编码解码速度快、存储效率高(比JSON)、提高遍历性能(每个字符串前存储长度,牺牲存储空间)
每个数据库独立的存储方式
命名空间元数据:db.ns
数据文件:db.xxx ,以数字结尾,递增,每个文件的大小加倍递增,最大2G,最小多少?可以配置?
按照集合的命名空间组织,每个集合都有自己的命名空间
每个集合的数据分布在不同(非连续)的数据域
删除的数据域(集合或索引)存放在特殊的命名空间 $freelist中,分配新数据域时先检查freelist
每个文档(行)都有一个系统自动生产的主键_id,保证同一个命名空间下唯一(sharding情况下也唯一,为分布式准备。如果是客户端指定,需要有客户端维护全局唯一)
_id长度是12个字节,格式:4字节(时间戳) + 3字节(主机名散列值) + 2字节(进程ID) + 3字节(自增计数器),保证单机同一秒拥有 (2^9)^3个objectID
集合
可以嵌套多层子集合(命名空间不超上限121(实际使用为100)字节即可),方便管理