《云原生一站式数据库技术与实践》——二、云原生数据仓库AnalyticDB MySQL高性能存储引擎(4)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 《云原生一站式数据库技术与实践》——二、云原生数据仓库AnalyticDB MySQL高性能存储引擎(4)

《云原生一站式数据库技术与实践》——二、云原生数据仓库AnalyticDB MySQL高性能存储引擎(3) https://developer.aliyun.com/article/1231657?groupCode=aliyundb



对于单机存储引擎,build 除了构建索引、分区、排序等建模之外,需要兼顾实时数仓的查询和写入性能,因此,我们实现了以下三个能力:


第一,基于多版本控制的细粒度锁构建过程。实时数据负责承接写入,实时数据和历史数据共同承接查询。单存储引擎收到build 命令后会进行split,将实时数据和历史数据切分为ReadonlySnapshot,还构建了新的实时数据和delete manager。ROSnapshot 作为数据源进行异步构建,新的实时引擎和delete manager 用于承接写入。切出的ROSnapshot、实时数据以及delete manager 共同承接查询。ROSnapshot 异步构建的过程对查询和写入完全没有受到任何影响。



Delete manager 是对ROSnapshot 的删除标记,即对新的历史数据的删除标记。但因为此时还在构建过程中,新的历史数据还未产生,因此先用delete manager记录删除。异步构建执行完成之后,会将新的历史数据替换掉ROSnapshot。替换之前会对delete操作进行进行replay。替换完成之后,也意味着新的历史数据包括其数据建已经完成。



另外,我们对构建过程的查询和写入也进行了拆解。如果需要对历史数据进行修改,一定会在历史数据里对ROSnapshot 标记为删除。一个delete会记录两份,一份是Bitset,方便查询后做归并,纯内存,因此查询性能较高;另一份为PK Entry,是log的格式方便顺序读写。



实时数据不牵扯到对历史数据的修改,因此直接进行追加写即可。


image.png


ADB 整体是一个分库分表、多副本的架构。因此一个表的build 任务会有非常多的子任务(分库数*副本数)。考虑到可拓展性和可运维性,目前我们选择使用FN 做全局任务管理,leader 节点生成全局plan,方便运维。



同时,我们也在做另一种调度方式,每个Raft leader 进行独立管理。其优点在于拆得足够散,调配更加灵活。而且Raft leader 在存储节点可以获取到更全面、更实时的信息,包括行数、worker 的负载等。当然,这也带来了一定的运维复杂度。



除此之外,还以Raft作为控制链路,因为控制链路必然需要高可靠的保证。我们需要副本间协同工作,如果没有高可靠保证,则副本间很可能不一致,导致现场处理非常复杂。相当于直接复用了Raft 的数据链路作为控制链路。以保证任务控制的command 一定能收到,且副本间一致。



Split 之后,只有leader会进入真正的merge 状态,进行扫描、构建索引、构建分区,然后将扫描结果上传到DFS。上传结束之后,再看follower,leader在merge时follow 会进入waiting 状态,直到被告知leader 已经结束任务,将构建完成的热数据下载到本地。如果是冷数据,会直接应用层面的link。全部完成之后,leader和follower同时切换上线。



一个ECS 往往分布着多个Raft成员,因此只要保证shard 的leader足够均匀,即可保证每个机器的负载基本相同。


image.png




《云原生一站式数据库技术与实践》——二、云原生数据仓库AnalyticDB MySQL高性能存储引擎(5) https://developer.aliyun.com/article/1231653?groupCode=aliyundb


相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
43 6
|
7天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
38 3
Mysql(4)—数据库索引
|
2天前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
23 8
|
1天前
|
存储 关系型数据库 MySQL
如何在MySQL中创建数据库?
【10月更文挑战第16天】如何在MySQL中创建数据库?
|
5天前
|
SQL Oracle 关系型数据库
安装最新 MySQL 8.0 数据库(教学用)
安装最新 MySQL 8.0 数据库(教学用)
34 4
|
3天前
|
存储 SQL 关系型数据库
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
11 0
【入门级教程】MySQL:从零开始的数据库之旅
|
6天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
13 2
|
8天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
32 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
9天前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
11 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
6天前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
19 0

热门文章

最新文章

相关产品

  • 云原生数据仓库AnalyticDB MySQL版