首页 > 其他分享 >openGauss MOT索引

openGauss MOT索引

时间:2024-04-29 14:26:19浏览次数:13  
标签:插入 MOT Masstree 索引 磁盘 openGauss 唯一

MOT索引

MOT索引基于最先进的Masstree[对比:磁盘与MOT]的免锁索引,用于多核系统的快速和可扩展的键值(KV)存储,通过B+树的Trie实现。在多核服务器和高并发工作负载上,性能优异。它使用各种先进的技术,如乐观锁方法、缓存感知和内存预取。

在比较了各种最先进的解决方案(如[对比:磁盘与MOT][对比:磁盘与MOT])之后,我们选择了Masstree[对比:磁盘与MOT]作为索引,因为它显示了点查询、迭代和修改的最佳总体性能。Masstree是Trie和B+树的组合,用以谨慎利用缓存、预取、乐观导航和细粒度锁定。它针对高争用进行了优化,并对其前代产品增加了许多优化,如OLFIT[对比:磁盘与MOT]。然而,Masstree索引的缺点是它的内存消耗更高。虽然行数据占用相同的内存大小,但每个索引(主索引或辅助索引)的每行内存平均高了16字节——基于磁盘的表使用基于锁的B树,大小为29字节,而MOT的Masstree大小为45字节。

我们的实证研究表明,成熟的免锁Masstree[对比:磁盘与MOT]实现与我们对Silo[对比:磁盘与MOT]的强大改进相结合,恰能为我们解决这一方面的问题。

另一个挑战是对具有多个索引的表使用乐观插入。

Masstree索引是用于数据和索引管理的MOT内存布局的核心。我们的团队增强并显著改进了Masstree,同时提交了一些关键贡献给Masstree开源。这些改进包括:

  • 每个索引都有专用内存池:高效分配和快速索引下移
  • Masstree全球GC:快速按需内存回收
  • 具有插入键访问的大众树迭代器实现
  • ARM架构支持

我们为Masstree开放源码实现贡献了我们的Masstree索引改进,可以https://github.com/kohler/masstree-beta找到。

MOT的主要创新是增强了原有的Masstree数据结构和算法,它不支持非唯一索引(作为二级索引)。设计细节请参见非唯一索引

MOT支持主索引、辅助索引和无键索引(受不支持的索引DDL和索引中提到的限制)。

非唯一索引

一个非唯一索引可以包含多个具有相同键的行。非唯一索引仅用于通过维护频繁使用的数据值的排序来提高查询性能。例如,数据库可能使用非唯一索引对来自同一家庭的所有人员进行分组。但是,Masstree[对比:磁盘与MOT]数据结构实现不允许将多个对象映射到同一个键。我们用于创建非唯一索引的解决方案(如下图所示)是为映射行的键添加一个打破对称的后缀。这个添加的后缀是指向行本身的指针,该行具有8个字节的常量大小,并且值对该行是唯一的。当插入到非唯一索引时,哨兵的插入总是成功的,这使执行事务分配的行能够被使用。这种方法还使MOT能够为非唯一索引提供一个快速、可靠、基于顺序的迭代器。

图 1 非唯一索引

上图描述了一个MOT的T表的结构,它有三个行和两个索引。矩形表示数据行,索引指向指向行的哨兵(椭圆形)。哨兵用键插入唯一索引,用键+后缀插入非唯一索引。哨兵可以方便维护操作,无需接触索引数据结构就可替换行。此外,在哨兵中嵌入了各种标志和参考计数,以便于乐观插入。

查找非唯一辅助索引时,会使用所需的键(如姓氏)。全串联键只用于插入和删除操作。插入和删除操作总是将行作为参数获取,从而可以创建整个键,并在执行删除或插入索引的特定行时使用它。

详情查看:https://opengauss.org

详情查看:https://docs-opengauss.osinfra.cn

标签:插入,MOT,Masstree,索引,磁盘,openGauss,唯一
From: https://www.cnblogs.com/renxyz/p/18165545

相关文章

  • openGauss MOT特性及价值
    MOT特性及价值MOT在高性能(查询和事务延迟)、高可扩展性(吞吐量和并发量)甚至在某些情况下成本(高资源利用率)这些方面拥有显著优势。低延迟(LowLatency):提供快速的查询和事务响应时间。高吞吐量(HighThroughput):支持峰值和持续高用户并发。高资源利用率(HighResourceUtilization):充......
  • openGauss MOT统计
    MOT统计统计信息主要用于性能分析或调试。在生产环境中,通常不打开它们(默认是关闭的)。统计信息主要由数据库开发人员使用,数据库用户较少使用。对性能有一定影响,特别是对服务器。对用户的影响可以忽略不计。统计信息保存在数据库服务器日志中。该日志位于data文件夹中,命名为postg......
  • openGauss MOT使用
    MOT使用使用MOT非常简单,以下几个小节将会进行描述。openGauss允许应用程序使用MOT和基于标准磁盘的表。MOT适用于最活跃、高竞争和对吞吐量敏感的应用程序表,也可用于所有应用程序的表。以下命令介绍如何创建MOT,以及如何将现有的基于磁盘的表转换为MOT,以加速应用程序的数据库相......
  • openGauss MOT使用概述
    MOT使用概述MOT作为openGauss的一部分自动部署。有关如何计算和规划所需的内存和存储资源以维持工作负载的说明,请参阅MOT准备。参考MOT部署了解MOT中所有的配置,以及服务器优化的非必须选项。使用MOT的方法非常简单。MOT命令的语法与基于磁盘的表的语法相同,并支持大多数标准,如Pos......
  • openGauss MOT数据采集速度
    MOT数据采集速度该测试模拟海量物联网、云端或移动端接入的实时数据流,快速持续地把海量数据注入到数据库。本次测试涉及大量数据采集,具体如下:1000万行数据由500个线程发送,2000轮,每个insert命令有10条记录(行),每条记录占200字节。客户端和数据库位于不同的机器上。数据库服......
  • openGauss MOT配置
    MOT配置预置MOT用于创建工作MOT。为了获得最佳效果,建议根据应用程序的特定要求和偏好自定义MOT配置(在mot.conf文件中定义)。该文件在服务器启动时只读。如果在系统运行中编辑此文件,则必须重新加载服务器才能使修改内容生效。mot.conf文件与postgres.conf配置文件在同一文件夹下......
  • openGauss MOT日志记录-WAL重做日志概念
    MOT日志记录:WAL重做日志概念概述预写日志记录(WAL)是确保数据持久性的标准方法。WAL的主要概念是,数据文件(表和索引所在的位置)的更改只有在记录这些更改之后才会写入,即只有在描述这些更改的日志记录被刷新到永久存储之后才会写入。MOT全面集成openGauss的封装日志记录设施。除持久......
  • openGauss MOT内存管理
    MOT内存管理规划和微调请参见MOT内存和存储规划和MOT配置。详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss MOT内存和存储规划
    MOT内存和存储规划本节描述了为满足特定应用程序需求,在评估、估计和规划内存和存储容量数量时,需要注意的事项和准则,以及影响所需内存数量的各种数据,例如计划表的数据和索引大小、维持事务管理的内存以及数据增长的速度。MOT内存规划MOT是一种内存数据库存储引擎(IMDB),其中所有表......
  • openGauss 查询原生编译
    查询原生编译MOT的另一个特性是,在预编译的完整查询需要执行之前,能够以原生格式(使用PREPARE语句)准备并解析这些查询。这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好地性能。这种分工避免......