data-warehouse - 用于数据仓库的 Greenplum 与 Citus
问题描述
我正在尝试从将 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 数据库集群的各个部分,并允许最大的并行性和最佳的流加载性能。
推荐阅读
- python - pyplot subplots_adjust(wspace = 0) 命令不起作用
- react-native - 我想更改抽屉中用户名的状态。从更新配置文件屏幕更新后
- c# - 如何使用 TPL 数据流加载、计算和编写单个特征?
- linux - 使用 awk/sed 命令如何从日志文件中过滤字段
- arrays - 将未格式化的数据附加到 Fortran 中的文件,然后读取它
- python - 从 sqlalchemy 获取 pymysql.err.IntegrityError
- javascript - Amcharts 将项目符号添加到轴范围
- drag-and-drop - 如何从Angular 8中的拖放容器中获取值
- git - 发布单个文件以在 GitLab 上下载
- javascript - Vee Validate 属性或方法“错误”未定义 Nuxt JS