北京it爷们儿老贾
儿童节OceanBase宣布开源,开源世界又多了一个小伙伴儿。之前也有听闻OceanBase TPC-H 打榜的消息,很震撼,也很想亲自动手跑一下结果验证一下。随着OceanBase的开源,身边的朋友也一直跟我打听OB 与 TiDB 的差异。其实从架构设计到功能再到性能,这两款主流的分布式数据库还是有不少的差异,由于精力有限,今天先从 TPC-H 性能的角度入手做个对比测试。
- OceanBase 测试环境
- 版本:OceanBase V3.1.0
- 硬件配置:
- 数据量:
- 开始时使用 100G 数据,遇到疑似数据损坏 OB 集群无法启动的情况:
- Q4 长时间执行导致一个 OBServer 进程退出,重启集群无法恢复。 日志如下:
2.导入 100GB 数据之后做冷备份,启动集群报内存不足的错误,清理 Linux 系统 page cache 之后依然无法启动。
- 翻阅 OB 官网发现有 10G 数据的 benchmark,最后决定采用 10G 数据,正好与官网披露的性能做个对比。(OB 官网 10G 数据 TPC-H 性能测试报告链接)
- 测试方法:调用 obclient 或者 MySQL 客户端执行 TPC-H 的 22条 查询语句, 一共跑两轮,第一轮为预热,采用第二轮的数据作为测试结果。
上图从 22 个 SQL 执行所花费的时间来看,这轮测试的结果明显优于 OB 官网发布的 benchmark,接近一半的指标都有 50% 左右的提升。OB 官网的测试采用了阿里云的 ECS,这次测试的硬件配置更胜一筹,跑出这样的结果也是有些小惊喜。
作为同样业界闻名的分布式HTAP数据库TiDB的性能表现如何呢?好奇心驱使下决定折腾一下TiDB 的 TiFlash 列存引擎用同样的硬件配置和数据量来测一下 TiDB 的 TPC-H 指标。
TiDB 测试环境
- 版本: v5.0.1(支持 MPP)
- 硬件复用 OB 测试所用的四台服务器,其中三台部署为 TiFlash 节点,另外一台混合部署 PD、TiDB 和 TiKV。
- 数据量和测试方法与 OB 测试相同。
从上图的测试数据来看:TiDB TiFlash 启动 MPP 的情况下,所有 22 个 SQL 查询的响应时间都要好于OB ,所有 TPC-H 指标的性能都在 OB 的两倍以上,其中 query 7 更是达到了将近 10 倍。
总结和思考
- 没有对比就没有伤害,OB 开源版本的 OLAP 性能和TiDB 的 列存引擎对比起来还有不足
从这次测试的结果看,目前开源的 V3.1.0 版本 TPC-H 性能各项指标均不如 TiDB,个人猜想原因可能有二:开源版本与打榜 TPC-H 的版本可能存在一定的差异性;调优方面也许专业的OB DBA会有一些方法我们不知道。企业版没玩儿过,咱不妄加评论。
- 测试过程的体验不太顺畅
第一次下载和部署 OB,整个测试体验的过程不太流畅。一方面,头一次部署工具的熟悉程度不够,也从侧面说明部署工具的导航性有待加强;另一方面,过程中遇到问题,也无法找到相应的官方文档进行调优。
- 使用TPC-C/TPC-H 评估 HTAP并不恰当,难免偏颇
这次测试用到的 TPC-H 通常被用来衡量 OLAP 的性能,目前分布式数据库领域,大家都在热议的 HTAP(同时跑 OLTP 和 OLAP 的混合负载),显然不能用单一的 TPC-C 或者 TPC-H 指标来衡量。
CH-benCHmark 是目前学术界广泛用来评估混合负载的基准测试模型。(CHbenCHmark官网 )计划下次有时间,设计一个混合负载的场景,用 CH-benCHmark 来对比一下 OB 和 TiDB 在 HTAP 场景下真实的性能表现。
后记
笔者是个多年混迹DB圈儿的老家伙,6年职业DBA,从业20年大部分工作是与数据和数据库打交道。老实说认识 OceanBase 比 TiDB 要早,OceanBase 第一次开源的时候我还在一家传统软件公司为金融行业客户提供解决方案。本想试一下这个传说中的神器,由于项目原因一直没时间,结果等有工夫的时候,OceanBase 从 github 上消失了。好像一个大家闺秀,惊鸿一瞥后又深藏闺中。所以这次一开源便尽早入手测试,颇有一种再遇女神赶紧搭讪的感觉,希望这次她能在俗世间呆的久一些。测试期间时不时出些小状况,给人的感觉是这姑娘系出名门,标志的很,不过性格好像不太好,时不时爆出点儿“error”,不过这也许是因为初次接触了解不够所致。至于本次测试报告,各位看官可以看做是专业票友的一次玩儿票,专业但不权威。数字是冷冰冰的,我更想谈谈我对OB和Tidb的一些主观感受。其实 OceanBase 这次开源让我想起了操作系统软件中的两个明星产品 Solaris 和 Linux。产品的先发优势由技术先发优势和市场先发优势组成。在200X年 Solaris 无疑具备技术先发优势和商业市场先发优势,但是在开源市场Linux先发优势和社区活跃度已根深蒂固。再来聊聊 OceanBase 和 TiDB 的开发技术栈。OB的技术栈是C++,TiDB的技术栈是 golang 和 rust,从我个人来讲更喜欢后者。除去各种语言特性以及开发效率和运行效率的权衡以外,新生语言更让人有探索的欲望。其实两个同领域的技术更喜欢哪一个是个很主观的问题。Oracle是当之无愧的数据库王者,我想这一点没人反对,随着开源软件的发展,陆续冒出来各种类型的数据库,不过这么多年过去了,你大爷还是你大爷。但是为啥国内一直嚷嚷着去O?除去中美关系和经济因素不谈,有时候仅仅就是因为审美疲劳了。开源社区里的NewSql玩儿家多了是好事儿,但贵在坚持。