问题描述
我正在尝试评估 Citus 和 Greenplum 将它们用作数据仓库的情况。总体思路是,来自多个 OLTP 系统的数据将通过 Kafka Connect 实时集成到中央仓库中以进行分析查询。
在这方面,Citus 与 Greenplum 相比如何?我读过 Citus 有一些 sql 限制,例如如果相关性不在分布列上,则不支持相关子查询,Greenplum 是否有类似的 sql 限制?如果数据被流式传输到 Greenplum 中(而不是批量更新),Greenplum 能正常工作吗?我只是觉得 Greenplum 更侧重于分析,可以牺牲一些特定于 OLTP 的东西,这是 Citus 无法承受的,因为他们将自己定位为 HTAP(而不是 OLAP)。 Citus 还将自己定位为亚秒查询时间的解决方案,这对于我的用例来说不是必需的 - 每个查询几秒(最多 5 秒)就可以了。
解决方法
我不知道 Greenplum 有任何 SQL 限制,就像你上面提到的那样。在某些情况下,即 CUBE
或 percentile_*
窗口函数(有序集合聚合函数) GPORCA,Greenplum 数据库查询优化器,将回退到 PostgreSQL 查询优化器,并且这些查询不会那么高效作为启用 GPORCA 的查询 - 但您仍会收到对查询的响应。
我想说在与批量更新中获取流数据是一回事 - 使用 Kafka Connection 和 JDBC,可以开箱即用,但不会利用 Greenplum 的并行分布式特性作为您的所有数据都必须通过协调器。
最佳做法是使用 Greenplum Streaming Server (GPSS) 之类的东西,它将从客户端传递的数据直接写入 Greenplum 数据库集群的段中,并允许最大并行度和最佳流加载性能。>