MongoDB的数据结构非常松散,是类似json的bjson格式,同时支持对数据建立索引。是一个面向集合的,模式自由的文档型数据库。
1.面向集合
意思是数据被分组存储在数据集合中,被称为一个集合
2.模式自由
意味着对于存储在MongoDB 数据库中的文件,我们不需要知道它的任何结构定义。提了这 么多次"无模式"或"模式自由",它到是个什么概念呢?例如,下面两个记录可以存在于同一 个集合里面:
{"welcome" : "Beijing"} {"age" : 25}
特点:
面向集合存储,易于存储对象类型的数据
体系结构:
MongoDB 中一系列物理文件(数据文件,日志文件等)
MongoDB 的文档(document),相当于关系数据库中的一行记录。
多个文档组成一个集合(collection),相当于关系数据库的表。
多个集合(collection),逻辑上组织在一起,就是数据库(database)
数据存储结构:
在MongoDB 内部,每个数据库都包含一个.ns 文件和一些数据文件,而且这些数据文件会随着数据量的 增加而变得越来越多。所以如果系统中有一个叫做 foo的数据库,那么构成foo这个数据库 的文件就会由foo.ns,foo.0,foo.1,foo.2 等等组成
MongoDB 内部有预分配空间的机制,每个预分配的文件都用 0 进行填充,由于有了这个机制, MongoDB始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。
由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的2 倍,每个数据文件最大 2G。这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同 时又能保证较大的数据库有相应的预留空间使用。
数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数 据都集中在*.ns文件中。
需要注意的命名空间:$freelist,这个命名空间用于记录不再使用 的盘区(被删除的 Collection 或索引)。每当命名空间需要分配新的盘区的时候,都会先查 看$freelist是否有大小合适的盘区可以使用,这样就回收空闲的磁盘空间。