下面是Presto、Impala这两种典型的内存数据库的简单测试比较,当然这种内存数据库类似的还有spark sql,这种数据库在大数据量,多表关联查询时,会展现出自己的优势,下面是一组impala和presto的性能对比图:
环境准备:1台32G内存、2台16G内存,没有完全把内存配置饱和
测试数据:hive中3张2000W数据量的表
集群:impala和presro部署在3台机器上
presto版本:presto-server-0.191 (presto安装:http://blog.csdn.net/u012551524/article/details/79013194)
impala版本:2.8.0-cdh5.11.0
1、单表的聚合操作
Presto:count
1s(presto目前只精确到整数,所以小于1s也是显示1s)
Impala:count
![](https://i-blog.csdnimg.cn/blog_migrate/e0a1b5061d4d17c5ed2900cb35ce2d25.png)
0.24s
Presto:count、distinct
取了3次,分别是:4、3、3 (s)
Impala:count、distinct
![](https://i-blog.csdnimg.cn/blog_migrate/36b5e0ecfed5a8c8b03920d7e0eaea4d.png)
取了3次:0.74、0.75、0.76(s)
2、单值查询
Presto :查询一个ID的记录
![](https://i-blog.csdnimg.cn/blog_migrate/02cccbb49e8d739d7bdc93453b6d8482.png)
3次:6、5、6(s)
Impala:
![](https://i-blog.csdnimg.cn/blog_migrate/a9da7706ae99c37c550f6396b8cf9bf5.png)
3次都在1.7s左右
3、两表关联(2张2000W的表做join)
Presto:
![](https://i-blog.csdnimg.cn/blog_migrate/b53228d6c03f191b5fac15ca1b432e07.png)
3次结果:9、11、9
Impala:
3次结果在7s左右
4、3表关联(3张2000W的表做join)
Presto:
![](https://i-blog.csdnimg.cn/blog_migrate/bf6ebe2f281ca5de7af4c598fb2ddd3e.png)
4次结果:13、11、15、12(s)
Impala:
3次结果在8.9s左右
总结:这是一些场景下的查询效率的比较,数据量不是很大,但是能看出一些问题,他们的共同点就是吃内存,当然在内存充足的情况下,并且有规模适当的集群,性能应该会更可观,从上图可以看出Impala性能稍领先于presto,但是presto在数据源支持上非常丰富,包括hive、图数据库、传统关系型数据库、Redis等
缺点:这两种对hbase支持的都不好,presto 不支持,但是对hdfs、hive兼容性很好,其实这也是顺理成章的,所以数据源的处理很重要,针对hbase的二级索引查询可以用phoenix,效果也不错
【转自 https://blog.csdn.net/u012551524/article/details/79124532】