跳到主要内容

PostgreSQL 迁移同步到 Doris

NineData 数据复制支持 PostgreSQL 到 Doris 数据源之间的数据同步。

背景信息

Apache Doris 的强大能力使其成为构建各种应用的理想选择。企业可以基于 Doris 构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用,实现对大规模数据的高效管理与分析。

而为了实现上述场景,企业需要将各种源头数据通过 ETL 加工处理后纳入数据仓库进行深入分析。PostgreSQL 由于其广泛的应用场景和应用规模,成为 Apache Doris 数据集成的核心数据源之一。

功能介绍

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

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

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

前提条件

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

  • 源数据源为 PostgreSQL,目标数据源为 Doris。

  • 您必须拥有源数据源和目标数据源的如下权限:

    复制类型
    源数据源目标数据源
    结构复制CONNECT、SELECTDDL
    全量复制CONNECT、SELECTTABLE的相关权限(ALTER、DROP、SELECT、INSERT、UPDATE、DELETE)
    增量复制SUPERUSERTABLE的相关权限(ALTER、DROP、SELECT、INSERT、UPDATE、DELETE)
  • 如需增量复制,请打开 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。

使用限制

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

操作步骤

商业化通知

NineData 数据复制产品已商业化,您仍然可以保有 10 条复制任务免费使用,注意事项如下:

  • 10 条复制任务中可以包含 1 条任务,规格为 Micro
  • 状态为的任务不算在 10 条任务的限制内,如果您已经创建了 10 条复制任务,还想要继续创建,可以先终止之前的复制任务,然后再创建新任务。
  • 创建复制任务时,仅可选择您已购买的,未购买的规格将以灰度显示,无法选择。如需购买,请通过页面右下角的客服图标联系我们。
  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

  3. 页面,单击右上角的

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

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

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

    • 包含:配置目标表同步到目标数据源之后的表名、Key 和 Distribute Key,单击。不同类型的表,复制到 Doris 后使用的默认 Data Model 以及 Key 的定义如下。

      PostgreSQL 表类型Doris Data ModelDoris Key 定义Doris Distribute Key 定义
      有主键表Unique Model所有主键列,按照源库的主键列定义顺序。所有主键列。
      无主键且有唯一键Unique Model所有唯一键列,按照源库唯一键定义顺序。所有唯一键列。
      无主键且无唯一键Duplicate Model默认选择表中前面 2 个列。保持跟 Key 相同。
      提示

      您可以单击页面右侧的,自定义列名同步到目标数据源之后的名称。除此之外,您还可以设置,仅符合过滤条件的数据会同步到目标数据源。

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

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

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

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

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

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

    result2

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

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

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

分类PostgreSQL 数据类型Doris 数据类型
NUMERICSMALLINTSMALLINT
INTEGERINT
BIGINTBIGINT
DECIMALDECIMAL
REALDOUBLE
DOUBLEDOUBLE(最多存储小数点后 16 位)
SMALLSERIALSMALLINT
SERIALINT
BIGSERIALBIGINT
MONETARYMONEYDECIMAL
CHARACTERVARCHAR(N)为避免数据丢失,使用如下转换规则:
  • 源中 VARCHAR(N) 宽度小于 11000:使用 VARCHAR(3*N)。
  • 源中 VARCHAR(N) 宽度大于 11000:使用 STRING。
CHAR(N)为避免数据丢失,使用如下转换规则:
  • 源中 CHAR(N) 宽度小于 80:使用 CHAR(3*N)。
  • 源中 CHAR(N) 宽度大于 80:使用 STRING。
TEXTSTRING
BINARYBYTEASTRING
DATE AND TIMETIMESTAMP [(P)] [WITHOUT TIME ZONE]
  • Doris 版本 >= 1.2.0:DATATIME(不带 fsp)或 DATATIMEV2(带 fsp)。
  • Doris 版本 < 1.2.0:DATATIME
TIMESTAMP [(P)] WITH TIME ZONE
  • Doris 版本 >= 1.2.0:DATATIME(不带 fsp)或 DATATIMEV2(带 fsp)。
  • Doris 版本 < 1.2.0:DATATIME
DATEDATE
TIME [(P)] [WITHOUT TIME ZONE]VARCHAR
TIME [(P)] WITH TIME ZONEVARCHAR
INTERVAL [FIELDS] [(P)]INT
BOOLEANBOOLEANBOOLEAN
GEOMETRICPOINT、LINE、LSEG、BOX、PATH、POLYGON、CIRCLEVARCHAR
NETWORK ADDRESSCIDR、INET、MACADDR、MACADDR8VARCHAR
TEXT SEARCHTSVECTORVARCHAR
XMLXMLVARCHAR
JSONJSON
  • Doris 版本 >= 1.2.0:JSONB。
  • Doris 版本 < 1.2.0:STRING。
### 附录 2:预检查项一览表
检查项检查内容
检查对象名的合规性检查库名、表名是否符合 Doris 命名规范
源数据源连接检查检查源数据源网关状态、实例是否可达、用户名及密码准确性
目标数据源连接检查检查目标数据源网关状态、实例是否可达、用户名及密码准确性
目标库权限检查检查目标数据库的账号权限是否满足要求
源库权限检查检查源数据库的账号权限是否满足要求
目标库数据存在性检查检查待复制对象在目标数据库中是否已存在数据
目标库同名对象存在性检查检查待复制对象在目标数据库中是否已存在
检查 wal_level检查源数据源的 wal_level 是否为 logical

相关文档

数据复制简介