基于MPP:
shared nothing架构,主机、操作系统、内存、存储都是自我控制的,不存在共享,每个节点都是一个单独的数据库。节点之间的信息交互是通过节点网络实现。数据分不到多个节点来实现规模数据的存储,通过并行查询来提高查询性能。
MPP特征:任务并行执行,数据分布式存储,分布式计算,私有资源,横向水平扩展,shared nothing。
MPP典型:gp,presto,impala,sparksql,drill等,有很好的数据量和灵活性支持,但是对响应时间是没有保证的,当数据量和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。
基于搜索引擎:
elasticsearch,solr等,在数据入库时,姜数据转化为倒排索引,采用scatter-gather 计算模型,牺牲灵活性获取很好的查询性能,在搜索类查询上能做到亚秒级响应,但是对于扫描聚合为主的查询,随着处理数据量的增加,响应退化到分钟级。
基于预处理:
druid、kylin 在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。
presto、druid、sparkSQL、kylin可以分为三类。其中presto和spark sql都是解决分布式查询问题,提供SQL查询能力,但数据加载不一定能保证实时。Druid是保证数据实时写入,但查询上不支持SQL,或者说目前只支持部分SQL,我个人觉得适合用于工业大数据,比如一堆传感器实时写数据的场景。Kylin是MOLAP,就是将数据先进行预聚合,然后把多维查询变成了key-value查询。
从成熟度来讲:kylin>spark sql>Druid>presto
从超大数据的查询效率来看:Druid>kylin>presto>spark sql
从支持的数据源种类来讲:presto>spark sql>kylin>Druid