工具简介
MyLoader 是一款命令行工具,可以快速恢复 TDSQL Boundless 数据库,并支持从备份文件中恢复数据,不需要先创建数据库。MyLoader 还支持恢复到指定时间点的备份文件,可以指定要恢复的数据表和数据行。
MyLoader 普通导入模式导入性能低,适用于小数据量的导入。
TDSQL Boundless 支持在 MyLoader 基础上开启 Bulk Load 模式,将大量数据快速加载到数据库中,提高数据导入的速度和效率,减少了数据库的 I/O 操作和系统资源的消耗。
使用限制
以下情况,不支持 Bulk Load 模式,系统将继续使用 MyLoader 普通模式导入数据。
仅优化
INSERT/ REPLACE/ LOAD DATA语句,其他语句不支持 Bulk Load 模式。INSERT/ REPLACE形式的 SQL,必须有多个 VALUES。如果只有一行数据,不支持 Bulk Load 模式。INSERT SET/ REPLACE SET形式的 SQL 只能写入一行数据,不支持 Bulk Load 模式。不优化
INSERT ON DUPLICATE KEY UPDATE。因为Bulk Load模式下不会去检测已存在的 Primary Key,也就无法进行UPDATE操作。对于
INSERT,实际上执行的是REPLACE语法。即当导入的新数据与旧数据存在主键冲突时,并不会报错,而是直接静默地用新数据把旧数据覆盖掉。对于含有
ignore语法的 SQL 语句(INSERT IGNORE / LOAD IGNORE / LOAD LOCAL),进行 Bulk Load 优化时,需要由源端数据保证数据唯一性,即导入的新数据与旧数据不存在主键冲突,导入的新数据之间也不存在主键冲突。否则,由于 Bulk Load 模式下,主键数据会被静默地覆盖掉,只保留一行,这会违反ignore语法(丢弃新数据保留旧数据)。当表上有
secondary index,进行 Bulk Load 优化时,需要由源端数据保证数据唯一性,即导入的新数据与旧数据不存在主键冲突,导入的新数据之间也不存在主键冲突。否则,由于 Bulk Load 模式下,主键数据会被静默地覆盖掉,只保留一行,但是二级索引数据编码后的 key 是没有唯一性的,就会出现二级索引数据的新旧两条记录都被保存下来了,导致主键和二级索引不一致。当表上有
unique secondary index时,需要由源端数据保证数据唯一性,即既不存在主键冲突,也不违反二级索引数据的唯一性。否则会导致主键和二级索引不一致,或者打破二级索引数据唯一性的约束。系统表不建议发生大规模写入。一旦系统表有问题,集群将无法启动。因此 TDSQL Boundless 不支持系统表的 Bulk Load 模式导入。
存在触发器的表,不支持 Bulk Load 模式导入。
Bulk Load 模式目前与 DDL 是互斥的。即表上若存在进行中的 DDL,不支持 Bulk Load 模式;若正处于 Bulk Load 模式下导数据,新的 DDL 请求会被拒绝。
Bulk Load Ingest 导入的数据,不会生成 binlog,不会同步到灾备集群的备实例。
运行环境要求
建议部署单独的导入机(即 MyLoader 将数据发往的目标节点),在预规划 RG 分布时,导入机上不放置 RG。导入完毕后,可以通过 RG 迁移(打开 MC 自动均衡)将 RG 副本重新平衡到导入机上,相当于把导入机重新作为一个普通的存算混合节点;也可以下线裁撤掉导入机。这是因为独占 IO 和 CPU 可以提供更好的导入性能。
内存和 CPU:导入机建议使用16核以上的 CPU 和64GB以上的内存以获得更好的性能。
存储空间:导入机至少需要(事务大小 × 并发数)的存储空间,通常与数据存储节点保持一致即可。
其他配置与集群中普通的混合节点或者数据存储节点保持一致即可。
Bulk Load工作原理

步骤 | 说明 |
1 | 通过导入工具(如 MyLoader)读取数据文件,并将数据发送至 SQLEngine。 |
2 | 无序数据写入临时 Chunk 文件中进行外部排序,再按序输出到 external SST 文件中。 有序数据直接存入 external SST 文件。 |
3 | 有序的 external SST 文件,以 RG 为单位进行组织存放。 |
4 | 将 external SST 文件,发送到每个 RG 的每个副本上。 |
5 | 将 external SST 文件中的数据加载到 TDStore。 |