mongoDB 深入浅出一 了解mongoDB存储结构
MongoDB 深入浅出
数据逻辑结构
1 mongoDB中的文档(document) 相当于 关系性数据库的一条一条的记录
2 collection 相当于关系性数据库中的表,所以一个collection中有多个document
3 多个集合在逻辑上组成一起 就是database
4 一个mongoDB 和 关系性数据库一样 可以有多个数据库(database)
与关系数据结构比较
MongoDB |
关系性数据库 |
文档(document) |
行(row) |
集合(collection) |
表(table) |
Database |
Database |
数据存储结构
MongoDB 默认的数据目录是data/db,它负责存储所有mongodb的数据文件,在mongoDB中每个数据库都包含一个.ns和一些数据文件,而且这些数据文件会随着数据的增多越来越多,则: 如果系统中有一个叫foo的数据库,那么构成foo这个数据库的文件就会有foo.ns ,foo.0,foo1,foo.2等。
Mongodb内部有预分配空间的机制,每个预分配的文件都用0填充,由于有了这个机制,
mongoDB始终保存额外的空间和空闲的文件,这对系统数据突然暴增时减缓磁盘压力有很大好处.
由于数据量的不断增加,mongoDB每新分配一次,大小都会是上一个文件大小的2倍,最大2G.这种机制保证系统数据较小时 不会浪费太多空间,系统数据较多时 也有相应预留空间。
mongoDB命名空间
每张表都有命名空间,每个索引也有对应的命名空间,这些命令空间的元数据都存在.ns文件中
在下图中,foo数据库包含3个文件存储数据与索引,foo.2文件属于预分配文件,foo.0和foo.1被分配到了相应的盘区对应不同的名字空间。
从上图可以看出,每个命名空间可以包含多个不同的盘区,这些盘区并不是连续的,与数据增长一样,每一个命名空间的盘区大小也随着分配的次数不断增长。在上图有个foo.$freelist命名空间,这个命名空间用于记录不再使用的盘区(如被删除的collection或索引),每当命名空间需要分配新的盘区时,就会检查.$freelist是否有合适大小的空间,这样就可以回收空闲的磁盘空间了。