更新时间:2025-08-25 GMT+08:00
分享

MongoDB同步到DWS作业配置

支持的源端和目的端数据库版本

表1 支持的数据库版本

源端数据库

目的端数据库

MongoDB数据库(4.0.0及以上版本)

DWS集群(8.1.3、8.2.0及以上版本(除DWS 3.0))

数据库账号权限要求

在使用Migration进行同步时,源端和目的端所使用的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考下表进行赋权。

表2 数据库账号权限

类型名称

权限要求

源数据库连接账号

目标数据库用户的read/readwrite角色,具有对目标集合授予changeStream和find动作的权限。

目标数据库连接账号

目标数据库的每张表必须具有如下权限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。

支持的同步对象范围

在使用Migration进行同步时,不同类型的链路,支持的同步对象范围不同,详细情况可参考下表。

表3 同步对象范围

类型名称

使用须知

同步对象范围

  • 支持同步的DML:包括INSERT、UPDATE、DELETE。
  • 不涉及且不支持同步的DDL:同步时需要指定好字段的映射。
  • 仅支持同步主键表:MongoDB主键默认为_id。
  • 不涉及且不支持视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束、唯一索引、外键索引、Check约束的同步。
  • 不支持自动建表,目标端表需手动建立。
  • 不支持同步TTL(Time To Live)索引。
  • 不支持同步或迁移admin和local库中的数据。

注意事项

除了数据源版本、连接账号权限及同步对象范围外,您还需要注意的事项请参见下表。

表4 注意事项

类型名称

使用和操作限制

数据库限制

  • 源端数据库命名规则遵循MongoDB开源规则。
    • 数据库名约束:

      请勿依靠大小写来区分数据库。例如,不能使用下面这两个名称相似的数据库:salesData 和SalesData。

      在 MongoDB 中创建数据库后,在引用数据库时必须使用一致的大小写。例如,如果创建了salesData 数据库,引用时不要使用其他大小写,例如salesdata或SalesData。

      在 Windows 上运行时,不得包含以下任意字符:/\. "$*<>:|?。

      在 Unix 和 Linux 系统上运行时,不得包含以下任何字符:/\. "$。

      长度限制为 63 字节。

    • 集合名称约束:

      应以下划线或字母字符开头。

      不能包含 null 字符或 $、不能为空字符串(例如 "")。

      不能以 system. 开头。

      未分片集合和视图的命名空间长度限制为 255 字节,分片集合的命名空间长度限制为 235 字节。

    • 字段名称限制:

      长度限制为255字节,不能包含null字符或. $。

  • 目的端数据库中的对象名需要满足约束:长度不超过63个字符,以字母或下划线开头,中间字符可以是字母、数字、下划线、$。

使用限制

通用:

  • 实时同步过程中,不支持IP、端口、账号、密码修改。
  • MongoDB实时数据同步不支持单副本的数据源。
  • 不支持在运行过程中修改MongoDB库名、集合名。
  • 不支持自动建表,需要手动在DWS目标端建立接收表。
  • 支持在设置字段映射时,选取extraColumn这个默认自带的源端字段,来确认目标端的某个字段,去接收所有在任务中未被定义过映射MongoDB源端字段。
  • 支持提前自定义字段映射,Migration在同步时,若检测到同名字段则传输,若未检测到对应字段则置空。
  • 支持DML:包括INSERT、UPDATE、DELETE。

全量同步阶段:

migration会遍历表中所有chunk,源表预设过多chunk时,会导致全量同步时间变长。

常见故障排查:

在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考常见问题章节进行排查。

其他限制

-

操作步骤

