1.6 与其他开源产品比较


与Apache Kylin一样致力于解决大数据查询问题的其他开源产品也有不少,比如Apache Drill、Apache Impala、Druid、Hive、Presto(Facebook)、SparkSQL等。本节试图将Kylin与它们做一个简单的比较。

从底层技术的角度来看,这些开源产品有很大的共性,一些底层技术几乎被所有的产品一致采用,Kylin也不例外。

大规模并行处理:可以通过增加机器的方式来扩容处理速度,在相同的时间里处理更多的数据。

列式存储:通过按列存储提高单位时间里数据的I/O吞吐率,还能跳过不需要访问的列。

索引:利用索引配合查询条件,可以迅速跳过不符合条件的数据块,仅扫描需要扫描的数据内容。

压缩:压缩数据然后存储,使得存储的密度更高,在有限的I/O速率下,在单位时间里读取更多的记录。

综上所述,我们可以注意到,所有这些方法都只是提高了单位时间内处理数据的能力,当大家都一致采用这些技术时,它们之间的区别将只停留在实现层面的代码细节上。最重要的是,这些技术都不会改变一个事实,那就是处理时间与数据量之间的正比例关系。当数据量翻倍时,MPP(在不扩容的前提下)需要翻倍的时间来完成计算;列式存储需要翻倍的存储空间;索引下符合条件的记录数也会翻倍;压缩后的数据大小也还是之前的两倍。因此查询速度也会随之变成之前的两倍。当数据量成十倍百倍地增长时,这些技术的查询速度就会成十倍百倍地下降,最终变得不能接受。

Apache Kylin的特色在于,在上述的底层技术之外,另辟蹊径地使用了独特的Cube预计算技术。预计算事先将数据按维度组合进行了聚合,将结果保存为物化视图。经过聚合,物化视图的规模就只由维度的基数来决定,而不再随着数据量的增长呈线性增长。以电商为例,如果业务扩张,交易量增长了10倍,只要交易数据的维度不变(供应商/商品数量不变),聚合后的物化视图将依旧是原先的大小,查询的速度也将保持不变。

与那些类似产品相比,这一底层技术的区别使得Kylin从外在功能上呈现出了不同的特性,具体如下。

SQL接口:除了Druid以外,所有的产品都支持SQL或类SQL接口。巧合的是,Druid也是除了Kylin以外,查询性能相对更好的一个。这点除了Druid有自己的存储引擎之外,可能还得益于其较为受限的查询能力。

大数据支持:大多数产品的能力在亿级到十亿级数据量之间,再大的数据量将显著降低查询的性能。而Kylin因为采用预计算技术,因此查询速度不受数据量限制。有实际案例证明数据量在千亿级别时,Kylin系统仍然能够保有秒级别的查询性能。

查询速度:如前文所述,一般产品的查询速度都会不可避免地随着数据量的增长而下降,而Kylin则能够在数据量成倍增长的同时,查询速度保持不变,而且这个差距也将随着数据量的成倍增长而变得愈加明显。

吞吐率:根据之前的实验数据,Kylin的单例吞吐量一般在每秒70个查询左右,并且可以线性扩展,而普通的产品因为所有计算都在查询时完成,所以需要调动集群的更多资源才能完成查询,通常极限在每秒20个查询左右,而且扩容成本较高,需要扩展整个集群。相对的,Kylin系统因为瓶颈不在整个集群,而在于Kylin服务器,因此只需要增加Kylin服务器就能成倍地提高吞吐率,扩容成本低廉。