深度干货 | 揭秘YashanDB融合存储引擎

简介: 存储引擎是数据库内核的重要组成部分,存储引擎的设计决定了以何种方式存储数据、如何读取和写入数据,也在很大程度上决定了数据库的读写性能与数据的可靠性。YashanDB是一款覆盖OLTP/HTAP/OLAP多场景的数据库产品,在存储引擎设计上采用融合架构,基于统一基础设施构建了不同的存储能力,支持In-place Update行存储,适应TP场景;支持原位更新(In-place Update)和追加式(Append-only)两种列式存储,具备原生HTAP能力和海量数据分析能力。

原创 存储引擎团队 YashanDB
第2期技术Meetup《崖山论“见”》顺利举办,在这里将YashanDB存储引擎负责人郭藏龙的精彩分享整理成文章,方便大家学习回顾。本篇是YashanDB存储引擎总览,主要围绕以下三点展开:
融合存储引擎架构介绍
存储引擎关键技术实践
存储引擎技术探索与展望
全文3827字,阅读时长约8分钟。

01融合存储引擎架构

存储引擎是数据库内核的重要组成部分,存储引擎的设计决定了以何种方式存储数据、如何读取和写入数据,也在很大程度上决定了数据库的读写性能与数据的可靠性。
YashanDB是一款覆盖OLTP/HTAP/OLAP多场景的数据库产品,在存储引擎设计上采用融合架构,基于统一基础设施构建了不同的存储能力,支持In-place Update行存储,适应TP场景;支持原位更新(In-place Update)和追加式(Append-only)两种列式存储,具备原生HTAP能力和海量数据分析能力。
YashanDB 研发团队选择从零自研存储引擎,没有基于任何开源产品二次改造,保证架构、代码的自主可控与持续演进。
从架构上看,YashanDB的存储引擎分为两个大的模块:
一是存储引擎的基础设施部分,是底层中的底层,包含事务引擎、持久化、高可用、故障管理以及资源管理的能力。
二是在基础能力之上构建的具体存储能力,包含对象管理、缓存管理、存储结构、数据空间以及数据持久化的能力。
图片1.png

本文将从YashanDB存储引擎的全场景高性能设计、高可用能力、基础设施优化三个方面进行介绍。

02全场景的高性能设计

YashanDB在高并发事务处理、海量数据分析以及混合负载场景下均表现出优异的性能,这与存储引擎的设计密不可分。

高并发事务处理
MVCC(Multiversion Concurrency Control,多版本并发控制)是主流的事务并发控制机制,但是不同数据库的实现差异较大。目前比较主流的实现方式是Append-only行级MVCC和In-place Update 行级MVCC。
Append-only行级MVCC,更新数据时新增一条数据,优点:不需要额外的Undo空间,管理方便。缺点:会带来较大的空间膨胀、垃圾回收开销大;查到最新版本的代价高;修改需要拷贝整行,对宽表的处理不友好。
In-place Update 行级MVCC,更新记录时对原始数据进行覆盖,优点:解决了Append-only行级MVCC的几个痛点问题。缺点:需要引入独立的Undo空间管理机制;查询最新可见版本时回滚开销大;行存储开销大。
为追求极致的并发事务性能,YashanDB采用In-place Update块级MVCC,针对In-place Update行级MVCC作了进一步的优化:
相较于追加式行存,历史版本记录增量数据,实现历史版本的独立存储,数据不膨胀;
每个数据块的Undo数量与Row解耦,降低了多版本管理的空间开销;
一致性数据块按需全局缓存,会话内及会话间共享,减少并发场景构建开销;
基于块级的MVCC可以实现批量处理合并Undo,提升效率。
Btree索引是YashanDB存储引擎架构下最重要的索引结构,它直接影响事务的处理能力。但Btree索引在数据库实现方面会面临几个主要的痛点:
在分裂的过程中如果有搜索,由于索引结构的变化,可能导致结果不正确;
由于Btree的Update是删除再插入,所以随着业务的更新,会出现空洞以及空间膨胀问题,严重影响Btree的效率。
并发较高的情况下,较高层的节点(Root或者第一层Branch)访问冲突会比较大,影响扫描效率。

