citus 和 greenplum 实施对比和相关问题总结
citus 和 greenplum 均是分布式数据库中的解决方案。
二者均是基于postgresql,前者是插件式二次开发,后者是基于内核侵入式的二次开发。
架构上没有深入研究,不做过多分析,这里只对实施过程中遇到的问题做总结和梳理。
以下均是个人总结,不一定完全准确,仅做参考。
对比版本:pg12.3 + citus 9.2.2 ,gp 6.20.3 (pg内核 9.4.26)
1、work ,分片 与 segment
citus :有worker 概念,分片概念,默认32分片,不同节点上不同分片,可并发执行,提升效率。 gp:Segment 类似
woker的概念,因为gp没有分片的概念,所以一般一个子节点机器上,根据机器硬件资源,要运行2-8个segment才能发挥出gp的性能。如果一个机器只部署一个segment,可能会遇到和citus性能相差一个数量级的情况。
详见:http://docs-cn.greenplum.org/v6/admin_guide/intro/arch_overview.html
2、函数的优化
citus 和 gp对于函数的优化都不好,对master上的请求,会将函数直接下发给各个子节点执行。
如果函数逻辑中存在,分布表和参考表的联合查询的场景,那么函数的执行效率会很不好。
将函数逻辑改为纯SQL执行,那么性能会有两个数量级以上的提升(citus和gp均是如此)。对于一般的运算函数,不存在此问题。
所以遇到此场景的问题,我们就需要分析业务需求,看选择合适的处理方式,封装函数 or 直接SQL?