从异构数据库到 PostgreSQL 的逻辑复制:开源扩展 SynchDB 的设计与实践

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

导读:将 MySQL、SQL Server、Oracle 等异构数据库的数据实时同步到 PostgreSQL,通常需要依赖 Kafka 等复杂的中间件架构。在 HOW 2026 分享中,PostgreSQL 社区 Significant Contributor、来自 Hornetlabs 的技术专家 Cary Huang 详细解析了一款专为 PostgreSQL 打造的开源扩展——SynchDB。它通过内嵌引擎和巧妙的架构设计,让异构数据库的实时逻辑复制变得前所未有的简单。

一、 为什么需要异构数据库复制?

在当今的 IT 架构中,数据往往散落在不同的数据库系统中。业界常需要将 MySQL、SQL Server 或 Oracle 中的数据抽取并同步到 PostgreSQL 中,用于数据分析、报表生成或数据仓库建设。

为什么选择 PostgreSQL 作为目标端?

  • 成本低廉:强大且开源,是替代传统商业数据库的理想选择。
  • 生态丰富:原生支持 JSONB、GIS 地理空间、向量和全文搜索等,且拥有丰富的插件体系。
  • 云原生便携性:在 AWS、Azure、GCP 及本地环境均可无缝运行,避免数据被单一厂商锁定。

异构复制为何困难?
跨数据库复制最大的痛点在于差异:数据格式、语义、工具、协议各不相同。其次,实时变更数据捕获(CDC)涉及极高的复杂度,如数据漂移、错误处理、Schema 变化(如加列、改主键)、事务边界和一致性等,稍有差错就会导致数据不一致。

二、 现有方案的局限

目前,业界主流的异构数据同步方案主要有两种:

1. Debezium + Kafka 架构
它的优势在于支持广泛的数据库、实时 CDC 和借助 Kafka 实现的容错性。但缺点同样明显:架构极其复杂(需要部署 Kafka、Kafka Connect、Zookeeper 等),资源消耗巨大;数据需要经过“源端 -> Kafka Topic -> Kafka Sink -> PostgreSQL”,多阶段流转带来较高的延迟;且 Schema 管理和数据转换能力受限。

2. Oracle GoldenGate
这是一款商业软件,功能非常强大,但高昂的 License 费用、陡峭的学习曲线以及对非 Oracle 数据库兼容性的局限,让许多企业望而却步。

那么,有没有一款专为 PostgreSQL 量身定制、轻量且灵活的选项呢?

三、 隆重推出 SynchDB

SynchDB 是一款开源的 PostgreSQL 扩展,它允许 PostgreSQL 直接从 MySQL、SQL Server、Oracle 和 OpenLog Replicator 等异构数据库进行逻辑数据复制。所有的操作均在 PostgreSQL 内部控制和管理。

它的核心优势可以概括为:

  • 极简安装:仅需 PostgreSQL 和 Java 运行环境(JRE 17+),执行 CREATE EXTENSION synchdb CASCADE; 即可完成安装。
  • 易于使用:通过 SQL 函数即可完成连接器(Connector)的创建、启动和状态监控。
  • 灵活的数据转换:不仅支持表名、列名、数据类型的映射,还能直接利用 PostgreSQL 的 SQL 函数进行表达式级别的数据清洗。
  • 多连接器架构:支持同时连接多个异构数据源。

1. 核心架构:C 与 Java 的无缝融合

因为要复用 Debezium 强大的 CDC 采集能力,而 Debezium 是基于 Java 编写的,SynchDB 的架构巧妙地将两者结合了起来:

  • PostgreSQL 后台工作进程(C 语言编写):负责与 PostgreSQL 内核交互,处理 DDL/DML,以及执行数据转换规则。
  • JVM(Java 虚拟机):SynchDB 并没有将 JVM 作为一个独立的进程运行,而是通过 JNI(Java Native Interface) 将 JVM 内嵌在 PostgreSQL 的后台工作进程中。

数据流向:外部数据源的变更事件由 Debezium Connector 采集,以 JSON 格式通过 JNI 传递给 SynchDB,经过解析、格式化、转换后,通过 Executor API 或 SPI 写入 PostgreSQL。

