Apache Druid是一个分布式的,支持多维度实时在线OLAP分析的大数据处理系统。在部分的企业里面,关于大数据实时查询分析的场景里面都有用到这里的Apache Druid。所以这里我们写一个系列的文章,简单的介绍下Apache Druid。
前置说明
1、这里的Druid指的是Apache Druid数据处理系统,不是阿里巴巴的数据库连接池druid,一定要区分好。 2、是否采用Druid根据实际情况来使用,但是个人建议可以往更好的框架上进行迁移,例如:离线的doris,在线的HATP相关的newsql。
Apache Druid在我的理解里面,他是一个时序数据库。由于他本身是列式存储,很适合OLAP场景。目前几乎所有的OLAP存储引擎,使用的都是列式的存储结构。
Apache Druid的主要特点有:
1、列式存储 2、可扩展的分布式架构 3、支持并行计算 4、支持实时或者批量读取数据 5、集群自动平衡,方便运维 6、对数据进行预聚合或预计算 7、bitmap索引快速过滤 8、基于时间的分区
当然我们还是要注意下Apache Druid的一些不足之处:
1、有限的join能力(右侧的表都会自动存放内存再做关联) 2、不支持多时间维度,所有维度为String类型 3、只支持流式写入,不支持实时数据更新,更新可以使用批处理作业完成。 4、不支持精准去重
所以我们在使用Apache Druid的时候要注意几个原则:
1、尽量在原表或者ELT的过程中形成大而宽的表数据,因为后期在Druid上进行更新是个比较棘手的事情。 2、如果场景有join的需求,并且这个join的数据比较大的话,那么尽量在ELT过程中完成join,最后形成join后的大宽表,在业务查询的时候就没有join了。 3、如果涉及到去重统计的话,如果数据量小的情况下不会有问题,但是数据量比较大的时候会不精准(例如我们采集用户的浏览日志,每天10亿+,统计去重是不精准的),所以如果在一些无关精要的情况下进行去重可以考虑Druid,如果对数据准确性要求比较高,则不适合在druid里面进行统计。
还没有评论,来说两句吧...