跳到主要内容

PostgreSQL 迁移同步到 StarRocks

NineData 数据复制支持 PostgreSQL 到 StarRocks 数据源的结构、全量数据、增量数据同步。

背景信息

Apache StarRocks 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知。当前其已经成为除 ClickHouse、Doris以外,国内比较流行的数据仓库产品。

StarRocks 基于 Doris 版本构建,作为独立分支从 2021 年开始发展。目前很多企业选择基于 StarRocks 来构建报表分析系统、企业数据仓库、即席查询分析等。基于这些平台能力,可以构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

作为数据仓库,企业需要将源头的各种数据经过 ETL 加工处理后才能入仓进行数据分析。关系型数据库由于其广泛的应用场景及应用规模,也成为 StarRocks 数据集成的核心数据源。

NineData 提供端到端的数据复制能力,以帮助企业快速实现将 PostgreSQL 实时复制到 StarRocks,提升数据应用价值。

功能介绍

NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于 MySQL 数据源之间的复制,还提供双向复制功能,实现快捷构建异地多活业务架构。

  • 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
  • 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
  • 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合事务级并发、热点合并等技术,在保障事务一致性的基础上,提供强劲复制性能。
  • 双向数据实时复制(仅 MySQL 之间):直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。

通过以上功能,可以轻松高效地实现全量|增量数据复制全量|增量数据迁移全量|增量数据同步数据集成不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。

前提条件

  • 已将源数据源和目标数据源添加至 NineData。如何添加,请参见添加数据源

  • 源的数据库类型为 PostgreSQL。

  • 目标数据库为 StarRocks,版本为 3.1、3.0、2.5、2.4、2.3、2.2、2.1、2.0。

  • 如需增量复制,请打开 postgresql.conf 文件配置如下参数,如果找不到该文件的位置,可以在psql 客户端中执行 SHOW config_file; SQL 命令查看。

    • 源数据源的 wal_level 参数必须为 logical
    • 源数据源的 wal_sender_timeout 参数设置为 0。此参数用于中断处于停滞状态超过指定毫秒数的复制连接,默认值为 60000 毫秒。设置为 0 将将禁用超时机制。
  • 源数据源的 max_replication_slots 参数必须大于 1。此参数指定服务器可以支持的最大复制槽数。默认值为10。

    • 源数据源的 max_wal_senders 参数必须大于 1。此参数指定最大的并发连接数。默认值为10。
  • 您必须拥有源数据源和目标数据源的如下权限。

    复制类型
    源数据源目标数据源
    全量复制CONNECT、SELECTTABLE的相关权限(ALTER、DROP、SELECT、INSERT、UPDATE、DELETE)
    增量复制SUPERUSERTABLE的相关权限(ALTER、DROP、SELECT、INSERT、UPDATE、DELETE)

