写点什么

【Paper Reading】Cloud-Native Transactions and Analytics in SingleStore

  • 2023-01-03
    北京
  • 本文字数:3689 字

    阅读完需:约 12 分钟

分享人:印才华(恒义),阿里云数据库高级技术专家,AnalyticDB PostgreSQL 存储引擎和执行引擎团队研发负责人。


摘要:HTAP & 云原生是如今数据库技术演进的两大热点方向。HTAP 代表既有传统的 HANA Delta RowStore+Main ColumnStore,Oracle In-MemoryColumnStore 等方案,也有像 TiDB,Snowflake Unistore 这样新的技术架构;云原生代表则是以 S3 为低成本主存的 Snowflake,Redshift RA3,提供灵活弹性和 Serverless 能力。SingleStore 则是首次把两者结合起来,基于计算存储分离的云原生架构,用一份存储提供低成本高性能的 HTAP 能力。本次论文分享围绕 SingleStore 在 HTAP 和云原生的核心技术和创新亮点展开, 同时包括和业界技术对比探讨。


目录:

一、HTAP - 统一数据存储

二、云原生 - 存储和计算分离

三、总结 - SingleStore 的云原生 HTAP


一、HTAP - 统一数据存储


1、业界的 HTAP 解决方案


2022 发表在 SIGMOD 的这篇论文《HTAP Database: What is New and What is Next》中,介绍了 HTAP 数据库的架构。HTAP 数据库主要分为四部分:


  • 主行存储+内存中列式存储(Primary Row Store + In-Memory Column Store)

  • 分布式行式存储+列式存储副本(Distributed Row Store + Column Store Replica)

  • 磁盘行式存储+分布式列式存储(Disk Row Store + Distributed Column Store)

  • 主列存储+增量行式存储(Primary Column Store + Delta Row Store)


论文下载地址:https://dl.acm.org/doi/pdf/10.1145/3514221.3522565


值得注意的是,在下表中列出的典型数据库,在论文发表后,其中一些数据库有了新的发展方向:


  • SingleStore 数据库已经不再是“分布式行式存储+列式存储副本”,而属于第四部分“主列存储+增量行式存储”

  • 数据云公司 Snowflake 于近期发布 Unistore 存储引擎,属于第二部分“分布式行式存储+列式存储副本”



2、SingleStore 的 HTAP 特性


  • 一份统一存储

  • In-Memory 行存储

  • On-Disk 列存储

  • 主键唯一性约束

  • 二级索引

  • 细粒度数据读取

  • Row-Level Locking(行级锁)


a. 一份统一存储副本


SingleStore 的解决方案与 HANA 类似。下图列举了 HANA、TiDB、MySQL HeatWave 和 Snowflake 四个数据库的架构,从架构中可以看到,只有 HANA 是一份存储,而 TiDB、MySQL HeatWave 和 Snowflake 都是两份存储。



相关内容参考:


b. 基于 Skiplist 的内存中行存储和基于 LSM 树的磁盘列存储


如下图所示,左边是基于 Skiplist 的 In-Memory 行式存储架构,右边是基于 LSM 树的磁盘列式存储架构:



  • 基于 Skiplist 的 In-Memory 行存储,具备的能力包括:

  • 内存优化

  • MVCC(多版本并发控制)

  • Row-Level Locking(行级锁)

  • Redo Log 支持

  • 提供给用户表 Delta 部分和列存储 Meta 部分


  • 基于 LSM 树的 On-Disk 列存储

  • 内存中行存储被 flush 到磁盘形成以列存组织的 segment 文件;

  • segment 文件会被组织到不同的 Sorted Run 中,每个 Sorted Run 有 min/max 值,一个 Sorted Run 中可以包含一个或多个 segment 文件,如果包含多个 segment 文件,需要确保文件之间的 min/max 不会重叠

  • Sorted Run 的优势在于,如果扫描过滤列中带有排序列,每个 Sorted Run 只需要访问一次 segment 文件即可;

  • 当有空闲资源时,Sorted Run 之间会进行 background merge,确保每个 Sorted Run 中的 segment 文件足够大,实现最佳的扫描过滤效果。


相关参考:

SingleStore 发布的另一篇文章:A. Skidanov, et al., A Column Store Engine for Real-Time Streaming Analytics, in IEEE, 2016,地址:https://www.singlestore.com/resources/research-paper_columnstore-engine-for-real-time-streaming-analytics/


c. 列式存储的主键和二级索引


