01
“寻找”适合医疗大数据特性的计算引擎
从数据应用角度来看,医疗大数据需要的技术支撑主要分为高效查询与高效计算。数据并发量、一次性数据计算的量级以及数据实时性要求,是选择大数据平台计算引擎时需要考虑的重点因素。其中,不同医疗业务场景对大数据计算引擎的性能需求见表1:
表1 不同医疗业务场景对大数据计算引擎的性能需求
目前业内主流的OLAP引擎包括ClickHouse、Druid、Kylin、Presto等引擎。从技术的角度来看,我们从技术特点、性能、易用性、运维成本等维度对多个OLAP引擎进行了对比,详见表2。
表2 不同OLAP引擎的对比分析
由上表可见,Doris引擎不仅具有高易用性,能够满足多场景的数据应用,还具有技术融合成本低、运维成本低等优点。相对其他OLAP引擎,缺点主要是应用不广泛。因此,在医疗业务场景中,根据医疗大数据特性来遴选最为合适的OLAP引擎技术为Doris。
在此基础上,惠每科技根据Doris引擎特点,结合医院实际业务数据需求,从数据模型的设计层面进行了优化,可满足不同量级的多表查询使用需求,具体性能表现如表3所示。例如,医院统计近三年门诊诊断中出现率Top10的主诊断名称及每个诊断的就诊人次(诊断表1200万),基于Doris引擎查询仅需0.8秒。
表3 Doris引擎在多表查询场景的性能表现(单位:秒)
02
5个技术特点,成就Doris引擎的“快”
其一:MPP分布式执行框架
Doris采用MPP(Massively Parallel Processing)分布式执行框架。在MPP执行框架中,一条查询请求会被拆分成多个物理计算单元,在多机并行执行。每个执行节点拥有独享的资源(CPU、内存)。MPP执行框架能够使单个查询请求充分利用所有执行节点的资源,所以单个查询的性能可以随着集群的水平扩展而不断提升。
其二:全面向量化执行引擎
Doris通过实现全面向量化引擎,充分发挥了CPU的处理能力。全面向量化引擎按照列式的方式组织和处理数据。Doris的数据存储、内存中数据的组织方式,以及SQL算子的计算方式,都是列式实现的。按列的数据组织会更加充分的利用CPU的Cache,按列计算也会有更少的虚函数调用以及更少的分支判断从而获得更加充分的CPU指令流水。Doris的全面向量化引擎通过向量化算法充分的利用CPU提供的SIMD指令,这样Doris可以用更少的指令数目,完成更多的数据操作。
其三:CBO 优化器
Doris实现了一款全新的,基于代价的优化器CBO(Cost Based Optimizer),该优化器是Cascades Like的。在设计时,针对Doris的全面向量化执行引擎进行了深度定制,并进行了多项优化和创新。该优化器内部实现了公共表达式复用,相关子查询重写,Lateral Join、Join Reorder、Join 分布式执行策略选择,低基数字典优化等重要功能和优化。目前,该优化器已可以完整支持 TPC-DS 99 条SQL语句。
其四:可实时更新的列式存储引擎
Doris采用了列式存储引擎,数据以按列的方式进行存储。通过这样的方式,相同类型的数据连续存放。一方面,数据可以使用更加高效的编码方式,获得更高的压缩比,降低存储成本。另一方面,也降低了系统读取数据的IO总量,提升了查询性能。此外,在大部分OLAP场景中,查询只会涉及部分列。相对于行存,列存只需要读取部分列的数据,能够极大地降低磁盘IO吞吐。同时Doris能够支持秒级的导入延迟,提供准实时的服务能力。Doris的存储引擎在数据导入时能够保证每一次操作的ACID。
其五:智能的物化视图
Doris支持用户使用物化视图进行查询加速。不同于一些同类产品的物化视图需要异步和原表做数据同步,Doris的物化视图可以自动根据原始表更新数据。只要原始表数据发生变更,物化视图的更新也同步完成,不需要额外的维护操作就可以保证物化视图能够维持与原表一致。
不仅如此,物化视图的选择也是自动进行的。Doris在进行查询规划时,如果有合适的物化视图能够加速查询,那么Doris能够自动的将查询改写,使用合适的物化视图来加速用户的查询请求。
综上,根据医疗大数据的特性需求,利用技术手段有针对性地提升计算引擎性能,再回到不同的医疗业务场景中不断优化、改进,最终实现医疗大数据平台“越来越快”,更高效的支持医院业务发展。
成为我们的
合作伙伴