在 DataX 中,针对数据库类的数据源,常见有两种同步模式: JDBC 模式 和 LOAD 模式。两者的区别主要体现在 实现方式、性能和适用场景 上:
1. JDBC 模式
-
原理:通过标准的 JDBC 驱动,使用 SQL 查询 (
SELECT ...
) 读取源库数据,再用INSERT ...
/UPDATE ...
写入目标库。 -
特点:
-
跨数据库通用(只要有 JDBC 驱动即可)。
-
使用 SQL 语句,逻辑简单,功能完备。
-
数据走 JVM 内存通道,由 DataX 进程负责搬运。
-
性能受限于:
-
网络传输效率
-
JVM 内存拷贝
-
单条/批量 insert 的执行效率
-
-
-
适用场景:
-
数据量不大(百万级以下或小批量任务)。
-
需要跨数据库类型(如 MySQL → Oracle、SQLServer → PostgreSQL)。
-
没有特殊的数据库直连导入工具。
-
2. LOAD 模式
-
原理:利用数据库自身的 批量装载接口(如 MySQL 的
LOAD DATA INFILE
、Oracle 的SQL*Loader
),直接调用数据库原生的 Bulk Load 机制。 -
特点:
-
通常通过 生成临时文件(CSV/TSV 等),再由数据库原生命令快速批量导入。
-
不走 DataX 的 JDBC Insert 通道,数据直接落盘 → 数据库 Bulk Load → 入库。
-
导入速度远快于 JDBC 模式(尤其在千万级、亿级数据同步时)。
-
依赖数据库本身的工具支持(不是所有数据库/环境都支持 LOAD)。
-
-
适用场景:
-
大规模数据迁移(千万/亿级以上)。
-
源和目标数据库相同或兼容(常见于 MySQL → MySQL,Oracle → Oracle)。
-
可以容忍临时文件的生成和落地。
-
3. 总结对比
特性 | JDBC 模式 | LOAD 模式 |
---|---|---|
实现方式 | JDBC 驱动执行 SQL | 数据库原生 Bulk Load |
数据路径 | DataX JVM 内存中转 | 临时文件 → 数据库 Bulk Loader |
性能 | 一般(依赖 insert 批次和网络) | 高效(适合大批量导入) |
跨库支持 | 支持(通用 JDBC) | 一般仅限同类库 |
适用场景 | 小批量、跨库同步 | 大批量、同库高速导入 |
👉 总结一句:
JDBC 模式 兼容性强、通用,但性能一般;
LOAD 模式 性能极佳,但局限于同类数据库且需要环境支持。