Greenplum,PostgreSQL資料實時訂閱的幾種方式
標籤
PostgreSQL , Greenplum , 非同步訊息佇列 , skytools , PGQ , 資料訂閱 , 觸發器 , 時間戳 , BINLOG , 邏輯複製 , 邏輯複製slot , 邏輯decode
背景
通常在一個企業中,對一份資料可能更有多個業務系統需要對其進行處理。
因此資料是流動的,通常會通過訊息佇列來完成這樣的工作。不過呢,這樣要求訊息佇列是最上游。
當無法將訊息佇列放到最上游時,例如資料先到了資料庫,再訂閱給其他業務線,怎麼辦呢?
就比如這裡的RDS PG的部分。
下面來探討一下有多少種方法來實現這個需求:將資料庫的變更實時訂閱到其他業務線(例如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佇列,實現訊息訂閱。
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的解析來訂閱。
相關文章
- RSS 一種簡潔優雅的資料訂閱方式
- MySQL 資料庫定時備份的幾種方式MySql資料庫
- 基於Greenplum,postgreSQL的大型資料倉儲實踐SQL
- Express 提交資料的幾種方式Express
- 遍歷資料夾的幾種方式
- 幾種實現延時任務的方式(一)
- java定時任務實現的幾種方式Java
- MySql資料庫備份的幾種方式MySql資料庫
- 資料庫SQL調優的幾種方式資料庫SQL
- mybatis連線資料庫的幾種方式MyBatis資料庫
- 做微博大資料廣告的幾種方式大資料
- Nagios 快速實現資料視覺化的幾種方式iOS視覺化
- 使用PostgreSQL邏輯訂閱實現multi-masterSQLAST
- js實現0ms延時定時器的幾種方式JS定時器
- Hadoop-寫入資料的幾種方式Hadoop
- 如何用 Redis 做實時訂閱推送的?Redis
- 【PG】mysql時時同步資料至greenplumMySql
- 《Greenplum構建實時資料倉儲實踐》簡介
- 實現 JavaScript 沙箱的幾種方式JavaScript
- MySQL資料庫定時備份的幾種實現方法MySql資料庫
- 資料庫訪問幾種方式對比資料庫
- SpringBoot讀取配置資料的幾種方式Spring Boot
- flask返回資料的幾種方式(字串,json,元祖)Flask字串JSON
- iOS應用資料儲存的幾種常用方式iOS
- 釋出-訂閱方式實現非同步併發非同步
- Spring連線資料庫的幾種常用的方式Spring資料庫
- [實戰]laravel + redis訂閱釋出 +swoole實現實時訂單通知LaravelRedis
- AOP 有幾種實現方式?
- SQLServer 2012複製訂閱資料訂閱過程SQLServer
- 實現登入態的幾種方式
- 互動投影的幾種實現方式
- 分散式鎖的幾種實現方式分散式
- js實現繼承的幾種方式JS繼承
- 分散式鎖的幾種實現方式~分散式
- 淺析malloc()的幾種實現方式
- java幾種代理模式的實現方式Java模式
- Android回顧--(十二) 資料儲存的幾種方式Android
- MYSQL資料匯出備份、匯入的幾種方式MySql