最近有一个项目,需要给一家证券公司做用户画像系统,但是因为数据量很大,传统数据库难以承担,而且传统数据库也不擅长做分析(都需要在业务代码里实现,会造成开发量很大,而且维护很困难)。
原来的想法
原来的想法是在ES和ClickHouse中选择:
- ES:这个我们比较熟悉,很多场景都有使用,但是ES本身比较擅长的领域为文本索引,及实现一些简单的统计。ES在统计时,在一些场景下(例如计算客户数)为了提升性能,直接采用的是估算的算法,这在金融领域上可能会存在风险;
- ClickHouse:这个目前我们还没有使用过,不过早有耳闻,统计分析性能很突出。
本来对ClickHouse寄予重望的,不过今天听同事的试用汇报,发现ClickHouse的运维复杂成本很高,而运维的复杂很容易会使得项目成为一个大坑。ES虽然不兼容SQL语法,学习成本比较高,但是运维简单,这就是最大的优势。
重新评估
我们不能不重新考虑ClickHouse是否适合我们了,如果要重新选择,那我们是选择ES,还是Mysql,还是其他,例如TiDB?
Mysql如果不是没有选择,显然是不会选择的,这会给开发造成很大的工作量。TiDB这个数据库也是早有耳闻,近几年崛起得很快,只是没有用过,据说是NewSQL型数据库,能兼顾传统SQL和NoSQL的需求,分析的性能也不错,相对于传统数据库有数量级的提升,网上很多测评数据也可以支持这个观点。还有个大优势,就是TiDB运维简单,不过在统计分析上的性能还是比ClickHouse差很多的。
在网上搜索相关信息过程中,还发现了一个Apache Doris的数据库,美团的技术团队有过一个对比:
来源:https://tech.meituan.com/2020/04/09/doris-in-meituan-waimai.html
这里有几个指标是我比较看重的:
- 运维成本:成本高则很容易给项目运维留下大坑;
- 易用性:如果不支持SQL的话,学习成本就会变得比较高
- 成熟度:成熟度不够的话,项目可能也容易留下大坑
- 性能是否满足:性能其实并不是最重要的考虑
前面三个指标是重点需要考虑的。Doris的成熟度确实不太够,不过估计问题不是太大。从这点看,TiDB倒是挺合适的。
Doris的优势:
来源:http://doris.apache.org/master/zh-CN/
Doris on Elasticsearch
网上也有ES和TiDB的对比:
来源:https://www.sohu.com/a/361073246_315839
据说现在Doris已经支持使用ES作为底层的存储引擎,使用ES的倒排索引功能。同时因为Elasticsearch本身在支持分布式的查询方面不是特别的友好,因为它缺少一个很良好的分布式的查询框架,所以我们就想把他们两个的功能结合起来,去用到一个Impala里面,这样可以结合两者的优势。
如果能结合这两者的优势,这会是相当不错的主意,看好Doris。
相关文档:
- 官网:http://doris.apache.org/master/zh-CN/
- 源码:https://github.com/apache/incubator-doris
- Apache Doris在美团外卖数仓中的应用实践
- 基于Doris构建的小程序私域流量增长:https://blog.csdn.net/weixin_47452131/article/details/113393764
- Apache Doris 在 WeLab实时大数据平台的应用实践:https://zhuanlan.zhihu.com/p/257183139
- Apache Doris:基于 MPP 的交互式SQL数据仓库,可用于 OLAP:https://www.sohu.com/a/361073246_315839