针对上述三个问题,YashanDB对Btree索引做了如下优化:
通过全节点MVCC方式实现了无锁Btree,访问时还原节点当前的可见版本,并不受当前分裂版本的影响,搜索与搜索、搜索与分裂、分裂与分裂之间均可以并发;
支持DML过程中动态回收空页以及合并系稀疏页,对于用户透明不感知,无需人为DDL操作定期回收空页,有效解决了空间膨胀问题,极大地降低了长时间运行后的Btree性能劣化;
引入热页缓存机制,针对Btree高频访问的Block可以做到Latch-free,消除全局资源竞争,极大的提升了索引并发性能。

海量数据高性能分析
企业需要处理的数据量增长迅速,企业往往需要在成本、访问频率之间进行平衡。为解决这些挑战,YashanDB存储引擎基于不同的存储结构提供透明分层存储能力,可以帮助企业根据访问频率的高低对数据进行冷热分离,并支持智能化透明转换,以此实现性能与成本的平衡。
热数据采用In-place Update的列式存储,保证分析能力的前提下兼顾事务处理能力;
冷数据采用Append-only列式存储,进行了极致压缩编码,并通过稀疏索引、条件下推、向量化计算等技术提供了高效的分析性能。冷数据支持对象化存储到远端,并通过本地缓存进行加速,在降低成本的同时也能保证性能。

HTAP混合负载
混合负载存储的主流实现方式有三种:通过CDC或者Log实现TP节点到AP节点的数据转换;同节点内通过多副本实现行列转化同步;或者基于同一份数据通过内存转化同时支撑TP和AP业务。
YashanDB采用统一的SQL引擎和存储引擎,对外提供原生HTAP能力。存储引擎在满足事务一致性的基础上提供多种数据组织结构算法,以满足不同业务场景的需求。当前通过三种方式实现混合负载:
在TP友好的In-place Update行式存储之上,基于内存行转列以及列式索引实现分析能力。列式索引也是YashanDB在混合负载方面的一个重要的技术实践,在行式存储的交易数据上创建实时同步的列式存储索引,发挥加速效果,例如聚合扫描、条件下推、向量化计算。
使用In-place Update列存引擎,避免空间膨胀与垃圾扫描,极大地提升存储和检索数据的效率,满足高性能分析场景,同时具备良好的事务处理能力,也可通过建立Btree索引满足TP场景。
生产的实时数据通过行存满足极致事务能力,并定期将其转化为列式存储用于分析,列式存储包含为实时数据(In-place Update列存储)和稳态数据(Append-only列存储)。
上述提到的不同数据结构可以通过透明数据迁移技术实现流转,无需使用者的干预;存储引擎的实现底层基于统一的事务引擎,因此能够支持完整的事务能力以及约束。
图片2.png

03高可用设计

作为生产系统中极为关键的核心底座,数据库的高可用性HA(High Availability)是企业非常关注的功能点,它是指数据库系统持续提供服务的能力。
YashanDB支持主备复制、共享集群、分布式等多种高可用手段。其中主备模式采用物理日志复制模式,备库通过复制和回放主库日志,生成主库的数据副本,从而保证数据库系统的可用性,同时在一主多备情况下引入第三方仲裁者角色,基于Raft协议实现自动选举。
YashanDB对性能进行了深度优化,在保证RPO=0的前提下,能实现高负载下的秒级RTO。
多线程回放:引入协调器的概念,通过分析Redo数据,选择最高效的回放方式;回放速率接近生成速率,备库Redo不积累,RTO<10s;
会话级协调:完美复制主库session执行顺序,保证事务瞬时一致性,解决备库读一致性和回放性能难以兼顾的痛点问题;
读写分离:主库高并发业务下,备库查询延迟依然很低。

YashanDB支持主备自选举、级联备、共享集群等解决方案级别的容灾,也同样支持多地多中心的部署方式。YashanDB存储引擎从内核层面通过多种机制来支撑不同的容灾方案,例如支持不同的保护模式(最大保护、最大性能、最大可用)、级联备、自选主以及多写能力。
图片3.png
图片4.png

