正式开源:从 Greenplum 到 Cloudberry 迁移工具 cbcopy 发布

news2024/11/5 8:49:28

Cloudberry Database 作为 Greenplum 衍生版本和首选开源替代,由 Greenplum 原始团队成员创建,与 Greenplum 保持原生兼容,并能实现无缝迁移,且具备更新的 PostgreSQL 内核和更丰富的功能。
GitHub: https://github.com/cloudberrydb/cloudberrydb

Hi 社区小伙伴们!酷克数据 HashData 正式宣布:大家期待已久的从 Greenplum 到 Cloudberry 数据迁移工具 cbcopy 正式开源啦!

  • GitHub 仓库:https://github.com/hashDataInc/cbcopy/


从今日起,大家可以访问 GitHub 仓库,获取 cbcopy 源代码以及快速使用指南,期待大家积极反馈使用过程中遇到的问题、以及期待的新增功能与优化。

背景

随着 Greenplum 走向闭源,Cloudberry Database 成为 Greenplum 的开源替代首选,同时众多开源 Greenplum 数据库用户也面临着将数据迁移至 Cloudberry Database 的迫切需求。部分用户会通过相关数据备份和恢复工具将数据先导出、再导入的方式进行数据迁移。然而,这种曲线方式的局限性在迁移数据量巨大时变得尤为突出——当数据量攀升至几 TB 乃至更高,迁移效率便成为了一个不容小觑的难题,往往耗时极长,甚至可能长达数天,这无疑给企业的业务连续性和数据管理能力带来了前所未有的挑战。


为了破解这一迁移瓶颈、提升迁移效率,我们推出了全新的开源数据迁移工具——cbcopy。cbcopy 专为解决大规模数据迁移中的效率难题而生,凭借其技术设计与深度优化,实现了 Greenplum 与 Cloudberry 之间数据的高效、稳定迁移。本文将剖析 cbcopy 的特点、功能及其在实际迁移场景中的表现,为正在寻求从 Greenplum 到 Cloudberry 数据迁移解决方案的社区成员提供参考。

什么是 cbcopy

cbcopy 是一款功能强大的数据迁移工具,支持将 Greenplum 数据库集群(包括元数据和数据)迁移到 Cloudberry 数据库集群,并支持在不同 Cloudberry 数据库集群之间进行数据迁移,从而满足灾难恢复、数据迁移以及特定版本升级等多种需求。cbcopy 具备高度的可扩展性、灵活性和性能优化能力,通过简化迁移流程、缩短迁移时间,cbcopy 助力用户实现业务连续性的最大化,同时降低迁移过程中的风险和成本。


cbcopy 支持从 Greenplum 4.x、5.x、6.x 迁移到 Cloudberry,并支持 Cloudberry 1.x 系列版本升级。

主要优势

  1. 更加稳定、高效的性能:相较于传统迁移工具,cbcopy 在迁移大数据量时表现更为出色,显著缩短迁移时间,降低迁移过程中的风险和成本。


  2. 灵活的架构设计:cbcopy 的架构设计兼顾灵活性与高效性,能够适配多样的迁移场景。无论是等量节点迁移、大集群至小集群的精简,还是小集群向大集群的扩展,cbcopy 都能通过智能的数据重分布机制,确保数据在新环境中的最优布局。


  3. 压缩传输,成本优化:cbcopy 内置多种高效压缩算法(如 snappy、zlib、zstd 等),有效减少传输数据量,降低对网络带宽的依赖。即使在带宽有限的环境下,也能保证迁移的高效与稳定,为用户节省宝贵的资源和成本。


  4. 智能的迁移策略:cbcopy 根据源集群的统计信息,智能判断表的大小,并选择最优的迁移策略。对于大表,利用计算节点的并行处理能力和通信带宽进行迁移;对于小表,则直接在 coordinator 节点之间传输数据。

工作原理

元数据迁移