本小节以MongoDB到DWS的实时同步为示例,介绍如何配置Migration实时集成作业。配置作业前请务必阅读使用前自检概览, 确认已做好所有准备工作。

  1. 参见新建实时集成作业创建一个实时集成作业并进入作业配置界面。
  2. 选择数据连接类型:源端选MongoDB,目的端选DWS。

    图1 选择数据连接类型

  3. 选择集成作业类型:同步类型默认为实时,同步场景包含整库和分库分表场景。

    图2 选择集成作业类型

    同步场景相关介绍请参见同步场景

  4. 配置网络资源:选择已创建的MongoDB、DWS数据连接和已配置好网络连接的migration资源组。

    图3 选择数据连接及migration资源组

    无可选数据连接时,可单击“新建”跳转至管理中心数据连接界面,单击“创建数据连接”创建数据连接,详情请参见配置DataArts Studio数据连接参数进行配置。

    无可选migration资源组时,可单击“新建”跳转至购买migration资源组页面创建migration资源组配置,详情请参见购买创建数据集成资源组增量包进行配置。

  5. 检测网络连通性:数据连接和migration资源组配置完成后需要测试整个迁移任务的网络连通性,可通过以下方式进行数据源和migration资源组之间的连通性测试。

    • 单击展开“源端配置”触发连通性测试,会对整个迁移任务的连通性做校验。
    • 单击源端和目的端数据源和migration资源组中的“测试”按钮进行检测。

      网络连通性检测异常可先参考数据源和资源组网络不通如何排查?章节进行排查。

  6. 配置源端参数。

    各同步场景下选择需要同步库表的方式请参考下表。

    表5 选择需要同步的库表

    同步场景

    配置方式

    单表

    选择需要迁移的MongoDB集合。
    图4 选择库表

  7. 配置目的端参数。

    • 源库表和目标匹配策略。

      各同步场景下源端库表和目标端库表的匹配策略请参考下表。

      表6 源库表和目标匹配策略

      同步场景

      配置方式

      单表

      • Schema匹配策略。
        • 与来源库同名:数据将同步至与来源MongoDB库名相同的DWS Schema中。
        • 自定义:数据将同步至自行指定的DWS Schema中。
      • 表匹配策略。
        • 与来源表同名:数据将同步至与来源PostgreSQL表名相同的DWS表中。
        • 自定义:数据将同步至自行指定的DWS表中。
          图5 整库场景下源库表和目标匹配策略
          说明:

          自定义匹配策略时,支持用内置变量#{source_db_name}和#{source_table_name}标志来源MySQL的库名和表名,其中表匹配策略必须包含#{source_table_name}。

    • DWS参数配置。

      其余DWS目的端参数说明请参考下表。

      图6 DWS配置项
      表7 DWS配置项

      配置项

      默认值

      单位

      配置说明

      写入模式

      UPSERT MODE

      -

      • UPSERT MODE:批量更新入库模式。
      • COPY MODE:DWS专有的高性能批量入库模式。

      批写最大数据量

      50000

      单批次写入DWS数据的条数,可根据表数据大小和作业内存使用适当调整。

      定时批写时间间隔

      3

      支持配置每批次数据写入DWS的时间间隔。

      高级配置

      -

      -

      支持通过参数配置部分高级功能,参数详情可参考表8 DWS高级配置一览表

      表8 DWS高级配置一览表

      参数名

      参数类型

      默认值

      单位

      参数说明

      sink.buffer-flush.max-size

      int

      512

      MB

      写入DWS时每批数据的最大字节数,可根据作业配置内存和数据大小适当调整。

      sink.keyby.enable

      boolean

      true

      -

      数据分流开关,在多并发场景下开启数据分流可将数据按规则分配给不同的工作进程写入目的端,可提高写入性能。

      sink.keyby.mode

      string

      table

      -

      数据分流模式,可选填写:

      • pk:按数据主键值进行分流。
      • table:按表名进行分流。
        说明:
        • 多并发场景下,若开启DDL功能,只能按表名分流,否则可能导致数据不一致。
        • 确保不会有DDL时,可以选择按主键分流,多并发场景下可提高写入性能。

      sink.field.name.case-sensitive

      boolean

      true

      -

      同步数据大小写敏感开关,开启后在同步数据时对库名、表名、字段名大小写均敏感。

      sink.verify.column-number

      boolean

      false

      -

      校验数据列数的开关,链路默认以同名映射方式同步数据,不检验是否所有列均同步。

      开启本开关后,若源端与目的端列数不同将认为是数据不一致的场景,导致作业异常。

      sink.server.timezone

      string

      本地时区

      -

      连接目的端数据库时指定的session时区,支持时区标准写法,例如UTC+8等。

      logical.delete.enabled

      boolean

      false

      -

      逻辑删除开关,开启本开关后,需要目的端包含删除标记列,在源端删除数据,不会将目的端对应的数据删除,而是将删除标记列设为true,表示该数据在源端已不存在。

      logical.delete.column

      string

      logical_is_deleted

      -

      逻辑删除标记列名称,默认为logical_is_deleted,支持用户自定义。

  8. 刷新源表和目标表映射,检查映射关系是否正确,同时可根据需求修改表属性、添加附加字段,并通过“自动建表”能力在目的端DWS数据库中建出相应的表。

    图7 源表与目标表映射
    • 目标字段赋值:单击操作列“目标字段赋值”可自定义MongoDB到DWS的字段映射情况。同时用户可以为所有DWS目标端的字段,设置对应的源表映射字段,或者设置手动赋值的字符串内容。
      • 列名:目的端DWS表字段的名称。
      • 类型:目的端DWS表字段的类型。
      • 字段值:目的端DWS表字段的取值来源。
        表9 字段值的取值方式

        类型

        示例

        手动赋值

        任意字符。

        源表字段

        预设的源表字段:下拉选项中获取或者手动输入的,符合MongoDB字段限制的字段名(参考表4-数据库限制)。

        extraColumns:自带的特殊字段名,使用该字段,会将所有没有设置过映射的MongoDB源端字段,写入到该字段中传输到DWS中。

        • Migration当前不支持MongoDB源端同步链路的自动建表。
        • 自动建表时对应的字段类型映射关系请参见字段映射关系章节。

  9. 配置任务属性。

    表10 任务配置参数说明

    参数

    说明

    默认值

    执行内存

    作业执行分配内存,跟随处理器核数变化而自动变化。

    8GB

    处理器核数

    范围:2-32。

    每增加1处理核数,则自动增加4G执行内存和1并发数。

    2

    并发数

    作业执行支持并发数。该参数无需配置,跟随处理器核数变化而自动变化。

    1

    自动重试

    作业失败时是否开启自动重试。

    最大重试次数

    “自动重试”为是时显示该参数。

    1

    重试间隔时间

    “自动重试”为是时显示该参数。

    120秒

    是否写入脏数据

    选择是否记录脏数据,默认不记录脏数据,当脏数据过多时,会影响同步任务的整体同步速度。

    • 否:默认为否,不记录脏数据。

      表示不允许脏数据存在。如果同步过程中产生脏数据,任务将失败退出。

    • 是:允许脏数据,即任务产生脏数据时不影响任务执行。
      允许脏数据并设置其阈值时:
      • 若产生的脏数据在阈值范围内,同步任务将忽略脏数据(即不会写入目标端),并正常执行。
      • 若产生的脏数据超出阈值范围,同步任务将失败退出。
        说明:

        脏数据认定标准:脏数据是对业务没有意义,格式非法或者同步过程中出现问题的数据;单条数据写入目标数据源过程中发生了异常,则此条数据为脏数据。 因此只要是写入失败的数据均被归类于脏数据。

        例如,源端是VARCHAR类型的数据写到INT类型的目标列中,则会因为转换不合理导致脏数据不会成功写入目的端。用户可以在同步任务配置时,配置同步过程中是否写入脏数据,配置脏数据条数(单个分片的最大错误记录数)保证任务运行,即当脏数据超过指定条数时,任务失败退出。

    脏数据策略

    “是否写入脏数据”为是时显示该参数,当前支持以下策略:

    • 不归档:不对脏数据进行存储,仅记录到任务日志中。
    • 归档到OBS:将脏数据存储到OBS中,并打印到任务日志中。

    不归档

    脏数据写入连接

    “脏数据策略”选择归档到OBS时显示该参数。

    脏数据要写入的连接,目前只支持写入到OBS连接。

    -

    脏数据目录

    脏数据写入的OBS目录。

    -

    脏数据阈值

    是否写入脏数据为是时显示该参数。

    用户根据实际设置脏数据阈值。

    说明:
    • 脏数据阈值仅针对每个并发生效。比如阈值为100,并发为3,则该作业可容忍的脏数据条数最多为300。
    • 输入-1表示不限制脏数据条数。

    100

    添加自定义属性

    支持通过自定义属性修改部分作业参数及开启部分高级功能,详情可参见任务性能调优章节。

    -

  10. 提交并运行任务。

    作业配置完毕后,单击作业开发页面左上角“提交”,完成作业提交。

    图8 提交作业

    提交成功后,单击作业开发页面“启动”按钮,在弹出的启动配置对话框按照实际情况配置同步位点参数,单击“确定”启动作业。

    图9 启动配置
    表11 启动配置参数

    参数

    说明

    同步模式

    • 增量同步:从指定时间位点开始同步增量数据。
    • 全量+增量:先同步全量数据,随后实时同步增量数据。

    时间

    增量同步需要设置该参数,指示增量同步起始的时间位点。

    说明:

    配置的位点时间早于Binlog日志最早时间点时,默认会以日志最新时间点开始消费。

  11. 暂停同步任务并修改作业内容。

    作业在运行过程中,允许用户通过暂停按钮,暂停该同步任务。用户可以在任务暂停后修改作业内容,提交作业版本后再恢复同步任务。

    当前支持的修改操作有:

    • 在目标字段赋值中增、减加字段的映射规则。
    • 修改全局参数,如处理器核数、是否自动重试等内容。
    • 修改数据源的高级属性。

    当前不支持的修改操作有:

    • 在目标字段赋值中,修改已有的字段映射规则。如,将原本是源表字段赋值的规则,修改成手动赋值的规则。
    • 修改源端的集合或修改目标端的表。

相关文档