跳到主要内容

PostgreSQL 迁移同步到 StarRocks

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

背景信息​

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

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

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

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

功能介绍​

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

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

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

前提条件​

  • 已将源数据源和目标数据源添加至 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. 在左侧导航栏单击数据复制。

  1. 在数据复制页面单击目标同步任务的任务 ID,页面说明如下。

    pg2sr_result

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。更多信息,请参见运维监控简介。
    3更多
    • 暂停:暂停任务,仅状态为运行中的任务可选。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
    • 删除:删除任务,任务删除后无法恢复,请谨慎操作。
    4结构复制(包含结构复制的场景下显示)展示结构复制的进度和详细信息。
    • 单击页面右侧的日志:查看结构复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    • 单击列表中目标对象右侧操作列的查看 DDL:可以查看 SQL 回放。
    5全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的查看线程:查看当前复制任务正在执行中的操作,包含:
      • 线程号:复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • 执行 SQL:当前线程正在执行中的 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

相关文档​

数据复制简介