cbcopy 的元数据迁移功能建立在 gpbackup 和 gprestore 的基础之上,与 GPDB 内置的 pg_dump 工具相比,cbcopy 展现出了显著的性能优势。其核心竞争力在于采用批量检索元数据的方式,而非 pg_dump 所使用的一行一行获取元数据的方法。这种批量处理方式,在迁移大量元数据时,能大幅度提升迁移效率。

数据迁移


在数据迁移方面,GPDB 和 CBDB 均支持通过 SQL 命令来启动程序,cbcopy 正是利用这一功能来实现高效的数据迁移。具体迁移过程中,cbcopy 会在目标数据库上启动程序以接收和加载数据,同时在源数据库上启动程序以卸载数据并将其发送到目标数据库的程序。

架构设计


cbcopy 的架构设计如下图所示,特别适用于源集群(如 Greenplum Database 集群)与目标集群(Cloudberry Database 集群)计算节点数量相同的情况。


7d8976b067fc88865b915788ae9f25d0.jpegcbcopy 架构图

由上图可以看到,cbcopy 架构设计直观明了,在源集群与目标集群的计算节点之间建立一一对应关系,直接实现数据的高效迁移,充分发挥所有计算节点的并行处理能力和通信带宽的优势。


cbcopy 内部支持三种表复制策略:


  • Copy On Coordinator:当表的统计值 pg_class->reltuples 小于 --on-segment-threshold 时,cbcopy 将采用此策略。这表示数据迁移仅限于通过协调节点在源数据库和目标数据库之间进行。

  • Copy On Segment:若表的统计量 pg_class->reltuples 大于 --on-segment-threshold,且源数据库与目标数据库版本相同且节点数量一致,cbcopy 将启用此策略。这意味着数据迁移将在所有 segment 节点上并行执行,无需数据重分布。

  • Copy on External Table:对于不满足上述两种策略条件的表,cbcopy 将采用此外部表复制策略。此策略下,数据迁移将在所有 segment 节点上并行执行并进行重分布。

功能实践


cbcopy 主要支持四种级别的数据库对象迁移:整个集群,指定数据库,指定命名空间和指定表。迁移过程包含两部分,首先是迁移元数据,也就是数据库对象的定义;其次是用户表数据的迁移。


  • 集群迁移

将一个集群完整迁移到另外一个集群,包括所有的元数据和数据。以下为示意例子:

cbcopy --source-host=127.0.0.1 --source-port=15432 --source-user=cdw --dest-host=127.0.0.1 --dest-port=25432 --dest-user=cdw1 –full


重要参数说明:

b687e658b34b082516a451c328f4909e.jpeg


  • 数据库迁移

将源集群的某个数据库完整迁移到另外一个集群,如果目标集群不存在同名数据库,则会创建一个新的数据库。以下为示意例子:

cbcopy --source-host=127.0.0.1 --source-port=15432 --source-user=cdw --dest-host=127.0.0.1 --dest-port=25432 --dest-user=cdw1 --dbname="gpadmin" --truncate

重要参数说明:

74a165988ff686dc6818c4a5b47fc110.jpeg


  • 命名空间迁移

将源集群的某个数据库下的某个命名空间(schema)迁移到另外一个集群,如果目标集群不存在同名命名空间,则会创建一个新的命名空间。以下为示意例子:

cbcopy --source-host=127.0.0.1 --source-port=15432 --source-user=cdw --dest-host=127.0.0.1 --dest-port=25432 --dest-user=cdw1 --schema="gpadmin.schema1" --truncate


重要参数说明:

2fac64a6e1c1dbf91ca7432b40ebe127.jpeg


  • 表迁移


将源集群的某些表迁移到另外一个集群,如果目标集群不存在同名表,则会创建新的表。以下为示意例子:

cbcopy --source-host=127.0.0.1 --source-port=15432 --source-user=cdw --dest-host=127.0.0.1 --dest-port=25432 --dest-user=cdw1 --include-table="gpadmin.public.aaa,gpadmin.public.bbb" --truncate

重要参数说明:

116f3d7605f7768af6f4dad0e2d4c7ac.jpeg