2. JNI 的代价与性能优化

通过 JNI 调用 Java 资源是有性能开销的。根据演讲中提供的测试数据:如果在 JNI 中调用一个简单的算术方法,调用 10 亿次时,耗时可能是原生 Java 的 15000 到 20000 倍。

如何解决?
SynchDB 采用了**批量处理(Batching)**的策略。把繁重的工作卸载到本地代码(C),减少 JNI 的调用频率。在 Debezium 引擎中维护一个 Batch Queue,将采集到的变更事件累积成批,再统一传递给 SynchDB 插件。批次越大,JNI 调用越少,性能越好。

四、 关键技术细节解析

1. 初始快照(Initial Snapshot / Table Sync)

在开启实时 CDC 之前,必须先对现有数据进行全量拷贝。SynchDB 支持两种模式:

  • 基于 Debezium 的快照:流程是建立连接 -> 确定捕获表 -> 获取全局读锁(防止数据写入) -> 开启 Repeatable Read 事务 -> 读取当前 binlog/SCN/LSN 位置 -> 记录 Schema -> 释放锁 -> 迁移数据 -> 提交事务并记录 Offset。
  • 基于 FDW 的快照(推荐):Debezium 的快照在表数量巨大(如数千张表)时非常慢。SynchDB 创新性地引入了 FDW(外部数据包装器),利用 mysql_fdw、oracle_fdw 等原生高速接口进行初始全量同步。通过 AS OF SCN 等技术确保读取特定范围的数据,极大提升了海量表的迁移速度。

2. 灵活的数据转换规则

SynchDB 不仅仅能映射数据类型(如 MySQL 的 Varchar 转为 PG 的 character varying,Enum 转为 text),它的杀手锏是表达式转换。

因为 SynchDB 是运行在 PG 内部的,用户可以直接调用 PG 的 SQL 函数对流入的数据进行处理。例如:

  • 配置规则 %d + 1000:数据写入时自动给数值加上 1000。
  • 配置规则 SELECT pg_compress(%d):在数据落库前进行压缩。
  • 使用 ST_GeomFromWKB 处理地理空间数据。

这是将同步工具作为外部中间件(Middleware)极难做到的优势。

3. 大事务处理(Infinispan)

如果源端产生了一个超大事务(涉及几十万甚至上百万行更新),数据在 COMMIT 之前都必须缓存在内存中。这极易撑爆 JVM 的堆内存导致 OOM。

为此,SynchDB 集成了 Infinispan,它可以将大事务的数据溢出到堆外内存(Off-heap),甚至在必要时写入磁盘。直到收到 COMMIT,再将数据安全地应用到 PostgreSQL。

4. 并发控制:多进程与多 JVM

PostgreSQL 是多进程架构,而 Java 是单进程多线程环境。在 PG 中,无法通过多线程直接并发写入数据,这会导致事务冲突和锁竞争。

其解决方案是:采用多进程实现安全的并发。
系统可以启动多个 SynchDB Worker 进程,每个进程内运行独立的 JVM。例如:

  • Worker 1 负责同步表 1, 2, 3
  • Worker 2 负责同步表 4, 5, 6
    它们相互独立,分别向 PostgreSQL 发起事务。利用 PostgreSQL 本身的 MVCC 机制处理隔离级别和锁保护,从而实现性能的线性扩展(代价是消耗更多的 JVM 内存)。

五、 快速上手与监控

SynchDB 的使用非常简单,全程通过 SQL 操作:

-- 1. 创建连接信息(填写远端数据库信息、要同步的表等)
SELECT synchdb_add_conninfo('mysqlconn', '127.0.0.1', 3306, 'mysqluser', 'mysqlpwd', 'inventory', 'postgres', 'inventory.orders', 'mysql');

-- 2. 启动引擎
SELECT synchdb_start_engine_bgw('mysqlconn');

-- 3. 查看状态和统计信息
SELECT * FROM synchdb_state_view;
SELECT * FROM synchdb_stats_view;

错误处理:异构同步涉及 Java 端(如网络断开、Schema 不匹配)和 C 端(如主键冲突、表不存在、权限不足)。SynchDB 会将两边的错误信息统一汇总在 synchdb_state_view 中,帮助 DBA 快速定位并解决问题。

