关注飞总聊IT,了解IT行业的方方面面。
去年腾讯云数据库TDSQL打破了TPC-C的世界纪录。时隔一年,TDSQL又打破了TPC-DS的世界纪录。这速度让飞总很吃惊。
TDSQL是腾讯云下面的数据库产品。这是一款具备金融级一致性,高可用,分布式等特征的分布式数据库,不仅仅支撑了腾讯内部的业务,在很多大银行的核心业务上都有应用。
飞总和TDSQL团队有过接触,对他们的技术水平是非常的佩服,对TDSQL的产品质量和可靠性也没什么疑问。特别是去年这款产品打破了TPC-C世界纪录更是实打实的业绩。
此次打榜,腾讯云数据库TDSQL打分是性能7260万QphDs 和性价比37.52元/kQphDs,比原来的世界纪录保持者分别强了282%和省了37%,可谓是非常好的成绩。
我们平时说的TPC-C, TPC-H,TPC-DS,其实都是TPC(Transaction Processing Performance Council)下面针对数据库性能的不同测试标准。
这些标准里面有的现在还在用,有的已经被更新的标准给取代了。
目前在用的测试标准中,主要有针对OLTP(Online Transaction Processing)的TPC-C和针对OLAP(Online Analytical Processing的TPC-H, TPC-DS。
OLTP的查询,通常是指对数据库内的某些特定数据进行事务更新的查询。所以TPC-C测试特点是短时间内有大量并发的更新。
OLAP的查询,通常是指对数据库内若干表某个时间段内的汇总分类等复杂查询。目前先后有两个测试TPC-H和TPC-DS。其特点是测试会有不少复杂查询,每个复杂查询会涉及到很多的数据。TPC-DS作为比TPC-H更新的测试,其查询尤其复杂。
TPC-DS模拟的是一家大型零售商的数据。在TPC-DS的测试数据中,有很多大量销售数据。针对这些销售数据,有99个非常复杂的SQL查询。
举个例子,比如说让统计过去半年该零售商里面销售额最低的商品有哪些。有写SQL经验的人就知道这个SQL不是太简单了,懂OLAP引擎的人也知道,这查询执行起来会涉及大量数据,非常的不容易了。
我曾经看过这些查询,它们覆盖了SQL的方方面面,对数据库引擎,尤其是优化器的各个方面都有非常全面的覆盖。
TPC-DS的测试大体上涉及了如下4部分:数据导入,复杂SQL串行执行,复杂SQL并行执行,数据变更。
具体来说,首先是做ETL,腾讯云数据库TDSQL此次跑分的是10TB的规模,所以导入10TB数据。
然后就是系统要跑99个复杂SQL,一个接一个的串行跑一遍。
再接下来就是并行跑99个复杂SQL,做4个并发同时跑,并且在跑99个复杂查询的过程中,还要做数据变更。
我想说到这里,大家应该可以理解这个测试的复杂程度了。
一个数据库引擎,比如说腾讯云数据库TDSQL,要想在这样的测试中打榜登顶,需要做好方方面面的技术优化。
腾讯云数据库TDSQL能取得世界第一的成绩,主要是做对了下面几个方面的事情。
首先,一个数据库的查询引擎能够执行查询,体现在其对CPU单核性能的利用率。单核极致性能的使用,不仅仅体现在对每个CPU的占用率上,还要把最新的CPU里面的所有模块和组件都用起来。
我举一个简单的例子。新的CPU都有在一条指令同时处理多个数据的能力,这个我们通常被称为vectorization。能够同时处理多个数据,就可以加快查询的执行。
但是这种能力,是需要代码配合的。首先,我们需要一个column store,这样才能够方便同时有效读进同一个列的多个数据。如果不用column store的话,在当前计算机的架构下,从内存到各级别的cache,都会有miss的问题,更不用说在处理器里面同时处理多个数据了。
同时,我们还需要一个vectorized engine,只有特定编码的引擎才能够达到这样的效果,随便写写的代码是无法利用起新CPU里面的所有模块和组件,榨干最后一点CPU性能的。
而TDSQL数据库,不但自研了column store,也开发了自己的vectorized engine,所以才能够高效率的榨干CPU,实现单核极致性能。
其次,一个好的数据库查询引擎,在今天摩尔定律失效,多核CPU架构盛行的年代还需要解决如何在CPU多核之间资源分配的问题。
这个问题说难不难,说容易也不容易,其核心在于数据库的查询引擎的并行执行框架到底做得有多好,一个好的并行执行框架,是可以把资源优先分配给正在执行任务的计算分片,从而解决并行进程之间的阻塞依赖。
而腾讯云TDSQL自研的并行执行框架,很好地解决了并行进程之间的阻塞依赖,消除了一些进程等待另外一些进程从而导致的CPU闲置问题。
最后,TDSQL是一个分布式数据库系统,而分布式数据库系统,通常都采用MPP的执行框架。MPP里面的数据传输方式又有经典的Volcano Style引擎采用的方式,和现代列存数据仓库包括C-Store和Monet DB/X100等引擎采用的方式。
前者的特点是在整个分布式执行过程中,每个节点自顶向下的要数据。后者的特点是自底向上的给数据。
在单核性能拉满,并行进程之间阻塞依赖消除的前提下,显然后者的效率要远远高于前者。TDSQL自研的MPP引擎也是通过给自底向上给数据的方式实现的。
TDSQL自研的MPP引擎通过把查询分片充分解耦,来让分片之间的拉通和配合更加高效,从而进一步提高了OLAP查询的执行速度。
这三方面技术的综合,是腾讯云数据库TDSQL能够登顶TPC-DS世界榜首的原因。
可能还有读者会疑问,为什么腾讯云数据库TDSQL打榜TPC-DS 10TB的数据集,而没有去打榜规模更大的100TB数据集。
熟悉榜单的应该知道,目前100TB数据集的世界纪录保持者是Databricks。这是一家大数据公司。
从TDSQL的实际客户需求来看,在OLTP+OLAP的客户需求下,用户的数据量在10TB以内就已经满足需求了。而100TB以上的,更多就是大数据或者纯数仓的需求了,这就不是目前TDSQL这款数据库的客户需要解决的问题了。
TDSQL是通过给大量用户做POC或者拿下很多客户,并且在这个过程中不断优化数据库引擎的能力,来取得成绩的,然后顺着这些优化打榜了TPC-DS,而不是为了打榜而打榜。所以TDSQL团队选择了打榜10TB。
自从TDSQL打榜TPC-DS世界第一的消息传出来了,我认识的很多做数据库的人也都在热烈讨论这个事情。其中有一个业内资深做数仓的人士就这样评价,说这是一个非常优秀的数据库引擎。这也是飞总的结论。TDSQL是一款非常优秀的数据库引擎。