暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB-M 设计之全局二级索引

北陌 2023-12-28
128

AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。本文主要讲述AntDB-M(AntDB内存引擎)的全局二级索引相关实现。

引子

索引是数据库常用的一种性能提升技术,通过唯一索引,还可以提供记录唯一性。通常,每张表中包含一个主键索引(Primary Index),主键索引以外的索引,统称为二级索引(Secondary Index)。

在分布式架构下,数据按照一定的规则进行分片,通过分片键计算出数据所在的数据节点。分布式的数据存储与查询,主要面对以下2个问题:

查询时间长:查询时,如果查询条件包含分片键,则可以快速定位到数据节点,否则就需要遍历所有节点。

记录不唯一:单机模式下的唯一索引无法保障记录的唯一性。

这就对分布式数据库的性能和数据的准确性提出了挑战。全局二级索引(Global Secondary Index, GSI)应运而生,能够同时解决了这两大问题。

 

全局二级索引的实现

外观

全局二级索引本身也是一张分布式表,分片键即索引所属表(下文称主表)的索引。全局二级索引也有自己的索引、主键。其主键对应主表的主键,或者不含可空列的唯一索引,用来唯一定位一条主表记录。其普通索引同主表索引。一个主表可以有多个全局二级索引


图1:全局二级索引直观图

全局唯一性

唯一索引是数据库常用的一种索引类型,既能提升查询性能,又能确保记录的唯一性。在分布式环境下,单机的唯一索引就无法保障所有节点的数据唯一性。

例如:表tab1定义如下:以用户编码(uid)、订购日期(odate)、产品编码(pid)为唯一键。自增字段id做为分片键,将数据均匀分布到集群所有数据节点。


图2:分布式表结构

- 单机模式 通过唯一键uk_1可以避免用户在同一时间订购多个产品。分布式模式也基于单机模式的唯一性判断。

- 分布式模式 由于是通过自增字段id来分布数据,相同订单数据,可能分布在不同的数据节点(这里忽略以id为分片键的合理性,业务上很有可能分片键与唯一键不同)。对于唯一键的处理有三种方案。

方案1:不做特殊处理,则会出现插入重复记录的问题,唯一键失效。


图3:没有全局二级索引导致唯一记录重复插入

方案2:遍历所有节点,通过遍历所有节点查询判断是否存在冲突主键,这种方式无疑是效率非常低的。

方案3:增加全局二级索引表,以主表唯一键为分片键,以主表唯一键为唯一索引。根据分片键将相同唯一键的记录定位到相同的数据节点,然后通过该节点的本地唯一键来快速进行唯一性判断,从而高效的实现全局唯一性。


图5:利用全局二级索引确保全局唯一性

数据一致性

由上文可知,全局二级索引是独立于主表的一个表,但是在逻辑上,全局二级索引是主表的一部分。对于OLTP数据库,一定要确保主表所有数据的强一致性,即确保全局索引与主表数据的一致性。这里主表与全局二级索引表由于分区键不同,因此还有可能相同记录数据位于不同节点上。为了确保一致性,这里用到了分布式事务、原子DDL等技术。

分布式事务  

上文我们知道主表、全局二级索引表是两个独立的表,分片键也不相同,意味着一次数据更新可能涉及多个数据节点。这里通过分布式事务来确保不同节点、主表、全局二级索引之间的数据一致性。对于数据更新操作,将普通事务转换为分布式事务(XA协议)。为了减少RPC的调用次数,会将事务开始与数据操作合并到一次RPC中进行处理。如果主表与全局二级索引的记录位于同一节点,则两个表的操作处于同一个节点的本地事务中。

 


图6:分布式事务

 

原子DDL

AntDB数据库对于全局二级索引的创建、修改都拆分为主表索引的创建、修改操作的子操作,对于主表本身以及全局二级索引相关的操作整体上确保原子性。

性能提升

动态并发

由于业务发展,当系统数据不断增多,应用需要在AntDB存储的原表上建立或者调整索引,以加快查询和访问速度。当主表数据量特别大时(比如超过100万行),全局二级索引表的数据变更就是不能忽略的一个重点问题。

AntDB数据库采用了动态并发技术,根据所操作表的记录数自动进行并行处理。为了每个并行的数据局部性,采取了批量分配技术。还可以根据自己业务量对参数进行适当调整以达到最优性能。

索引覆盖

AntDB数据库的全局二级索引采取了索引覆盖技术,进一步提升数据库查询性能。在全局二级索引表满足查询列时,不需要再回主表查询索引覆盖;还能解决主表文件存储在不同节点的问题,避免了跨节点访问可能带来的性能下降。

总结

通过全局二级索引,AntDB数据库避免了因为分区键与索引列不一致引起的分区扫描问题,保证分布式集群节点的线性可扩展性。 通过分布式事务、单机事务、原子DDL等技术确保数据的一致性。通过索引覆盖、动态并发等技术提升了查询性能。可灵活调整的全局二级索引,使业务系统的调整更为简单灵活。


关于亚信安慧AntDB数据库
AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论