六、 总结与展望

SynchDB v1.3 已于 2025 年 11 月 25 日正式发布。目前它支持 MySQL、SQL Server、Oracle 和 OpenLog Replicator;支持全量快照、CDC 实时捕获;支持 DML/DDL 同步;并提供 Prometheus & Grafana 监控集成。

在当今 AI 爆发的时代,大家都渴望使用 PostgreSQL 强大的生态。而海量的数据往往还沉睡在 MySQL 或 Oracle 中。团队希望通过 SynchDB,让数据流向 PostgreSQL 的过程变得高效、丝滑且低成本。

SynchDB 是完全开源的,项目地址在:https://github.com/Hornetlabs/synchdb 。非常欢迎感兴趣的开发者、DBA 提交 Issue 或 PR,共同参与建设,让这个社区工具变得更完善、更强大。

大模型-CLIP 详细介绍 最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。 阅读详情

相关推荐

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

177.Agent-LangGraph-MCP的构成说明

MCP架构通过MCP主机、客户端与服务器的协同,实现工具、资源与提示词的统一管理。MCP服务器提供Tools、Resources、Prompts能力,MCP客户端则负责发现、调用与读取,使Agent可按需获取上下文。其核心在于将工具从Agent中抽离,封装为可复用的服务,提升灵活性与可维护性,推动AI应用高效协作。

计算机王的博客 289

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南)

本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。

rice5的博客 954

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 477

Autodesk Genuine Service卸载失败?试试这个隐藏文件删除法(Win8-Win11通用)

本文针对Autodesk Genuine Service在Windows系统(Win8-Win11)中卸载失败的常见难题,提供了深度解析与根治方案。核心方法是手动定位并删除两个关键的隐藏文件(ProductInformation.pit和id.dat),以解除文件锁定或数据损坏导致的卸载障碍,随后再通过标准流程即可成功卸载。该方法通用性强,能有效解决这一困扰设计师和工程师的顽固问题。

weixin_29220405的博客 1477

电机控制-PMSM无感FOC控制(五)SVPWM过调制策略优化与谐波抑制

本文深入探讨了PMSM无感FOC控制中的SVPWM过调制策略优化与谐波抑制。针对电机高速运行时电压利用率不足的问题,分析了过调制技术的必要性,并详细阐述了分区过调制、谐波注入及闭环优化等主流策略,旨在提升电压利用率与抑制电流谐波,实现电机高性能控制。

convnet3designer的博客 354

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 436

【视频编码学习】AVS3参考软件HPM-4.1简单配置运行

1、用Visual Studio2017打开HPM-4.1文件夹 2、找到文件夹目录下x86_windows文件夹,因为是在win上运行该代码 3、然后找到对应vs版本(我当时2017版)的解决方案sln文件,双击打开可以看到该解决方案下的全部项目。 4、重新生成解决方案时发现提示sdk版本问题,所以右键点击所有的项目,选择重定向项目,修改一下sdk版本。 ...

谦虚勤奋诚实感恩 3100

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 251

【ARM Trace32(劳特巴赫) 使用介绍 10 -- Trace32 scan dump 详细介绍】

将图 1-2 中扫描单元按照扫描移位模式连接起来,就构成了扫描测试中的基本结构,这里介绍下全扫描。全扫描就是多个扫描单元相连接,上一单元的扫描输出,连接到目前单元的扫描输入,目前单元的扫描输出连接到下一单元的扫描输入,以此类推,构成一条移位寄存器链,如图1-3 所示:图 1-3 全扫描这样的扫描结构,可通过一个串行输入端,将期望的数据存入移位寄存器链并观察运行结果。

CodingCos的博客 2034

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 303

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2872

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 179

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Docker部署linkding:HTTPS与数据备份

部署私人书签库,除了让页面能够打开,还需要考虑几个实际问题:重建容器后数据是否保留、登录和保存是否正常、升级前怎样备份,以及出现 502 或 CSRF 错误时从哪里检查。本文使用 Docker Compose 部署 linkding,采用默认 SQLite 数据库,通过 Caddy 提供 HTTPS,并完成账户创建、数据持久化验证和备份。如果重建后账户或书签消失,应先检查是否换了项目目录、改了挂载路径,或者启动了另一套实例,不要急着重新初始化。遇到权限问题,应根据日志确认具体目录和运行用户,再调整权限。