更多配置详情与使用方法,欢迎访问 GitHub README 文档查看了解,期待大家积极分享使用体验与意见建议!

推荐阅读

  • • 写在 Greenplum 归档之际:Cloudberry Database 接棒再出发

    • Cloudberry Database 社区月报(202408):1.6.0 全新发布!

  • • Cloudberry Database 社区月报(202407):首次社区聚会成功举办!

  • • Cloudberry Database 社区月报(202406):更多工具开源

  • • Cloudberry Database 社区月报(202405):上榜 GitHub 热门项目

  • • Cloudberry Database 社区月报(202404):1.5.2 版本发布

  • • Cloudberry Database 社区月报(202403):1.5.1 版本发布

  • • Cloudberry Database 社区月报(202402):1.5.0 版本发布

  • • Cloudberry Database 社区月报(202401):Roadmap 2024 发布

引用链接

[1] Github地址: https://github.com/hashDataInc/cbcopy/

[2] 《贡献指南》: https://cloudberrydb.org/contribute
[3] 支持页面: https://cloudberrydb.org/support

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络:网络层 —— 路由信息协议 RIP

文章目录 路由选择协议动态路由协议路由信息协议 RIPRIP 的重要特点RIP的基本工作过程RIP的距离向量算法RIP存在的问题RIP版本和相关报文的封装 路由选择协议 因特网是全球最大的互联网,它所采取的路由选择协议具有以下三个主要特点: 自适应&#xff1a…

构建主干交换网络实验

转载请注明出处 该实验为交换网络综合实验,仅供参考。 根据下表配置计算机IP地址和划分VLAN。划分方式见课本48页,不再赘述 计算机名 IP地址 所属VLAN PC0 192.168.10.1 VLAN10 PC1 192.168.20.1 VLAN20 PC2 192.168.10.2 VLAN10 PC3 192.…

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别 LIMIT 100000, 10: 这个语句的意思是,从查询结果中跳过前100000条记录,然后返回接下来的10条记录。这通常用于分页查询中,当你需要跳过大量的记录以获取后续的记录时。例如,如果你…

电科金仓(人大金仓)更新授权文件(致命错误: XX000: License file expired.)

问题:电科金仓(人大金仓)数据库链接异常,重启失败,查看日志如下: 致命错误: XX000: License file expired. 位置: PostmasterMain, postmaster.c:725 解决方法: 一、下载授权文件 根据安装版本在官网下载授权文件(电科金仓-成为世界卓越的数据库产品与服务提供商)…

DMFLDR数据载入使用实践

1、DMFLDR概述 1.1DMFLDR功能介绍 dmfldr(DM Fast Loader)是 DM 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格式 排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格…

计算机网络(Ⅵ)应用层原理

一些网络应用的例子: E-mail Internaet电话 Web 电子支付 文本信息 搜索 P2P文件共享 流媒体 即时通讯 实时电视会议 .... .... 创建一个网络应用: 1.编程 2.在不同的端系统上运行。 网络应用的体系架构 可能的应用架构 1.客户-服…

《使用Gin框架构建分布式应用》阅读笔记:p393-p437

《用Gin框架构建分布式应用》学习第17天,p393-p437总结,总45页。 一、技术总结 1.Prometheus Prometheus放在代码里面使用,还是第一次见。在本人实际的工作中未看到这种用法。 2.Grafana Grafana用于被监控数据的可视化。 3.Telegraf …

【动手学强化学习】part7-Actor-Critic算法

阐述、总结【动手学强化学习】章节内容的学习情况,复现并理解代码。 文章目录 一、算法背景1.1 算法目标1.2 存在问题1.3 解决方法 二、Actor-Critic算法2.1 必要说明 优势函数 2.2 伪代码 算法流程简述 2.3 算法代码2.4 运行结果 结果分析 2.5 算法流程说明 初始化…

MySQL【二】

查询列 SELECT [ALL | DISTINCT ] * | 列名1[,……列名n] FROM 表名; 查询所有选课学生的学号,结果去除重复值 select distinct sno from sc; 选择行 查询满足条件的数据集 SELECT 字段列表 FROM 表名 WHERE 查询条件 查询不属于数学系或外国语系的学生全部信息 …

