Greenplum, PostgreSQL 数据实时订阅的几种方式

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

标签

PostgreSQL , Greenplum , 异步消息队列 , skytools , PGQ , 数据订阅 , 触发器 , 时间戳 , BINLOG , 逻辑复制 , 逻辑复制slot , 逻辑decode


背景

通常在一个企业中,对一份数据可能更有多个业务系统需要对其进行处理。

《从人类河流文明 洞察 数据流动的重要性》

因此数据是流动的,通常会通过消息队列来完成这样的工作。不过呢,这样要求消息队列是最上游。

当无法将消息队列放到最上游时,例如数据先到了数据库,再订阅给其他业务线,怎么办呢?

就比如这里的RDS PG的部分。

pic

下面来探讨一下有多少种方法来实现这个需求:将数据库的变更实时订阅到其他业务线(例如Kafka)。

PostgreSQL , 阿里云RDS for PostgreSQL

PostgreSQL,在阿里云对应RDS for PostgreSQL这个产品。

PostgreSQL的数据变更,如何订阅给下游?下面是可选的方法:

1、触发器,将表的变更记录到一个流水表,然后业务通过读取流水表进行订阅。

《USE hstore store table's trace record》

2、规则,在需要订阅的表上,创建RULE,将表的变更记录到一个流水表,然后业务通过读取流水表进行订阅。

https://www.postgresql.org/docs/10/static/sql-createrule.html

3、异步消息,使用触发器或RULE,将表的变更写入CHANNEL。(数据库的异步消息通道功能)。

订阅端通过监听CHANNEL,实现对数据的订阅。

https://www.postgresql.org/docs/10/static/sql-notify.html

https://www.postgresql.org/docs/10/static/sql-listen.html

4、WAL 逻辑 decode。

从9.4的版本开始,PostgreSQL支持逻辑复制,将数据变更写入WAL,(类似MySQL的binlog复制)。客户端通过从WAL翻译REDO来实现订阅。

alidecode 是一个翻译wal的插件,用户也可以自己写翻译WAL的插件。

《PostgreSQL 最佳实践 - 逻辑增量复制(MySQL <-> PgSQL <-> PgSQL)》

5、PGQ ,是SKYTOOLS的一个基础功能,在PostgreSQL内部实现了一个异步的队列。用户可以对需要复制的表,创建PGQ,然后写PGQ的消费者来实现订阅。

https://wiki.postgresql.org/wiki/SkyTools

londiste3 就是一个用于复制的PGQ消费者代表程序。

6、confluentinc bottledwater-pg , 基于PG的WAL以及逻辑复制功能,实现的一个主动消费者,将数据自动从WAL翻译,并写入KAFKA队列,实现消息订阅。

pic

https://github.com/confluentinc/bottledwater-pg

《实时数据交换平台 - BottledWater-pg with confluent》

7、时间戳,最传统的方法,用户在写入、删除、更新时,记录数据的写入时间、修改时间。

删除时,逻辑删除(标记字段),并记录删除时间。

通过这个时间戳的推移来订阅数据。

方法优先级

优先使用逻辑DECODE的方法(6、4)。

其次是时间戳(7)。

然后可以考虑PGQ。

然后再考虑异步消息的方法。

最后考虑触发器和规则。

Greenplum , 阿里云HybridDB for PostgreSQL

Greenplum,在阿里云对应HybridDB for PostgreSQL这个产品。

也有若干种订阅方法:

推荐方法:

使用appendonly表,以及时间戳的方法。

阿里云推出了metascan技术,可以在不建索引的情况下,极度高效的实现时间戳的推移订阅。

阿里云订阅套件

1、datax,配置推移字段,推移订阅。

2、cdp

3、d2

4、dts,通过类似binlog的解析来订阅。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
7月前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之往GREENPLUM 6 写数据,用postgresql-42.2.9.jar 报 ON CONFLICT (uuid) DO UPDATE SET 语法有问题。怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
关系型数据库 PostgreSQL
PostgreSQL排序字段不唯一导致分页查询结果出现重复数据
PostgreSQL排序字段不唯一导致分页查询结果出现重复数据
161 0
|
26天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据文件
PostgreSQL的物理存储结构主要包括数据文件、日志文件等。数据文件按oid命名,超过1G时自动拆分。通过查询数据库和表的oid,可定位到具体的数据文件。例如,查询数据库oid后,再查询特定表的oid及relfilenode,即可找到该表对应的数据文件位置。
|
6月前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
1022 0
|
6月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之使用Flink CDC读取PostgreSQL数据时如何指定编码格式
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
106 0
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
530 0
|
4月前
|
SQL 关系型数据库 HIVE
实时计算 Flink版产品使用问题之如何将PostgreSQL数据实时入库Hive并实现断点续传
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
开发框架 关系型数据库 数据库
在 PostgreSQL 中,解决图片二进制数据,由于bytea_output参数问题导致显示不正常的问题。
在 PostgreSQL 中,解决图片二进制数据,由于bytea_output参数问题导致显示不正常的问题。
|
6月前
|
关系型数据库 5G PostgreSQL
postgreSQL 导出数据、导入
postgreSQL 导出数据、导入
62 1
|
6月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL和greenplum的copy命令可以添加字段吗?
【6月更文挑战第5天】PostgreSQL和greenplum的copy命令可以添加字段吗?
101 3

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版