tedcloud123的博客 170

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 208

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 306

Axum 初步入门学习笔记

)自定义错误实现后,可以直接作为Result的ErrAxum 是一个构建在 Tokio、Tower、Hyper 之上的 Rust Web 框架,核心能力是:Router 路由、Extractor 提取器、Tower 中间件、IntoResponse 响应机制、State 共享状态。那张分层架构图是“地图”不是“说明书”:它帮你建立全局观,但 Service、Repository、数据库、Redis、MQ 都是你自己在 Handler 内部调用的业务/基础设施层,不是 Axum 自带的。

weixin_43219667的博客 192

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 336

SQL Server 数据库双备份:简化配置,兼顾本地留存与异机归档

本文针对中小企业SQLServer数据库备份难题,提出简化配置与本地+异机双副本方案。传统原生备份依赖手动脚本,存在配置复杂、传输易中断、日志分散、静默失败等问题。推荐使用图形化工具实现备份、本地留存与异机同步一体化管理,支持断点续传、加密传输、自动清理与版本控制,降低运维负担。双副本策略提升数据安全性,本地快速恢复,异地防硬件故障。建议定期验证恢复流程,确保备份可用性。

2501_93776716的博客 297

Agent 安全实战:间接提示注入的四个攻击面与防御体系

当 Agent 从 "生成内容" 走向 "执行动作",安全边界就从内容合规变成了权限越界。本文拆解间接提示注入在网页抓取、工具返回值、MCP 连接器、长期记忆四个位置的真实攻击路径,对照 Claude、GPT、Gemini 在工具调用权限模型上的设计差异,给出可直接落地的五层防御体系。

阡陌数智,专注大模型网关与 LLM 工程落地 281

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 206

【FDE前沿部署工程师实战教程】第62章:Enterprise AI Developer Platform——企业级 AI 开发者平台与低代码 AI 应用工厂

企业从AI能力平台迈向AI应用生产平台,需构建统一的企业级AI开发者平台,将模型、RAG、Agent、Workflow等能力封装为可视化、可复用的开发工具。通过PromptIDE、AgentBuilder、WorkflowBuilder等模块,实现低代码与专业代码协同,降低开发门槛。平台覆盖应用全生命周期管理,集成测试评估、安全治理与CI/CD发布体系,推动AI应用规模化、标准化交付。最终形成“需求→设计→开发→测试→发布→运营”的企业AI应用工厂模式,助力制造等行业的智能化转型。

IT古董 315

5个陷阱和解决方案:MongoDB源码中自动化测试平台的数

在现代软件工程实践中,自动化测试平台扮演着至关重要的角色,它确保了系统的稳定性和迭代的可靠性。然而,随着业务数据量的快速增长以及并发写入需求的不断上升,基于MongoDB构建的自动化测试平台常常面临性能瓶颈和数据一致性问题。本文将围绕MongoDB源码中一个关键模块——,通过一行一行代码的解读,揭示其设计原理、性能调优点及常见陷阱,适合希望深入理解数据库实现机制的高级工程师。

wuchangjian的专栏 174

PostgreSQL 全文搜索与推荐系统中的高并发处理方案

引言在构建一个需要支持全文搜索与推荐系统的应用时,PostgreSQL 的性能表现和稳定性至关重要。面对高并发请求、数据一致性要求以及系统可用性挑战,许多开发者往往忽略了 PostgreSQL 所提供的一系列高级特性。本文将结合生产环境经验,从高可用、幂等性、限流降级等角度出发,探讨如何在 PostgreSQL 中高效实现全文搜索与推荐系统,并分享 5 个实用技巧与方案。

qq_41106321的博客 153
上一篇: PostgreSQL 日报|分区并发分离未完成引发崩溃(11 月 10 日)
下一篇: PostgreSQL 日报|CloudNativePG 晋级 CNCF 孵化(11 月 11 日)
IvorySQL
博客等级 码龄5年 745粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值