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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: HTAP & 云原生是如今数据库技术演进的两大热点方向。HTAP 代表既有传统的 HANA Delta RowStore+Main ColumnStore,Oracle In-MemoryColumnStore 等方案,也有像 TiDB,Snowflake Unistore这样新的技术架构;云原生代表则是以 S3 为低成本主存的 Snowflake,Redshift RA3,提供灵活弹性和Serverless 能力。SingleStore 则是首次把两者结合起来,基于计算存储分离的云原生架构,用一份存储提供低成本高性能的 HTAP 能力。

分享人印才华(恒义),阿里云数据库高级技术专家,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 数据库,在扩展能力和综合处理能力方面有不错的表现。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
Query Performance Optimization at Alibaba Cloud Log Analytics Service
PrestoCon Day 2023,链接:https://prestoconday2023.sched.com/event/1Mjdc?iframe=no首页自我介绍,分享题目概要各个性能优化项能够优化的资源类别limit快速短路有什么优点?有啥特征?进一步的优化空间?避免不必要块的生成逻辑单元分布式执行,global 阶段的算子哪些字段无需输出?公共子表达式结合FilterNode和Proje
Query Performance Optimization at Alibaba Cloud Log Analytics Service
|
Cloud Native 架构师 关系型数据库
Performance Test on Cloud-native Databases
Performance Test on Cloud-native Databases
146 0
Performance Test on Cloud-native Databases
|
安全 流计算
Global Live-streaming For Business: Getting Started on the Cloud
Live-streaming is the transmission of video or audio content simultaneously recorded and broadcast in real time to an audience.
1874 0
Global Live-streaming For Business: Getting Started on the Cloud
|
JavaScript 前端开发
Guidelines for Function Compute Development - Troubleshoot Timeout Issues
Endless codes and endless bugs When you write code, you may inadvertently introduce some hidden bugs, even if you test a large proportion of the codes to the maximum extent possible.
1642 0
|
API C# C++
Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem in 解决方案
because regular C functions work differently than the Windows API functions; their "calling conventions" are different, meaning how they pass around parameters is different.
1174 0
|
Java 数据库连接 数据库
Design and Application Learning of the Distributed Call Tracing System
With the surge in popularity of distributed service architecture and the application of design architectures, especially the microservices architectur
2622 0

热门文章

最新文章