目录
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中使用。
先来一段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查询条件的数据在数据包中的确认范围,数据包分为以下几类:
在发生查询时,知识网格节点会去过滤掉不想管的数据包,对可疑数据包进行解压验证,同时一部分统计信息在查询解压验证阶段被完善。列式数据的向量化计算以及结合知识网格技术做到最小成本的io,可以让tianmu引擎在分析性查询上较innodb有数十倍的效率提升。
没有任何一款数据库产品可以支持所有应用场景,在StoneDB这种集中式数据库架构的设计中,StoneDB也明确了自己的定位,使用于数据量在10~100TB时,且需要提供HTAP混合负载能力支持的场景!
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/)
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未来的发展会越来越好。
作者:陈卓敏| 后端开发工程师
版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。
公众号搜索神州数码云基地,后台回复数据库,加入数据库技术交流群。