集合空间(Collection Space)是数据库中存放集合的物理对象。
任何一个集合必须属于且仅属于一个集合空间。
集合空间名最大长度为 127 字节,且需为 UTF-8 编码。
一个数据节点最多可以包含 16384 个集合空间,一个集合空间最多可以包含 4096 个集合。
集合空间由若干固定大小的数据页组成。在创建集合空间时,用户可以指定数据页大小。一旦数据页大小被指定后,将不能被修改。
在一个数据节点中,一个集合空间最多可以访问 128*1024*1024 个数据页。对应不同数据页大小,集合空间在该数据节点的容量上限为:
数据页大小(KB) | 集合空间最大容量(GB) |
---|---|
4 | 512 |
8 | 1024 |
16 | 2048 |
32 | 4096 |
64 | 8192 |
Note:
集合空间的数据页大小由创建集合空间时指定的属性 PageSize 决定。默认情况下,PageSize 的值为 64K。
在集群环境下,每个集合空间拥有除名称外的以下属性:
属性名 | 描述 |
---|---|
数据页大小(PageSize) | 数据页/索引页大小 |
集合空间所属域(Domain) | 所属域 |
Lob 数据页大小(LobPageSize) | Lob 数据页大小 |
Note:
关于集合空间的属性及属性取值可参考 Sdb.createCS()。
数据文件和索引文件组成 SequoiaDB 巨杉数据库的存储单元(SU, Storage Unit)。每一个集合空间在其相关的数据节点中都对应一个数据文件(<集合空间名>.1.data
)和一个索引文件(<集合空间名>.1.idx
)。
数据文件结构如图 1 所示:
数据文件的前 64KB 字节为文件头,其后为 16MB 的 SME 段(Space Management Extend)和 4MB 的 MME 段(Metadata Management Extend),20MB+64K 字节是该数据文件的元数据,元数据之后的空间为实际存储数据的存储空间。SME 段用于标示数据文件中已经被占用和未被占用的数据页,该段每一个比特位(bit)代表数据实际存储空间的一个数据页。
比特位为 0 意味着该数据页空闲,为 1 意味着该数据页已被使用。所以一个数据文件最多能使用 16MB*8,总共 134,217,728 个数据页。
MME 段被切分成 4096 个 1KB 大小的元数据块(MB, Meta Block),每个元数据块分别对应一个存放在该数据文件中的集合,所以一个集合空间最多能存放 4096 个集合。数据文件中,元数据之后的空间是实际数据的存储空间。
图 1 列举了两个集合使用存储空间的情况。集合由一个或者多个数据块通过双向链表连接而成,每个集合在 MME 段的元数据中都包含一个起始数据块和结束数据块的指针。集合在扩展大小过程会从空闲的数据页中使用若干连续的数据页构建新的数据块,然后把该数据块连接到双向链表的末端。在扩展数据块过程中,如果空闲的数据页不够且数据文件还没达到文件大小上限时,数据文件会扩展 128MB 字节的空闲数据页,以确保扩展数据块能够正常进行。
当一个集合被 drop 或者被 truncate 后,该集合所占用的数据块将被释放为空闲空间,供集合空间内的其他集合使用。
索引文件结构如图 2 所示:
与数据文件的结构相比,索引文件存在如下的区别:
索引文件采用 B 树的结构来组织记录的索引,B 树节点中包含着排序后的索引键和每一个索引键对应的记录偏移。一旦获取记录偏移,在使用索引查找数据过程中能够快速在数据文件中定位数据。