当前位置: 首页 > news >正文

如何将PostgreSQL的数据实时迁移到SelectDB?

PostgreSQL 作为一个开源且功能强大的关系型数据库管理系统,在 OLTP 系统中得到了广泛应用。很多企业利用其卓越的性能和灵活的架构,应对高并发事务、快速响应等需求。

然而对于 OLAP 场景,PostgreSQL 可能并不是最佳选择。

为了实现庞大规模数据的数据分析场景,企业会选择使用专业数据仓库产品。例如:ClickHouse、Doris、SelectDB、Greenplum、Redshift 等。选择数仓不得不考虑查询性能和存储效率,而 SelectDB 在这两个方面表现优异,在查询性能方面,SelectDB 采用先进的列存储和向量化执行引擎,能够高效处理复杂查询,提供卓越的查询性能;在存储效率方面,SelectDB 的列存储结构和高效压缩算法,大大减少了磁盘占用和 I/O 开销。

PostgreSQL

本文以 SelectDB 为例,介绍如何把 PostgreSQL 的数据迁移到 SelectDB 中。

数据迁移难在哪?

想象一下,如果你现在要做 PostgreSQL 到 SelectDB 的数据迁移,你需要做哪些事情?

  • 表的初始化:SelectDB 端是不是要先创建一个和源端一致的表结构?然后才能从源端接收数据。手动进行初始化的情况下,如果 PostgreSQL 端有成百上千个表,你又该如何应对?

  • 数据结构的映射:PostgreSQL 和 SelectDB 两者数据结构不同,这点很重要,需要确保数据从源端同步过去后还是完整的。很负责任地说一句,除非你对两者的数据模型的理解非常极致,且保证绝对不出错,才可能达到理想的结果。

  • 实时同步的速率:让 SelectDB 端的数据时刻与源端的 PostgreSQL 保持一致。通过 SelectDB 进行数据实时分析的大前提是,当前 SelectDB 中的数据必须是最新的,分析结果才有意义。

  • 源端 DDL 语句的联动:实时捕获源端 PostgreSQL 的 DDL 变更,并及时在目标端的 SelectDB 中同步执行。这绝对不能算是一个轻松的工作,大多数情况下,源端的数据结构发生变化时,同步链路会中断,导致迁移失败。

  • 同步任务的稳定性:试想如果需要长期在线同步 PostgreSQL 和 SelectDB,什么最重要?当然是同步任务的稳定性。你得考虑在网络、服务器出现异常的情况下,应该怎么保证任务可用。

这些问题很关键,依靠手动或者简单的脚本,迁移效果肯定是不太好的 ,那么选择一个对的工具就至关重要了。

其实对于上述问题,NineData 有绝对的发言权,我们先来看看它的特性:

  • 结构复制:基于目标端数据源的特性,自动高效地完成表的创建、数据结构的映射等工作。

  • 复制性能:基于动态攒批、并行复制、Stream Load 等技术,复制性能轻松达到 200 MB/S。

  • DDL 捕获与执行:实时检测源端中的 DDL 操作,并同步在目标端中执行,保证其他业务变更能够稳定地进行。

任务高可用机制:针对 PostgreSQL 主从切换、数据源异常、网络抖动、服务器异常等各种故障场景下,能够自动发现异常,并进行自诊断及自修复;同时,针对无法自愈的场景,在任务中提供了丰富的修复手段。

我们来实际演示一下。

步骤一:录入源和目标数据源

1. 登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要录入的数据源。

2. 根据页面提示进行配置,然后单击创建数据源完成创建。

步骤二:配置同步链路

1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制。

2. 根据页面提示配置复制任务,由于我们想要实现长期的实时数据同步,需要在复制类型处额外勾选增量复制。

3. 配置完成后启动任务,针对您配置的所有同步对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时同步 PostgreSQL 中新增的增量数据,所有新写入的数据都将一条不漏地同步到 SelectDB,每当目标端的增量数据追平源端时,任务面板中会显示延迟 0 秒,如下图所示。

步骤三(可选):校验目标端同步数据的完整性

除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。

1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

2. 单击数据对比页签,并单击开启数据对比(如果步骤二的任务配置中已勾选开启数据一致性对比,则此处直接展示对比结果)。

提示:开启后,系统将自动对比源端和目标端的同步对象,并给出对比结果。

3. 您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的同步结果。

步骤四(可选):配置任务异常告警

由于是长期任务,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。

1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

2. 单击右上角的配置告警。

3. 输入策略名称,选择告警规则,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。

总结

其实像异构数据迁移这样的事,只要选对了工具,真的没那么难,属于有手就行。就好像本文的 PostgreSQL 迁移到 SelectDB 的场景,一顿操作下来,任务马上就起来了,数据也立刻就过去了,新的增量数据一眨眼功夫就可以在 SelectDB 端查询到了,回想一下好像自己什么也没干,但却发现数据分析的前置工作都已经完成了。

实际的配置过程,远没有你看完这篇文章的时间长,也远没有你想象的复杂。看我说产品如何如何不如直接上手来得直观。所以如果企业有这块的需求,不妨直接尝试,NineData 支持数十种不同数据源的数据实时同步、周期性数据集成场景。全量是免费的,还赠送一条增量链路。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 10. Docker 使用案例
  • Casper 安全事件已解决;区块链网络恢复运行
  • 【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)
  • Java单元覆盖率工具JaCoCo使用指南
  • Java-文件操作和IO
  • OpenCV||超详细的图像分割
  • Mybatis-plus乐观锁
  • 二维数据平滑,滤波方法比较:移动平均平滑、中值滤波、指数加权移动平均、Savitzky-Golay、高斯滤波、卡尔曼滤波
  • Apple Vision Pro 游戏开发:挑战与反思
  • js中的全局函数有这些
  • 使用 Python 制作一个属于自己的 AI 搜索引擎
  • CSS实现元素hover时背景色拉伸渐变
  • C++入门1
  • Python处理Redis
  • 【数据结构】排序 —— 快速排序(quickSort)
  • Consul Config 使用Git做版本控制的实现
  • Laravel 实践之路: 数据库迁移与数据填充
  • miaov-React 最佳入门
  • Spring-boot 启动时碰到的错误
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 好的网址,关于.net 4.0 ,vs 2010
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊flink的TableFactory
  • 首页查询功能的一次实现过程
  • 网络应用优化——时延与带宽
  • 找一份好的前端工作,起点很重要
  • HanLP分词命名实体提取详解
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ### RabbitMQ五种工作模式:
  • #java学习笔记(面向对象)----(未完结)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (2)(2.10) LTM telemetry
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (30)数组元素和与数字和的绝对差
  • (C语言)fgets与fputs函数详解
  • (vue)页面文件上传获取:action地址
  • (笔记)M1使用hombrew安装qemu
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (译) 函数式 JS #1:简介
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)德国人的记事本
  • .apk 成为历史!
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET NPOI导出Excel详解
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET开源、简单、实用的数据库文档生成工具
  • .NET值类型变量“活”在哪?
  • @angular/cli项目构建--http(2)
  • @ComponentScan比较
  • @PostConstruct 注解的方法用于资源的初始化
  • @取消转义