1.6 与其他开源产品的比较
与Apache Kylin一样致力于解决大数据查询问题的其他开源产品也有不少,比如Apache Drill、Apache Impala、Druid、Hive、Presto、SparkSQL等。本节将Apache Kylin与它们做一个简单的比较。
从底层技术的角度来看,这些开源产品有很大的共性,一些底层技术几乎被所有的产品一致采用,Apache Kylin也不例外。
●大规模并行处理(MPP):可以通过增加机器的方式来扩容处理速度,在相同的时间内处理更多的数据。
●列式存储:通过按列存储提高单位时间内数据的I/O吞吐率,还能跳过不需要访问的列。
●索引:利用索引配合查询条件,可以迅速跳过不符合查询条件的数据块,仅扫描需要扫描的数据内容。
●压缩:压缩数据然后存储,使得存储的密度更高,在有限的I/O速率下,在单位时间内读取更多的记录。
我们注意到,所有这些方法都只是提高了单位时间内计算机处理数据的能力,当大家都采用这些技术时,彼此之间的区别将只停留在实现层面的代码细节上。最重要的是,这些技术都不会改变一个事实,那就是处理时间与数据量之间的正比例关系。
当数据量翻倍,在不扩容的前提下,MPP需要两倍的时间来完成计算;列式存储需要两倍的存储空间;索引下符合条件的记录数也会翻倍;压缩后的数据大小也是之前的两倍。因此,查询速度也会随之变成之前的一半。当数据量十倍百倍地增加时,这些技术的查询速度就会十倍百倍地下降,最终无法完成查询。
Apache Kylin的特色在于,在上述底层技术之外,另辟蹊径地使用了独特的Cube预计算技术。预计算事先将数据按维度组合进行了聚合,将结果保存为物化视图。经过聚合,物化视图的规模就只由维度的基数决定,而不再随数据量的增加呈线性增长。以电商为例,如果业务扩张,交易量增加了10倍,只要交易数据的维度不变(供应商/商品种类数量不变),聚合后的物化视图依旧是原先的大小,查询的速度也将保持不变。
与同类产品相比,这一底层技术的区别使得Apache Kylin从外在功能上呈现出不同的特性,具体如下:
●SQL接口:除了Druid以外,所有的产品都支持SQL或类SQL接口。巧合的是,Druid也是除了Apache Kylin以外,相对查询性能最好的一个。这除了归功于Druid有自己的存储引擎之外,也可能得益于其较为受限的查询能力。
●大数据支持:大多数产品的查询能力在亿级到十亿级之间,更大的数据量将显著降低其查询性能。而Apache Kylin因为采用预计算技术,其查询速度不受数据量限制。有实际案例证明,在数据量达千亿级别时,Apache Kylin系统仍然能保持秒级别的查询性能。
●查询速度:如前所述,一般产品的查询速度都不可避免地随数据量的增加而下降。而Apache Kylin则更能够在数据量成倍增加的同时保持查询速度不变。而且这个差距将随着数据量的成倍增加而变得愈加明显。
●吞吐率:根据之前的实验数据,Apache Kylin的单服务器吞吐量一般在每秒70~150个查询,并且可以线性扩展。而普通的产品因为所有计算都在查询时完成,所以需要调动集群更多的资源才能完成查询,通常极限在每秒20个查询左右,而且扩容成本较高,需要扩展整个集群。相对地,Apache Kylin系统因其“瓶颈”不在于整个集群,而在于Apache Kylin服务器,因此只需要增加Apache Kylin服务器就能成倍提高吞吐率,扩容成本低廉。