mongodb阅读笔记


内存映射存储引擎
    将所有数据文件映射到内存,有操作系统负责将数据写入磁盘、调入调出内存页面
    特点:
        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)字节即可),方便管理


 
请使用浏览器的分享功能分享到微信等