传统数据库领域包含两大业务场景:OLTP和OLAP。过去,两大业务场景需要依赖不同的数据库产品,数据在不同数据库之间融通的过程中往往容易产生数据孤岛、数据的时效性、数据的一致性等问题。因此,近年来支持HTAP混合负载的数据库产品正在受到越来越多的关注。如何实现一款的HTAP数据库,业界有不同的声音。
一方面,以TiDB为代表的新兴数据库厂商选择从头做起,搭建一款HTAP原生数据库。另一方面,以Greenplum为代表的成熟数据库厂商选择在自己的优势产品中引入对HTAP的支持。其中,Greenplum6.0通过引入全局死锁检测、优化全局事务、升级PG内核等优化,实现了在OLTP上性能的飞跃。那么,这些HTAP数据库的性能究竟如何呢?
近日,来自金风科技的社区小伙伴马晓亮对三款数据库:Greenplum、CockroachDB和TiDB 进行了相关场景的性能测试。下面,让我们来看一下测试结果。
此次性能测试场景分为OLTP的TPC-C和TPC-B测试以及简单的OLAP统计聚合场景(作为一款OLAP数据库,Greenplum对复杂场景支持优异,而大多数新兴HTAP数据库还不能很好的支持复杂场景,所以本测试只测试简单OLAP场景),所有测试都是通过186代理节点进行测试,CockroachDB(后文简称CRDB)和Greenplum使用相同的节点进行分段测试,由于是使用的虚拟机性能对三个分布式来说不会太高,废话不多说直接上测试数据,我们先看下整体的对比情况:
一、基础环境
1. 硬件环境:
2. 软件环境:
二、整体的OLTP测试情况对比
sysbench测试脚本是为PostgreSQL设计,其中用到了SELECT FOR UPDATE。Greenplum 6.x还不支持 SELECT FOR UPDATE,所以通过pgbench对Greenplum再进行一轮测试。(Greenplum 7将支持SELECT FOR UPDATE)
Greenplum 6.7.1pgbench测试,通过自己写的脚本实现的三个场景。
三、OLAP简单场景统计性能对比
t1、t2表各生成1亿记录:包含id、int类型、字符类型、时间类型、浮点型。由于TiDB和CRDB对复杂的统计分析场景支持不好(如窗口函数、CTE等),所以采取简单场景测试:
准备测试表:
CRDB
create table t1 (id int primary key, c1 float4, c2 text, c3 timestamp, c4 float4);
复制代码
TIDB
create table t1 (id int, c1 float, c2 text, c3 timestamp, c4 float);
复制代码
Greenplum
create table t1 (id int, c1 float, c2 text, c3 timestamp, c4 float);
复制代码
由于CRDB、TiDB一个事务中生成1亿记录未能完成(CRDB异常、TiDB异常缓慢),所以通过程序实现分段提交实现:
insert into t1 select id, random()*1000, md5(random()::text), clock_timestamp(), random()*1000 from generate_series(1,100000000) t(id);
复制代码
CRDB
20线程 每线程500万数据,双表同时写入,共耗时3200359毫秒。
按开始-结束时间统计单事务耗时:总耗时=单个事务提交*(2亿/1000/20),反推出单个事务提交320毫秒,这320包含了生成数据时间。程序逻辑:生成1000条数据 ->t1→t2。
按日志输出统计单事务耗时:
cat nohup.out |grep t1 |awk -F '1000条,耗时:' '{sum += $2} END {print "Average =",sum/NR}'
复制代码
Average = 225.017
cat nohup.out |grep t2 |awk -F '1000条,耗时:' '{sum += $2} END {print "Average =",sum/NR}'
复制代码
Average = 249.99
TIDB
cat nohup.out |grep t1 |awk -F '1000条,耗时:' '{sum += $2} END {print "Average =",sum/NR}'
复制代码
Average = 295.407
cat nohup.out |grep t2 |awk -F '1000条,耗时:' '{sum += $2} END {print "Average =",sum/NR}'
复制代码
Average = 350.562
由于CRDB主要针对OLTP优化,并不是一个真正意义上的HTAP数据库,下图我们将Greenplum与TiDB两款HTAP数据库OLAP性能数据进行对比。具体对比数据请参考上面的表格。
毫秒级的测试数据证明了Greenplum强大的OLAP性能
四、总结
综合来看Greenplum的OLAP能力卓越,OLTP场景支持的已经足够好。Greenplum在OLTP场景目前存在Master单节点的性能瓶颈,后续希望Greenplum做出突破。新型的HTAP分布式数据库,目前节点性能损耗还是比较严重的,HTAP 的优势应该是在节点足够多,能够成线性的增长,对特性这块的支持也是不尽相同,Greenplum是对原生关系型数据库支持特性好的(完全支持,如触发器需要单节点使用)。
相关文章
SQL数据库触发器语法详解 (sql数据库触发器语法)
2023-08-06
数据库
语法
触发器
快速简单的删除Oracle数据库字段方法 (删除oracl数据库字段)
2023-08-06
数据库
字段
删除
如何打开社工数据库bak文件 (社工数据库bak怎么打开)
2023-08-06
数据库
打开
社工
实现数据库按拼音排序的方法和技巧 (数据库按拼音排序)
2023-08-06
数据库
排序
按拼音
探究Sybase数据库的性能和功能特点 (sybase数据库怎么样)
2023-08-06
数据库
性能
探究
SQL Server 如何成功建立自己的数据库? (sql server 建立数据库)
2023-08-06
数据库
自己的
建立
如何在Oracle中查看数据库触发器? (oracle查看数据库触发器)
2023-08-06
数据库
查看
触发器
数据库表数据量千万级,对性能影响有多大? (数据库表千万级数据量多吗)
2023-08-06
数据库
级数
有多大
如何使用Oracle按时间导出表数据库? (oracle按时间导出表数据库)
2023-08-06
数据库
导出
如何使用
数据库存储:帖子长期保存,信息永不丢失 (帖子存数据库)
2023-08-06
数据库
丢失
帖子
小米六数据库:全方位数据保障和优化方案 (小米六数据库)
2023-08-05
数据库
优化
小米
简易教程:使用dbe数据库实现数据连接 (dbe数据库 数据连接)
2023-08-05
数据
数据库
连接
Oracle实现多个数据库链接的简便方法 (oracle链接多个数据库)
2023-08-05
数据库
多个
链接
数据库索引:用哪种方法建立? (数据库索引用什么建的)
2023-08-05
索引
数据库
哪种
实现高效缓存同步:Redis数据库技巧大全 (redis 数据库缓存同步)
2023-08-05
数据库
缓存
同步
如何利用数据库实现高效的模糊匹配查询? (数据库实现模糊查询)
2023-08-05
查询
数据库
模糊
数据库有哪些安装方式和位置? (数据库是装在什么上)
2023-08-05
数据库
位置
装在
Lactmed数据库:妈妈们必备的喂养指南 (lactmed 数据库)
2023-08-05
数据库
必备
喂养
数据库设计中的主属性定义及作用 (数据库主属性是什么)
2023-08-05
数据库
定义
属性
数据库分区操作不当常常造成分区不清的问题 (分区不清数据库)
2023-08-05
数据库
分区
不清