04基础设施的优化

自适应undo管理
前面提到YashanDB事务引擎实现的是In-place Update块级MVCC机制,这就需要引入独立的Undo管理机制。Undo数据用于还原可见历史数据版本,随时都有可能被使用,因此Undo的管理能力一定程度上决定了事务引擎的能力。
Undo管理经历了从规则式管理到自适应Undo管理的演进。规则式管理通过配置决定Undo内部的参数,例如Undo Segment的数量、每个Undo Segment的Block数量或者Undo数据保留期,这就导致需要定制不同业务压力下的配置,并且无法实时处理业务波动,经常出现Undo分配冲突大导致事务性能下降,或者保留期配置不合理频繁出现Snapshot too old等问题。
自适应Undo管理基于运行时的统计信息,引入Undo Segment动态扩展、Segment Block动态rebalance、Undo Block智能分配、Undo Retention动态调整等机制,有效解决了之前Undo管理中存在的痛点问题,能应对不同负载的事务处理要求。
图片5.png

Redo优化

YashanDB通过Write-ahead Log(WAL,预写日志)和异步Checkpoint的方式提供持久化的能力。其中Redo是用于实现WAL机制的基石。事务在提交的时候,必须等待Redo落盘来保证事务的持久性,因此Redo IO的性能会直接影响事务提交的性能。
因此我们针对Redo也进行了深入优化,目标是要保证不同负载下(尤其是高并发事务),数据库整体的事务提交性能以及稳定性。这里举两个例子:
Redo批量提交:事务提交时主动等待一段时间,积攒更多Redo,减少IO刷盘次数,提高事务吞吐量;
Redo流量控制: 自动控制Redo IO流量,避免高峰期Redo消耗过快而追尾,导致的性能抖动。这里YashanDB引入了基于原创大数据理论的启发式算法,用于实时调整批量提交和流量控制机制,以达到最理想的运行状态。

IO与缓存优化

IO问题是所有通用存储引擎面临的共同难题,YashanDB存储引擎对不同场景下的IO问题进行了深入优化,优化的思路主要有三个方向: IO减少,包括Redo压缩、Block级压缩、编码压缩、归档/备份压缩等方式;IO合并,包括Redo合并、同步/异步预读、Dirty Block合并等;IO并行,包括Redo并行flush、Dirty Block并行flush、并行归档/备份等。
缓存是存储引擎的重要组件,YashanDB采用的是多级缓存架构,对性能带来很大的提升,自下而上分别是:
Level 2 本地磁盘cache,减少远程IO的概率,尽可能在本地磁盘完成访问;
Level 1 全局内存cache,降低产生IO的概率,可以实现共享集群中多实例的共享;
Level 0 会话级内存cache,降低全局资源冲突。

05技术展望

下一步,YashanDB将在HTAP、存储引擎自治、多模数据以及多级存储等方面不断强化。具体来说:
真正的HTAP:持续完善HTAP能力,尤其是在行列混合、负载隔离、透明转化等方面。
存储引擎自治:之前介绍的基于运行统计信息的实时机制优化是YashanDB在自治方面的一个尝试,未来将在查询优化、参数配置、自动运维等方面融入启发式算法、机器学习等自治能力。
多模数据管理:YashanDB在空间数据、时序数据以及图数据方面也进行了探索和实践,接下来将重点打造原生多模内核。
多级存储应用场景的延伸:TP场景随着数据量增长,也面临同样的诉求,后续我们会把多层存储机制进行延伸以支持不同负载场景。
本文是《YashanDB融合存储引擎》系列文章的总览,后续我们会为大家带来该系列中关键能力的设计思路和适用场景。欢迎关注“YashanDB”公众号,持续关注本系列文章!

