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

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.xdnf.cn/news/737.html

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

相关文章

基于人工智能的搜索和推荐系统

互联网上的搜索历史分析和用户活动是个性化推荐的基础,这些推荐已成为电子商务行业和在线业务的强大营销工具。随着人工智能的使用,在线搜索也在改进,因为它会根据用户的视觉偏好提出建议,而不是根据每个客户的需求和偏好量身定制…

SpringBoot starter机制

1、出现的背景 在spring boot之前,想要在spring中集成redis,需要做的事情包括: (1)引入jar包:包括redis的jar包,redis依赖的jar包,相应的版本,与spring版本是否兼容等 …

在 JavaScript 中,`Array.prototype.filter` 方法用于创建一个新数组,该数组包含通过测试的所有元素

文章目录 1、概念在你的代码中的作用示例总结 2、实战3、formattedProducts4、filteredProducts 1、概念 在 JavaScript 中,Array.prototype.filter 方法用于创建一个新数组,该数组包含通过测试的所有元素。具体来说,filter 方法会遍历数组中…

通过源码分析类加载器里面可以加载的类

类列表 每一个ClassLoader里面的类列表,类的数量都是固定的。 对上一节中的dex反编译 使用DexClassLoader类动态加载插件dex   利用jadx对dex进行反编译可以看到有哪些类 源码分析 BaseDexClassLoader 从BaseDexClassLoader类加载器开始分析 在BaseDexClassLoade…

系统架构设计师(软考高级)一站式通关课程

系统架构设计师(软考高级) 一站式通关课程 系统架构设计师(软考高级)教程(三连评论分享链接!) 🎯 课程亮点: 全面覆盖: 从基础概念到高级应用,涵盖…

C++ 优先算法——盛最多水的容器(双指针)

目录 题目:盛最多水的容器 1. 题目解析 2. 算法原理 3. 代码实现 题目:盛最多水的容器 1. 题目解析 题目截图: 如图所示: 水的高度一定是由较低的那条线的高度决定的:例1图中,是由7决定的,然后求出…

SQL-lab靶场less1-4

说明:部分内容来源于网络,如有侵权联系删除 前情提要:搭建sql-lab本地靶场的时候发现一些致命的报错: 这个程序只能在php 5.x上运行,在php 7及更高版本上,函数“mysql_query”和一些相关函数被删除&#xf…

Golang | Leetcode Golang题解之第535题TinyURL的加密与解密

题目: 题解: import "math/rand"type Codec map[int]stringfunc Constructor() Codec {return Codec{} }func (c Codec) encode(longUrl string) string {for {key : rand.Int()if c[key] "" {c[key] longUrlreturn "http:/…

使用 Elasticsearch 进行语义搜索

Elasticsearch 是一款功能强大的开源搜索引擎,可用于全文搜索、分析和数据可视化。传统上,Elasticsearch 以其执行基于关键字/词汇的搜索的能力而闻名,其中文档基于精确或部分关键字匹配进行匹配。然而,Elasticsearch 已经发展到支…

计算机毕业设计Python+大模型新闻自动分类 新闻舆情预测 新闻语料情感分析 新闻推荐系统 朴素贝叶斯分类算法 机器学习 深度学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【097】基于SpringBoot+Vue实现的个人社区博客管理系统

系统介绍 演示视频 小白博客2.0(SpringbootVue)源码数据库讲解视频设计文档 基于SpringBootVue实现的小白博客2.0系统设计了超级管理员、系统观察者、用户三种角色,超级管理员可对用户授权,具体实现的功能如下 文章采用了比较火的Markdown编…

LM Head weights;ChatGPT-3词汇量:175,000;llama7b 词汇量,词嵌入维度:4096

目录 LM Head weights ChatGPT-3词汇量:175,000 llama7b 词汇量 词汇量:32000 max_position_embeddings: 4096 LM Head weights ChatGPT-3词汇量:175,000 ChatGPT-4 确切的词向量种类数量公开信息。但可以根据一些语言模型的相关知识进行推测分析。 一般来说,语言模…

ArcGIS005:ArcMap常用操作101-150例动图演示

摘要:本文涵盖了GIS软件操作的多方面内容,包括地图文档的新建、打开、保存及版本兼容性处理;错误与警告的查阅及帮助文档的使用技巧;地图打印比例尺的调整与地图信息的完善;图层操作的撤销与恢复,界面元素的…

Chrome和夸克谁更护眼

在当今数字化时代,我们每天长时间面对电脑和手机屏幕,眼睛的健康问题变得越来越重要。浏览器作为我们日常使用频率极高的工具,其护眼功能的优劣直接影响到我们的视觉舒适度。本文将对Chrome和夸克两款主流浏览器进行对比,探讨它们…

WPF+MVVM案例实战(十二)- 3D数字翻牌计时实现

文章目录 1、运行效果2、功能实现1、文件创建2、控件代码实现3、控件引用与菜单实现1.引用用户控件2.按钮菜单3、计时器界面实现4、源代码获取1、运行效果 3D数字翻牌计时 2、功能实现 1、文件创建 打开项目 Wpf_Examples ,在用户控件 UserControlLib 中创建 NumberFoldi…

一、计算机网络概述,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

文章目录 [toc]零、前言一、什么是Internet1.1 从具体构成角度1.2 什么是协议1.3 从服务角度1.4 网络结构 二、网络边缘2.1 通讯模式2.2 采用网络设施的面向连接服务2.3 采用基础设施的无连接服务 三、网络核心3.1 认识网络核心3.2 网络核心:电路交换3.2.1 基本原理…

闯关leetcode——234. Palindrome Linked List

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/palindrome-linked-list/description/ 内容 Given the head of a singly linked list, return true if it is a palindrome or false otherwise. Example 1: Input: head [1,2,2,1] Output: tru…

K8S自建企业私有云方案 单台起配 NVMe全闪存储性能

作为老牌存储硬件厂商,Infortrend这回开了一把大的。在一套设备系统里,将计算节点、存储与Kubernetes结合,打造出EonStor KS IEC(Infortrend企业云),将硬件与软件、前端与后端、上层与底层统一融合在一套系…

Rust 力扣 - 73. 矩阵置零

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们使用两个变量记录矩阵初始状态的第一行与第一列是否存在0 然后我们遍历矩阵(跳过第一行与第一列),如果矩阵中元素为0则将该元素映射到矩阵第一行与矩阵第一列的位置置为0…

6款IntelliJ IDEA插件,让Spring和Java开发如虎添翼

文章目录 1、SonarLint2、JRebel for IntelliJ3、SwaggerHub插件4、Lombok插件5、RestfulTool插件6、 Json2Pojo插件7、结论 对于任何Spring Boot开发者来说,两个首要的目标是最大限度地提高工作效率和确保高质量代码。IntelliJ IDEA 是目前最广泛使用的集成开发环境…