B.4 命名空间与区段
在数据文件中,数据库被按照命名空间(namespace)进行组织,每个命名空间中存放有特定集合的数据。集合中的文档和索引都拥有自己的命名空间。命名空间的元信息(metadata)存放在数据库的.ns文件中。
每个命名空间中的数据在磁盘上会被分为几组数据文件,即区段(extent)。图B-1中名为foo的数据库有三个数据文件,其中第三个是预分配的空文件。而前两个数据文件,则分成了分属于不同命名空间的区段。
图B-1 命名空间与区段
图B-1中显示了几点有关命名空间和区段的有趣内容。每个命名空间可拥有几个不同的区段,这几个区段在磁盘上不见得一定是连续的。就像数据库的数据文件一样,为命名空间新分配的区段,其大小也会不断增长。命名空间会浪费一定的空间,又要尽量保证其在磁盘上占有一个连续的区域,这样做是为了在二者之间取得平衡。图中还出现了一个特殊的命名空间$freelist
,用于跟踪记录不再使用的区段(如被删除的集合或索引所使用的区段)。命名空间在分配一个新区段时,会先搜索空闲列表,查看是否存在合适大小的区段。