使用限制

  • 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
  • 建议确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击

  3. 页面,单击右上角的

  4. 页签,按照下表进行配置,并单击

    参数
    说明
    输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    同步对象所在的数据源。
    接收同步对象的数据源。
    选择需要复制到目标数据源的内容。
    • :只同步源数据源的库表结构,不同步数据。
    • :同步源数据源的所有对象和数据,即全量数据复制。
    • :在全量同步完成后,基于源数据源的日志进行增量同步。
    (选中时需要选择)
    • :预检查阶段检测到同名表时,停止任务。
    • :预检查阶段检测到同名表时,发送提示并继续任务。 结构复制时,忽略该同名表。如果您同时进行了数据复制,则数据会在同名表中追加,而不会覆盖原有数据。
    • :预检查阶段检测到同名表时,发送提示并继续任务。结构复制时,删除目标库同名表,并基于源库重新复制表结构。如果您同时进行了数据复制,则数据会在表结构复制完成后写入。
    • (同时进行结构和数据复制时可选):预检查阶段检测到同名表时,发送提示并继续任务。结构复制时在目标库保留该表结构,并在数据复制开始时清空同名表中的数据,然后重新从原表中复制。
    (未选中时需要选择)
    • :预检查阶段检测到目标表中存在数据时,停止任务。
    • :预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
    • :预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
  5. 页签,配置下列参数,然后单击

    参数
    说明
    选择需要复制的内容,您可以选择复制源库所有内容,也可以选择,在列表中选中需要复制的内容,单击>添加到右侧列表。
  6. 页签,根据所选的复制类型选择不同操作。

    • 包含:配置目标库表同步到目标数据源之后的名称,单击

      提示

      您可以单击页面右侧的,自定义列名同步到目标数据源之后的名称。除此之外,您还可以设置,仅符合过滤条件的数据会同步到目标数据源。以测试数据 employees 表为例,将过滤条件设置为 emp_no>=10005,则 emp_no 列中小于 10005 的数据均不会同步到目标数据源。

    • 不包含:系统默认选择目标数据源中的同名数据库,如果不存在,则需要手动选择目标库。目标库中的表名、列名需要和同步对象一致。如果不一致,您也可以手动进行表名和列名的映射。

  7. 页签,等待系统完成预检查,预检查通过后,单击

    提示
    • 您可以勾选。在同步任务完成后,自动开启基于源数据源的数据一致性对比,保证两端数据一致。根据您选择的的启动时机如下:
      • :结构复制完成后启动。
      • +:全量复制完成后启动。
      • ++:当增量数据首次和源数据源一致且为 0 秒时启动。您可以单击,在页面中查看同步延迟。sync_delay
    • 如果预检查未通过,需要单击目标检查项右侧列的,排查失败的原因,手动修复后单击重新执行预检查,直到通过。
    • 的检查项,可视具体情况修复或忽略。
  8. 页面,提示,同步任务开始运行。此时您可以进行如下操作:

    • 单击查看同步任务各个阶段的执行情况。
    • 单击可以返回任务列表页面。

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击

  3. 页面单击目标同步任务的,页面说明如下。

    pg2sr_result

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。更多信息,请参见运维监控简介
    3更多
    • 暂停:暂停任务,仅状态为运行中的任务可选。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
    • 删除:删除任务,任务删除后无法恢复,请谨慎操作。
    4结构复制(包含结构复制的场景下显示)展示结构复制的进度和详细信息。
    • 单击页面右侧的日志:查看结构复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    • 单击列表中目标对象右侧操作列的查看 DDL:可以查看 SQL 回放。
    5全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的:查看当前复制任务正在执行中的操作,包含:
      • :复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • :当前线程正在执行中的 SQL 语句详情。
      • :当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
      • :当前线程开启的时间戳。
      • :当前线程的状态。
    • 单击页面右侧的限流设置:限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看增量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    7修改对象展示同步对象的修改记录。
    • 单击页面右侧的修改同步对象,可对同步对象进行配置
    • 单击页面右侧的refresh:查看最新的信息。
    8数据对比展示源数据源和目标数据源之间数据对比的结果。如果您未开启数据对比,请单击页面中的开启数据对比
    • 单击页面右侧的重新对比:对当前源和目标两端数据重新发起对比。
    • 单击页面右侧的日志:查看一致性对比的执行日志。
    • 单击页面右侧的监控(仅数据对比显示):查看对比 RPS(每秒对比的记录数)的走势图。单击详情可以查看更早之前的记录。
    • 在对比列表右侧操作列单击details(不一致情况下显示):查看源端和目标端的对比详情。
    • 在对比列表右侧操作列单击sql(不一致情况下显示):生成变更 SQL,您可以直接复制该 SQL 到目标数据源执行,修改不一致的内容。
    9展开展示当前复制任务的详细信息,包括复制类型复制对象开始时间等。

附录:PostgreSQL 和 StarRocks 数据类型的映射关系表

数据复制过程中,PostgreSQL 的数据类型会被映射成对应的 StarRocks 数据类型。

大类PostgreSQL 数据类型StarRocks 数据类型
NumericSMALLINTSMALLINT
INTEGERINT
BIGINTBIGINT
DECIMALDECIMAL
REALDOUBLE
DOUBLEDOUBLE(小数点,最多存储 16 位)
SMALLSERIALSMALLINT
SERIALINT
BIGSERIABIGINT
MONETARYMONEYDECIMAL
CharacterVARCHAR(n)
  • (n) 的宽度 < 11000:VARCHAR(3*n)
  • (n) 的宽度 ≥ 11000:STRING
CHAR(n)
  • (n) 的宽度 < 80:CHAR(3*n)
  • (n) 的宽度 ≥ 80:STRING
TEXTSTRING
BinaryBYTEASTRING
Date and TimeTIMESTAMP [(p)] [without time zone]DATETIME(PostgreSQL 和 StarRocks 都需要设置 session 级别的 time_zone,值必须一致)
TIMESTAMP [(p)] with time zoneDATETIME(PostgreSQL 和 StarRocks 都需要设置 session 级别的 time_zone,值必须一致)
DATEDATE
TIME [(p)] [without time zone]VARCHAR
TIME [(p)] with time zoneVARCHAR
INTERVAL [fields] [(p)]VARCHAR(100)
BooleanBOOLEANBOOLEAN
GeometricPOINT、LINE、LSEG、BOX、PATH、POLYGON、CIRCLEVARCHAR
Network AddressCIDR、INET、MACADDR、MACADDR8VARCHAR
Text SearchTSVECTORVARCHAR
XMLXMLVARCHAR
JSONJSONJSON

相关文档

数据复制简介