论亚马逊 QLDB 与腾讯 TDSQL 架构与功能
QLDB 之于 Amazon 数据库生态
Andy Jassy 展示了 Amazon 的 database freedom,如图 3-1(引用自 ref[1]),Amazon 提供诸多数据解决方案,涵盖关系型、K-V、内存等存储,并包含图、时序、账本等特型数据库,QLDB 即特型数据库之一。
QLDB 作为 Amazon 整个数据库服务生态的一个成员,与 RDS、DynamoDB、ElasticCache 等产品彼此独立但紧密合作,互相补充共同构成 database freedom。
QLDB 如何与其他产品协作,还需等 Amazon 开放更多资料。
TDSQL 全时态数据库的 HTAC 架构
图 3-2 展示了 TDSQL 全时态数据库的 HTAC 架构,HTAC 基于 master-slave 架构,此架构下全态数据管理方式为:
● 主节点 Current 存放当前数据,从节点 History 存放历史数据;
● 主节点的更新操作引发:
■ 当前数据的版本推进;
■ 数据的旧版本同步至从节点,追加旧版本到历史库;
● Proxy 路由 TP 请求到主节点,操作当前数据;路由 AP 请求到从节点,执行全态查询。
Master-Slave 是目前广泛采用的高可用方案之一,HTAC 架构基于此,适用性广泛。并且,在现有的数据库服务中增加一备即可承载历史,避免了重新设计部署数据库服务。
主、备在物理上分别存放当前、历史数据,保证数据安全。主节点数据出现问题时,可以使用该从节点的数据快速恢复。另外,当前和历史数据物理上的隔离,导致 TP 和 AP 服务切割,因此可以针对 AP 业务针对优化此从节点。
在主备间传输的历史数据,是原生数据,而非日志。其优势在于,避免本地封装数据,节约计算开销,尽可能降低对业务系统的影响;避免异地解析日志,同样节约计算开销,使得历史数据快速落地存储,实时性高。
小结
QLDB 是 Amazon 数据库生态中的一环,作为 RDS 等“账本”的存在,事务在 RDS 上执行,在 QLDB 上“入账”。
TDSQL 全时态数据库采用基于 Master-Slave 的 HTAC 架构,在需要追溯历史的数据库实例上增加一备,作为历史数据的存储即可,避免了额外的系统设计和部署,而且数据安全得到进一步保障,快速恢复触手可及。另外,节点间传输原生数据格式,具有对业务系统影响低、历史数据落地快、实时性高的优势。
QLDB:How it works
根据 ref[2] FAQ,QLDB 支持事务并满足 ACID,并且提供 SQL-like 的接口。以机动车管理系统为例,图 4-1(引用自 ref[6])为 QLDB 的插入操作,用户使用 SQL-like 风格的语句,插入过程如下:
1)首先写 Journal,其数据为文档数据格式,并计算其 SHA-256 哈希值也存放在日志中;
2)写 Journal 完成,更新 Current 和 History。(图中以二维表的方式展现数据,但 QLDB 采用文档数据模型)
(引用自 ref[6])和引用自 ref[6])分别为 QLDB 更新和删除操作,类似的,用户使用 SQL-like 语句,更新和删除过程先追加写 Journal,随后更新 Current 和 History。本质上,这种操作方式,就是“流水日志”,所以历史数据被“Append”到历史库中。而 TDSQL 天然利用了 MVCC 中多版本技术,历史数据自然以原生格式沉淀在数据库系统中,没有封装为流水记录、没有重新插入到历史表中的过程,非常自然和流畅地解决了历史数据存储的问题。
更多语义、操作、使用方法等,待 Amazon 开放更多资料。
** TDSQL 全时态数据库功能**
我们将 TDSQL 全时态数据库的操作称为全时态操作,全时态操作是传统关系操作的超集。除传统关系操作外,全时态操作还提供时态操作和全态操作。
时态操作
TDSQL 提供有效时间和事务时间两种时态语义和操作。
有效时间操作:
1.有效时间点查询、有效时间段查询;
2.有效时间区间更新、有效时间区间删除。
事务时间操作:
1.获取某时间点可见的数据;
2.获取某时间段可见的数据集合;
3.获取某事务操作的数据版本;
4.获取事务状态。
ref[10]详细介绍了时态操作的语法语义、内部机制。
全态操作
根据作用域不同,全态操作划分为:
1.当前态数据读取,作用域为当前态数据,即传统关系型数据库操作的作用域;
2.历史态数据读取,作用域为历史态数据,只获取历史数据;
3.全态数据读取,作用域为任意状态数据。
在全态操作中,我们模糊过渡态这一概念。
在以 MVCC 作为并发控制机制的数据库系统中,传统数据读取操作的作用域为当前态和过渡态。读取到最新的数据版本即当前态,或如图 4-4 a 例,读已提交(或更高)隔离级别下,事务 T1 read 获取数据为 T2 write 之前的值,即过渡态。
历史态数据读取中,获取过去某时段的数据,很可能取到过渡态数据,如图 4-4 b。
因此,过渡态数据的读取融于当前态数据读取和历史态数据读取中,根据不同查询要求和数据的可见性决定过渡态数据查出与否。
小结
Amazon 目前开放的资料显示,QLDB 支持 ACID 事务,提供 SQL-like 接口。
TDSQL 全时态数据库的功能是完全适用关系型数据库的 SQL 操作,没有自定义一套新接口,方便了用户的使用。
TDSQL 还在时态维度上提供有效时间和事务时间操作,在状态维度上提供全态数据获取。
评论