相关文章
|
11月前
|
缓存 算法 Oracle
深度干货 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。
深度干货  如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
|
11月前
|
人工智能 架构师 决策智能
agentUniverse X 浙大太乙平台,开源共建招募令来啦,3万奖金等你拿!
agentUniverse 首期开源共建活动正式上线啦!3万奖金池等大家贡献瓜分~
|
9月前
|
IDE 测试技术 数据库
【YashanDB知识库】使用vmware虚拟机安装的YashanDB,本机无法访问
在 VMware 虚拟机中安装并测试 YashanDB,数据库及虚拟机运行正常,但本地 IDE 工具无法连接虚拟机中的数据库。问题可能与 VMware 网络适配器配置或网络模式(如 NAT、桥接)有关,导致网络通信异常。需检查虚拟机网络设置、IP 地址配置以及防火墙规则,确保本地与虚拟机间网络连通性。目前无明确修复版本。
|
11月前
|
机器学习/深度学习 PyTorch 测试技术
LossVal:一种集成于损失函数的高效数据价值评估方法
LossVal是一种创新的机器学习方法,通过在损失函数中引入实例级权重,直接在训练过程中评估数据点的重要性,避免了传统方法中反复重训练模型的高计算成本。该方法适用于回归和分类任务,利用最优传输距离优化权重,确保模型更多地从高质量数据中学习。实验表明,LossVal在噪声样本检测和高价值数据点移除等任务上表现优异,具有更低的时间复杂度和更稳定的性能。论文及代码已开源,为数据价值评估提供了高效的新途径。
237 13
LossVal:一种集成于损失函数的高效数据价值评估方法
|
11月前
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
506 33
|
11月前
|
弹性计算 运维 自然语言处理
Copilot测评报告------终端智能化
作为一名后端开发工程师,我日常需要进行云资源的运维和管理。2025年初,我尝试了阿里云推出的OS Copilot,这款基于大模型的操作系统智能助手支持Alinux、CentOS、Ubuntu等系统,具备自然语言问答、辅助命令执行、系统运维调优等功能。安装过程简单流畅,通过简单的配置即可使用。Copilot不仅能处理复杂指令,还能解释管道命令,极大提升了Linux系统的使用效率。尤其在agent模式下,智能化程度更高,显著减轻了工程师的工作负担。总的来说,Copilot的表现令人惊艳,终端操作从此更加智能便捷。
|
11月前
|
监控 Kubernetes Java
阿里面试:5000qps访问一个500ms的接口,如何设计线程池的核心线程数、最大线程数? 需要多少台机器?
本文由40岁老架构师尼恩撰写,针对一线互联网企业的高频面试题“如何确定系统的最佳线程数”进行系统化梳理。文章详细介绍了线程池设计的三个核心步骤:理论预估、压测验证和监控调整,并结合实际案例(5000qps、500ms响应时间、4核8G机器)给出具体参数设置建议。此外,还提供了《尼恩Java面试宝典PDF》等资源,帮助读者提升技术能力,顺利通过大厂面试。关注【技术自由圈】公众号,回复“领电子书”获取更多学习资料。
|
11月前
|
运维 关系型数据库 MySQL
os-copilot安装_配置_功能测试全集
我是一位中级运维工程师,我平时工作会涉及到 各类服务器的 数据库 与 java环境配置 操作。 我顺利使用了OS Copilot的 -t -f | 功能,我的疑惑是不能在自动操作过程中直接给与脚本运行权限,必须需要自己运行一下 chmod 这个既然有了最高的权限,为什么就不能直接给与运行权限呢。 我认为 -t 功能有用,能解决后台运行基础命令操作。 我认为 -f 功能有用,可以通过task文件中撰写连续任务操作。 我认为 | 对文件理解上有很直接的解读,可以在理解新程序上有很大帮助。
329 86
|
11月前
|
人工智能 算法 搜索推荐
算法备案全流程攻略:保姆级教程
在AI热潮下,算法成为互联网服务的核心驱动力,但也带来了大数据杀熟、算法歧视等问题。为规范行业发展,算法备案制度应运而生。该制度涵盖网站、APP等多种产品形式,要求企业在2个月内完成备案,依据《互联网信息服务算法推荐管理规定》等法规。未备案企业可能面临无法上线、罚款甚至刑罚的后果。备案流程包括注册、主体备案、信息填报及审核,确保算法合规运营。通过悬挂备案号、标识AI生成内容和定期自查,企业需持续维护算法安全与合规。
|
11月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
317 36