IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> PostgreSQL逻辑复制及应用 -> 正文阅读

[大数据]PostgreSQL逻辑复制及应用

背景

最初研究的目的是为了解决PG - ES之间的同步,后来参考debezium发现可以通过**逻辑复制(logical replication)**可以实现一个更通用的PG行级数据变更中间件, 通过自定义处理逻辑完成数据处理或者同步。因此你可以基于此编写一个同步到任意类型的数据库, 甚至可以做数据日志、数据缓存、实时可视化、数据仓库等等。至于为什么使用逻辑复制,各位可以自行了解逻辑复制的优势。

原理

数据库操作所产生的wal日志可以设置输出级别,将wal日志级别开放至logical,即可监控到数据库的写入操作,再通过逻辑解析模块初步进行内容解析,再由plugin对中间结果进行过滤和消息化拼接后, 发布到复制槽中。而我们的程序需要做的则是“监听复制槽、处理收到的消息”。

logical decoding原理说明图

应用场景

  • PG to ES
  • PG to MySQL
  • PG to kakfa
  • 数据监控
  • 消息通知
  • 数据分析

代码实现及应用

Tool for synchronizing from PostgreSQL to custom handler through replication slot: https://github.com/atopx/logical

example

package main

import (
	"context"
	"fmt"

	"github.com/jackc/pgx"
	"github.com/atopx/logical/logger"
	"github.com/atopx/logical/client"
	"github.com/atopx/logical/model"
)

func callback(records []*model.Waldata) {
    for i := 0; i < len(records); i++ {
        data := records[i]
        fmt.Println(*data)
        model.ReleaseWaldata(data)
    }
}

func main() {
    cfg := pgx.ConnConfig{
        Host:     "127.0.0.1",
        Port:     5432,
        User:     "itmeng",
        Password: "postgres_logical",
        Database: "webstore",
    }
    table := "book"
    slot := "book_cache_slot"
    c, err := client.New(cfg, table, slot, callback)
    if err != nil {
        logger.Panic(err.Error())
    }
    logger.Info("start postgresql logical replication client")
    if err = c.Start(context.Background()); err != nil {
    	logger.Panic(err.Error())
    }
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:49:32  更:2022-05-01 15:52:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:39:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码