SingleStore 数据库采用的索引方式,是 2 层结构的组合方式,如下图所示,包括:Data Segment 和 Global Hash index。



  • Data Segment

  • 在每个 segment 内部,对索引列建立一个 Inverted Index(倒排索引),每个列存文件都对应一个倒排索引

  • Segment 的 flush 或合并都会生成新的 segment,同时伴随生成新的索引


  • Global Hash Index

  • 每个 segment 创建时都会对应创建一个 Hash table,记录每个列存文件所在的 segment 以及 offset 值

  • Segment 创建或合并后会创建新的 Hash table


  • SingleStore 的索引方式与 Btree 的不同在于:

  • 基于 LSM,Immutable,适用于云存储

  • O(log(N))写放大

  • 二级定址:global hash -> segment-level inverted

  • 主键的唯一性强制执行

  • 二级索引与主键具有相同的性能


这种索引方式对于高性能点查必不可少。


d. 细粒度 Subsegment 访问实现有效的点查找


可搜索的列式存储:

  • 搜索位置由主键或二级索引确定

  • 列编码支持 bit-packing、字典编码(dictionary)、游程长度编码(run-length encoding)和 LZ4 编码等

  • 一个列支持跨 segment 选择不同编码

  • 压缩单位是紫色的 subsegment 层级(见下图)。



e. 行级锁在并发更新/删除和后端合并中的应用


从表级锁到行级锁的转变:


  • 传统方式中,列存储的更新/删除是在表级别(或 delete bitmap 级别),这会引起前端并发更新/删除的会话之间的冲突,以及后端合并的冲突

  • 基于 Skiplist 的 In-Memory 行式存储原生的支持 level locking,并且列式存储可以利用这一点,首先将需要更新/删除的行移动到行存中(同时在 delete bitmap 中标记),然后只对行存储进行操作

  • 因此,利用行式存储实现列式存储的行级锁,让列式存储也可以进行并发更新/删除



二、云原生 - 存储和计算分离


1、业界的云原生解决方案


业界的云原生解决方案中,比较典型的有以下三个:




2、SingleStore 的云原生架构的特性


  • 通过综合利用本地内存+本地 SSD+基于数据热度的远程云存储以支持 HTAP 工作负载

  • 这里的云存储指 S3/OSS 这类低成本对象存储器

  • 为了实现高吞吐低延迟的 TP 需求,事务提交路径不会写穿到远程云存储

  • OSS 延迟大概是 20 毫秒

  • 支持在云存储中的快照和 redo log 存储的快速 PITR

  • 支持多种只读副本(在 SingleStore 称作 workspace,与 Snowflake 的虚拟仓库类似),以实现 HTAP 工作负载的隔离和扩展


a. 低延迟事务和低成本数据规模


  • 低延迟:事务写入本地 SSD 磁盘 redo log 以确保持久性,并同步到远程 HA 节点内存中

  • 低成本:

  • In-Memory 行式存储会定期 flush 到本地盘的 Segment,并且异步上传到远程云存储,同时本地冷数据会定期移除,以减少本地空间占用

  • 将行存储 flush 之前的 redo log 密封并上传到远端云存储,本地盘只保留 tail redo log

  • 快照也会定期被整理并存储到云上,提供 PITR 和只读副本能力以及 redo log

  • 基于以上能力可以实现无限的数据规模、低延迟事务和高吞吐量分析



b. PITR 和 Workspace 扩展能力


  • 快照指向一堆定期获取的历史 segment 文件

  • 每个 partition 的事务一致性点(称为 LP,Logpoint )都会定期写入 redo log

  • PITR(Point-in-Time Recovery,时间点恢复)

  • 删除数据库当前的本地状态

  • 从指定 LP 前的第一个快照文件中获取数据

  • 根据这个快照的 redo log 起始点一直重放 log 直到达到 LP

  • 由于快照和 redo log 都在云上存储,因此比传统的备份和恢复速度快得多

  • Workspace 扩展能力(只读副本)

  • 选择最后一个快照并重放到最近的一个 LP

  • 同时从 HA 主节点复制 tail log



三、总结:SingleStore 的云原生 HTAP


1、SingleStore 系统架构


SingleStore 将 HTAP 和云原生很好的结合在一起。下图左边是 SingleStore 的整体架构图,其中包括两种节点:aggregators 节点和负责计算的 leaf 节点,两个 workspace:主 workspace 和只读 workspace,以及对象存储(云存储):其中包含数据文件、logs、快照文件。



2、测试数据分析


在上图右边是两个测试数据表:


  • 表 1:TPC-C 测试结果;

  • 表 2:TPC-H 测试结果;

  • S2DB:SingleStore;

  • CDB(Cloud Database):云 TP 数据库;

  • CDW(Cloud Data Warehouse):云 AP 数仓;


从两个测试结果可以看到,对比同类产品,SingleStore 数据库,在扩展能力和综合处理能力方面有不错的表现。

用户头像

还未添加个人签名 2022-01-10 加入

还未添加个人简介

评论

发布
暂无评论
【Paper Reading】Cloud-Native Transactions and Analytics in SingleStore_数据库_阿里云数据库开源_InfoQ写作社区