更新日期:2024年09月11日
MOT 索引基于最先进的Masstree 的免锁索引,用于多核系统的快速和可扩展的键值
(KV)存储,通过B+树的Trie 实现。在多核服务器和高并发工作负载上,性能优异。它使
用各种先进的技术,如乐观锁方法、缓存感知和内存预取。
在比较了各种最先进的解决方案之后,我们选择了Masstree 作为索引,因为它显示了
点查询、迭代和修改的最佳总体性能。Masstree 是Trie 和B+树的组合,用以谨慎利用缓存、
预取、
乐观导航和细粒度锁定。
它针对高争用进行了优化,
并对其前代产品增加了许多优化,
如OLFIT。然而,Masstree 索引的缺点是它的内存消耗更高。虽然行数据占用相同的内存大
小,但每个索引(主索引或辅助索引)的每行内存平均高了16 字节——基于磁盘的表使用
基于锁的B 树,大小为29 字节,而MOT 的Masstree 大小为45 字节。
我们的实证研究表明,成熟的免锁Masstree 实现与我们对Silo 的强大改进相结合,恰
能为我们解决这一方面的问题。
另一个挑战是对具有多个索引的表使用乐观插入。
Masstree 索引是用于数据和索引管理的MOT 内存布局的核心。我们的团队增强并显著
改进了Masstree,同时提交了一些关键贡献给Masstree 开源。这些改进包括:
每个索引都有专用内存池:高效分配和快速索引下移
Masstree 全球GC:快速按需内存回收
具有插入键访问的大众树迭代器实现
ARM 架构支持
MOT 的主要创新是增强了原有的Masstree 数据结构和算法,它不支持非唯一索引(作
为二级索引)。设计细节请参见非唯一索引。
MOT 支持主索引、
辅助索引和无键索引
(受不支持的索引DDL 和索引中提到的限制)
。
非唯一索引
一个非唯一索引可以包含多个具有相同键的行。
非唯一索引仅用于通过维护频繁使用的
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
492
数据值的排序来提高查询性能。
例如,
数据库可能使用非唯一索引对来自同一家庭的所有人
员进行分组。但是,Masstree 数据结构实现不允许将多个对象映射到同一个键。我们用于创
建非唯一索引的解决方案(如下图所示)
是为映射行的键添加一个打破对称的后缀。这个添
加的后缀是指向行本身的指针,该行具有8 个字节的常量大小,
并且值对该行是唯一的。当
插入到非唯一索引时,哨兵的插入总是成功的,这使执行事务分配的行能够被使用。这种方
法还使MOT 能够为非唯一索引提供一个快速、可靠、基于顺序的迭代器。
图13- 5 非唯一索引
上图描述了一个MOT 的T 表的结构,它有三个行和两个索引。矩形表示数据行,索引
指向指向行的哨兵(椭圆形)。哨兵用键插入唯一索引,用键+后缀插入非唯一索引。哨兵
可以方便维护操作,无需接触索引数据结构就可替换行。此外,
在哨兵中嵌入了各种标志和
参考计数,以便于乐观插入。
查找非唯一辅助索引时,
会使用所需的键
(如姓氏)
。
全串联键只用于插入和删除操作。
插入和删除操作总是将行作为参数获取,
从而可以创建整个键,
并在执行删除或插入索引的
特定行时使用它。
当要输入或修改长 SQL 语句或一系列语句时,相对于 SQL 编辑器来说,您可能认为系统
编辑器更灵活,对它也更熟悉。从 SQL 菜单选择“使用编辑器”选项以使用系统编辑器。
如果未设置 DBEDIT 环境变量,必须选择要用于会话的文本编辑器。如果选择“使用编辑
器”,
那么 DB-Access 将针对每个会话提示您进行一次接受或覆盖缺省系统编辑器的操作。
DB-Access 显示的缺省编辑器取决于您为操作系统建立的首选项:
l
公共 UNIX™ 系统编辑器是 vi 和 ex。
l
如果您将文本编辑器用作系统缺省程序,那么您必须将 .sql 文件保存为文本。
按 Enter 键以选择在 USE-EDITOR 提示符后指定的缺省编辑器。要使用其他编辑器,输入
该编辑器的名称,然后按 Enter 键。