4.3.3 内存表的存储
Table类包含管理数据库中内存表所需的所有项。表由以下组件组成:列、主索引和可选的二级索引。关键成员变量说明如表436 Table类的关键成员变量所示。
4.4.4 索引
MOT使用索引来高效地访问数据。MOT索引支持范围查询等所有基本操作。由于数据存储在Row类中,每个MOT索引都按顺序使用哨兵来访问数据。
IndexFactory类提供了创建新索引对象的能力。
作为Table类的一部分,Index抽象类提供了创建和访问数据索引的能力。索引是否满足唯一性决定了该索引是否允许插入重复键。如图4-54所示,描述了一个有三行和两个索引的MOT表T的结构,其中一个索引是非唯一索引,另一个索引是唯一索引。对于非唯一索引而言,MOT内部通过在插入时用唯一标识符填充每个键的方式将键视为唯一。在图4-54中,MOT将哨兵插入到带有键的唯一索引和带有键+后缀的非唯一索引中。使用哨兵方便了维护操作,因为在进行维护操作时,可以在不接触索引数据结构的情况下替换行。
Sentinel类包含指向唯一索引情况下的行数据或非唯一索引情况下主哨兵的指针,还包含一些标志位和引用计数等支持跨事务并发的信息。每次向索引插入新键时都会创建哨兵。例如,对于具有3个索引的表,插入新键时将创建3个哨兵,每个索引对应一个哨兵。哨兵和行之间的关系如图0所示。
MasstreePrimaryIndex类实现了索引接口。它基于Masstree K/V存储实现,同时封装了MOT内存分配池,根据对象分配任意大小内存。
IndexIterator抽象类提供了创建迭代器并根据提供的迭代器访问数据的能力。