扫码阅读
手机扫码阅读

数据库|免费版MySQL HeatWare, StoneDB畅想HTAP能力!

97 2024-02-28

本期摘要

MySQL数据库因其易用性和开源特性,被广泛应用于中小型企业,但在事务分析(OLAP)能力上有所不足。尽管MySQL HeatWave能够弥补这一缺陷,但其并未开源,限制了其广泛应用。

为了解决这一问题,今天为大家介绍一款开源数据库StoneDB,它致力于实现HTAP能力,能够同时满足OLTP和OLAP需求,为使用者带来更大的便利。

作者

陈卓敏 | 后端开发工程师

一个乐于分享的分布式数据库从业者

01

MySQL产生HTAP需求

MySQL数据库设计之初,就是为了在线事务处理(OLTP)设计的开源数据库,基于MySQL数据库使用简单易上手、轻量、免费等特点,其在web2.0时代逐渐流行起来,在应用上,MySQL数据库能够很好地支撑起中小型企业绝大多数应用场景,逐渐多的使用者也激励着开源社区持续火热,推动了MySQL数据库的发展。

世界上没有一种数据库能解决所有的应用场景,MySQL在事务分析(OLAP)能力上就不能提供很好的支持,随着数据量的增长和分析性需求的出现,一部分公司选择了通过ETL工具将数据导入专门的AP型数据库或者数仓进行计算,但这需要承担额外的硬件费用,维护费用以及数据链路变长带来的风险。

同时也有另一批MySQL用户选择了MySQL官方推出的MySQL HeatWave ,MySQL HeatWavet通过引入了HeatWave引擎来实现将数据以列式的方式存储在内存中,并引入向量化计算,对HeatWavetnode中的数据进行分析性计算,在应用上,对于需要做分析型计算的表,通过通过CREATE TABLE或ALTER TABLE语句中指定SECONDARY_ENGINE=RAPID选项来开启RAPID,去生成列存副本,以面对分析性请求,在用户请求发送到数据库后,优化查询器会自动把用户的OLAP查询路由到HeatWavet node中进行。目前MySQL HeatWave并没有开源,只能在商业版MySQL中使用。

02

开源的StoneDB

一、简介

先来一段StoneDB官网对自己产品的简介:StoneDB 是由石原子科技公司自主设计、研发的国内首款基于 MySQL 内核打造的开源 HTAP(Hybrid Transactional and Analytical Processing)融合型数据库,可实现与 MySQL 的无缝切换。StoneDB 具备超高性能、实时分析等特点,为用户提供一站式 HTAP 解决方案。但是在简介末尾更加强调OLAP能力。

在社区和StoneDB原厂人员讨论过这个问题,大致明白了他们的这样描述的原因:在v1.0的架构中,他们自研了对标HeatWave的存储引擎,支持将数据默认以列存的形式存储在磁盘中,来支持OLAP型请求,而在下一步的v2.0架构中,他们将完善按需将数据由行存同步列存副本的链路,实现完整成熟的HTAP能力,目前2.0正在迭代中,社区主流版本还是v1.0。

二、高效数据压缩技术

相比于基于innode行存数据存储,列式存储由于整列为同类型的数据,所以StoneDB会根据不同的数据类型去采用的压缩算法,从而支持更高效的数据压缩比。当数据被压缩的更小后,不仅所占的存储空间变小,降低存储成本,同时在对数据进行读取时,io压力也会变小,这也是StoneDB支持更高混合负载压力的基础之一。

三、知识网格技术

列式数据在存储的过程中,虽然是按照列的方式去存储压缩,但是并不是一整列去一起压缩,首先会按照一定的大小去切割分块,变成一个个数据包,然后再进行压缩存储。在StoneDB中每列按照65536行去进行切分为一个个数据包,也就是一个个数据存储单元。

在传统数据库中,通过维护元信息来维持对数据存储单元的路由,在StoneDB中独创了知识网格技术,来管理数据存储单元。知识网格技术的工作目标和传统的借助元信息实现路由类似,他的目标就是在查询中如何做到读取尽量少的数据包时提升效率。

