PrestoDB和PrestoSQL比较及选择

Presto 社区分家后搞了2个项目,分别为 PrestoDB 和 PrestoSQL,同时他们都成立了自己的基金会。而去年国庆时候,abei写了篇文章比对了2个分支的进展,链接见:PrestoDB VS PrestoSQL发展比较。 而现在已经分家17个月了,那我们简单梳理下这2个分支的主要核心功能:

PrestoDB:

  • Connector:ElasticSearch 及 Druid
  • Master 和Worker 通信协议支持二进制
  • Orc 及 Parquet读写性能优化
  • Hive写数据支持指定压缩格式
  • task通信协议可以指定 thrift
  • spi pushdown
  • MapReduce-style shuffle,支持部分 etl 任务及大查询
  • fix bug 及 improve performace

PrestoSQL:

  • Connector:ElasticSearch和MemSQL
  • spi pushdown
  • S3优化读取
  • join 延时物化
  • 大量的 fix bug 及 improve performance

从以上功能实现可以看到,PrestoDB更符合我对Presto未来的定位:

  • 支持大集群
  • 提高并发能力
  • 减少指定场景的查询耗时,比如ORC
  • 下推能力存储计算分离,比如agg扔到存储层去做(2个分支都有)

除了以上功能外,PrestoDB还有其他优点:

  • 核心功能会有技术文章输出
  • issue里技术实现和细节比较全
  • 基金会里包含Facebook、阿里巴巴、twitter及Uber,有场景支持和实践,目前twitter员工很活跃
  • 老的PrestoDB版本升级简单
  • PrestoDB代码质量比PrestoSQL要好,PrestoSQL有些地方代码改的有些混乱
  • wiki和文章排版很舒服,PrestoSQL Blog也没有任何技术输出

PrestoDB缺点:

  • 主要是Facebook员工维护,Facebook的文化迫使他们员工没有办法花时间在社区上
  • 社区活跃度不如PrestoSQL
  • Release Notes 上的改动没有对应的issue链接

19年我经常在slack上与PrestoSQL社区的人打交道,别人问我选择版本时候,我都是建议选择PrestoSQL,但是目前我有了不同的想法,如果说只是使用Presto,2个分支其实都无所谓,如果说公司体量较大,会有不少二次开发,我认为PrestoDB做的事情和提供的能力更符合国内很多公司的需求,比如让Presto即要支持ad-hoc,又要支持etl(听说目前Facebook就在这么搞),以及很多实时需求等等。

2020.5.20补充:

我们决定升级到PrestoSQL最新版本了(333),原因是:

  • 社区活跃度
  • PrestoDB主要主力还是Facebook维护,不可控,且有概率被C++重写
  • PrestoDB未来方向主要是ETL相关的,我们有Spark兜底,ETL功能靠Spark、Hive就好了