ElasticSearch - Bucket Selector使用指南

文章目录 官方文档Bucket Selector1. 定义2. 工作原理3. 使用场景与示例使用场景官方案例示例2 4. 注意事项5. 总结 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html Bucket Selector https://www.elastic.co/guide/en/…

“死鱼眼”,不存在的,一个提词小技巧,拯救的眼神——将内容说给用户,而非读给用户!

视频录制时,死鱼眼问题常见 即便内容再好,眼神死板也会减分 痛点真痛:拍视频时容易紧张 面对镜头,许多人难免紧张 神情僵硬,眼神无光,甚至忘词 这不仅影响表现,还让人难以专注 忘我场景&#x…

PyQt5实战——多脚本集合包,UI以及工程布局(二)

个人博客:苏三有春的博客 系列往期: PyQt5实战——多脚本集合包,前言与环境配置(一) 布局 2.1 UI页面布局 整体框架分为分为三个部分,垂直分布。 第一个部分为功能选择按钮(如UTF-8转换&#…

《Python网络安全项目实战》项目2 Python基础练习_总复习(1)

《Python网络安全项目实战》项目2 Python基础练习 总复习(1) 班级: 姓名: 实训成绩: 任务单成绩 : 输入用户名密码并将其输出打印。 userName _____________________ passWord ______________________ #输…

数组排序简介-基数排序(Radix Sort)

基本思想 将整数按位数切割成不同的数字,然后从低位开始,依次到高位,逐位进行排序,从而达到排序的目的。 算法步骤 基数排序算法可以采用「最低位优先法(Least Significant Digit First)」或者「最高位优先…

LangChain学习之路

何谓 LangChain?释放大语言模型潜能的利器 作为一种专为开发基于语言模型的应用而设计的框架,通过LangChain,我们不仅可以通过API调用如 ChatGPT、GPT-4、Llama 2 等大型语言模型,还可以实现更高级的功能。 我们相信&#xff0c…

二:Linux学习笔记(第一阶段)-- Linux命令

目录 Linux注意事项: Linux目录 Linux系统基础命令 1. 文件和目录操作 2. 文件查看和编辑 3. 文件权限和所有权 4. 系统信息 5. 网络命令 6. 文件查找 7. 压缩和解压缩 8. 系统管理 Linux注意事项: 严格区分大小写一切皆文件windows下的程序不…

嵌入式硬件重点(四)常用信号处理、放大电路、运算放大器(运放)基础篇

引言:在嵌入式硬件设计中,信号处理和放大电路是至关重要的组成部分。它们不仅影响系统的性能,还直接关系到数据的准确性和可靠性。随着嵌入式系统的广泛应用,对各种传感器和外部设备的信号进行有效处理显得尤为重要。 运算放大器&…

3D Gaussian Splatting代码详解(二):模型构建

3 模型构建 gaussians GaussianModel(dataset.sh_degree) 3.1 初始化函数 __init__ 构造函数 构造函数 __init__ 的主要作用是初始化 3D 高斯模型的各项参数和激活函数,用于生成 3D 空间中的高斯表示。 初始化球谐函数的参数: self.active_sh_degre…

自由学习记录(18)

动画事件的碰撞器触发 Physics 类的常用方法 RaycastHit hit; if (Physics.Raycast(origin, direction, out hit, maxDistance)) {Debug.Log("Hit: " hit.collider.name); } Physics.Raycast:从指定点向某个方向发射射线,检测是否与碰撞体…

[FE] React 初窥门径(四):React 组件的加载过程(render 阶段)

1. 回顾 前几篇文章中,我们采用了 VSCode 插件 CodeTour 来记录代码的执行过程, 并把相关的数据 .tour/ 放到了 github: thzt/react-tour 中。 截止到本文为之,我们总共记录了这些 code-tour, .tour/ ├── 2. 构建过程.tour ├─…