在数据包的管理上,引入了粗糙集的概念,粗糙集是一门数学学科,用来研究不完整的数据,不精确的知识表达、学习、归纳等的一套理论。在 StoneDB 中,粗糙集用于对数据包的划分,根据SQL查询条件的数据在数据包中的确认范围,数据包分为以下几类:

  1. 不相关的数据包:表示不满足查询条件的数据包,这类数据包直接被忽略。

  2. 相关的数据包:表示满足查询条件的数据包,如果要查询相关的数据包里面的具体数据,需要对数据包进行解压缩,如果根据数据包的元数据节点就能得到数据,那么就不需要解压缩数据包。

  3. 可疑的数据包:表示数据包中的数据部分满足查询条件,需要进一步解压缩数据包才能得到满足条件的数据。

在发生查询时,知识网格节点会去过滤掉不想管的数据包,对可疑数据包进行解压验证,同时一部分统计信息在查询解压验证阶段被完善。列式数据的向量化计算以及结合知识网格技术做到最小成本的io,可以让tianmu引擎在分析性查询上较innodb有数十倍的效率提升。

四、StoneDB的定位

没有任何一款数据库产品可以支持所有应用场景,在StoneDB这种集中式数据库架构的设计中,StoneDB也明确了自己的定位,使用于数据量在10~100TB时,且需要提供HTAP混合负载能力支持的场景!

03

TPC-H测试

PC-H是TPC提供的一个benchmark,用来模拟一个现实中的商业应用,可以生成一堆虚构的数据,且自带一些查询,可以导入到各种数据库中来模拟现实需求,检查性能。TPC-H 主要用于评测数据库的分析型查询能力。

StoneDB官方文档更新了同配置下StoneDB相较于ClickHouse在OLAP方面的测试结果。

#这里引用StoneDB官网测试结论,不做任何评价

一、测试环境信息

二、测试结论

StoneDB与ClickHouse数据量同为100G,在相同的配置,相同的查询语句条件下,依据TPC-H的基准性能指标22条SQL进行两款产品的对比测试,根据测试数据汇总得出结论如下:

详细测试步骤和配置:TCP-H测试报告 | StoneDB

(https://stonedb.io/zh/docs/performance-tuning/performance-tests/OLAP/tcph-test-report/)

三、stone尝试

docker 快速部署安装StoneDB后,在上面进行了一些数据库的基本操作,可以正常运行,SQL脚本如下:

`#创建、查看、应用、删除数据库 create database test_db DEFAULT CHARACTER SET utf8mb4; show databases; use test_db; drop database test_db;
#创建、查看、删除表 create table student( id int(11) primary key, name varchar(20),
age smallint,
birthday DATE ) engine=stonedb; show create table student; drop table student;
#dml相关操作 insert into student values(1,'Jack',15,'20220506'); update student set age=25 where id=1; delete from student where id=1;
#DQL相关操作 select name,birthday from student where id=1; select name,birthday from student order by birthday;
#DCL相关操作 create user 'tiger'@'%' identified by '123456'; grant select on test_db.* to 'tiger'@'%'; show grants for 'tiger'@'%'; drop user 'tiger'@'%';
`

四、未来展望

近些年来随着开源这个概念在国内开始流行起来,有越来越多的优秀的产品选择了开源,借助社区的力量去完善和发展产品。StoneDB这个项目自立项之初就选择了拥抱开源,并且现在也已经有了第一批contributer,这是一款年轻的有活力的数据库,相信随着开源发展的理念更深入人心,StoneDB未来的发展会越来越好。

  • StoneDB 代码仓库:https://github.com/stoneatom/StoneDB

  • StoneDB 社区官网:https://StoneDB.io/

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247527611&idx=1&sn=846c3bbc7cb0cc959a2f1cacbc7e2e75&chksm=c02f571df758de0bfcb9cf260f564213c785b751c789a2fd3fb491fcc0773982c17f22470720#rd