支持分布式数据库批量数据导入,应用场景如:异构数据库之间的数据迁移,如将oracle数据库数据导出为数据文件,可直接使用该工具导入到goldendb数据库中;用户应用端生成的数据批量保存到数据库中等。 支持分布式数据库批量数据导出;应用场景除了异构数据库之间的数据迁移外,还可用作为数据逻辑备份,下游用户应用进行数据分析、统计、处理等。 目前数据接口形式为文件接口。
分布式数据库批量导入导出支持两种典型组网方式,介绍如下。
典型组网图如下,包括数据文件、文件传输节点、计算节点、数据存储节点。

● 各节点职责介绍:
● 数据文件:导入导出时目标文件,CSV格式,导入时将CSV数据导入到数据库表中,导出时将数据库表中数据导出为CSV格式。
● 文件传输节点:导入导出主要执行模块,工具为LDS,负责读取、校验CSV文件,通过计算节点插入、查询数据库。导出时还有工具为goldendumper,也支持经过计算节点获取表数据并落盘为CSV文件。
● 计算节点:分布式数据库代理节点,执行增删改查等所有数据操作。
● 存储节点:实际存储数据节点,分布式管理。
典型组网图如下,包括:数据文件、文件传输节点、元数据管理节点、集群管理节点、存储节点代理节点、数据存储节点。

注:长虚线代表表示信息,短虚线表示文件流。
● 各节点职责介绍:
● 数据文件:介绍如上。
● 文件传输节点(LDS):数据导入导出服务器,导入导出主要执行模块,此处goldendumper模块不支持文件传输协议通道。
● 元数据管理节点(MDS):管理分布式数据库所有元数据,在本功能中提供表相关信息。
● 集群管理节点(CM):数据库集群管理中心,在本功能中负责转发LDS控制命令到存储节点代理节点,接收汇总代理节点响应并回复LDS。
● 存储代理节点(DBAgent):存储节点监控代理程序,在本功能中负责连接数据库节点,实际执行LDS下发的导入导出命令。
1)数据导入
数据导入功能LDS内部设计简单原理如下:

如上图示描述的为一个导入任务,内部设计一个IO线程负责读取CSV文件,按行读取每读取一个批次即放入到解析队列。解析队列设计多个线程可配置,获取解析数据后进行合法性校验、字符集转化、列字段处理等,解析完成放入执行队列。执行队列获取批数据后,按照一定大小数据量连接计算节点执行,此处执行线程可配置多个计算节点,并具有高可用特性。执行失败的数据继续放入后续的落盘队列生成失败数据、错误数据,任务执行后用户可根据具体情况,重试错误数据、修复异常数据等,从而完成一个完整的数据导入过程。
2)数据导出

1)Controller模块:
①制定策略(SQL查询是否并发等),调度三类worker开始任务。
②启动巡检线程,监控worker运行状态及异常退出。
③巡检线程保持客户端会话,通知任务进度。
2)SQLQueryer模块:
①连接计算节点执行查询,查询一个批次加入到后端队列。
②设计考虑支持多条链路并发查询。
3)CSVAssambler模块:
①队列获取批次,添加行列控制字符拼装行CSV。
②理论上该模块纯内存操作,不是性能瓶颈点,先设计一个线程。
4)CSVDumper模块:
①队列获取批次将拼装好的csv落盘。
②落盘场景,目前支持合并落盘为一个文件。
● 说明:
1)goldendumper仅支持数据导出功能,介绍请参见产品包目录:tools\DataLoadTool
2)当前可通过两种方式执行导入:1,计算节点通道;2,文件传输协议通道(下面将介绍)。默认通过计算节点通道导入,此时配置项load_enable_ftp=0。若需使用文件传输协议通道导入,修改load_enable_ftp=1,然后使用dbtool -lds -lc进行动态生效即可。
1 数据导入时序介绍

LDS执行导入任务时,具体控制流如下:
1)用户使用dbtool客户端,向LDS 服务器发送导入请求,解析命令正确后,向 MDS 模块发送获取元数据请求,然后校验元数据信息。
2)校验通过后,LDS服务器本地分裂数据文件,当分裂文件达到配置的下发数目时,向 CM 节点发送导入命令,CM根据请求信息转发到各DBAgent节点,DBAgent连接LDS节点执行数据文件下载、导入(并发执行)。
3) DBAgent执行结束后,向 CM 回复数据导入响应,CM转发响应到LDS服务器。
4) LDS汇总分裂文件导入结果,待收到所有文件结果后,向dbtool客户端打印本次导入详细结果信息。
导入过程数据流如下:外部系统 --> LDS --> DBAgent --> DN节点
注:DN为数据节点
2 数据导出时序介绍

LDS执行导出任务时,控制流如下:
1)用户使用 dbtool 客户端发起数据导出请求,LDS 校验命令通过后,向 MDS 请求元数据信息,根据元数据信息获取数据分发节点。
2)LDS 发送导出数据请求到CM节点,CM 根据导出请求转发到指定数据节点的DBAgent,此时DBAgent节点连接数据库执行数据导出命令。
3)各DBAgent执行数据导出后,将结果发送给CM节点汇总,然后转发汇总结果到LDS节点。该步骤成功后,LDS发送文件上传请求,将各DBAgent导出的数据文件上传到LDS服务器。流程与数据导出请求相同。
4)LDS收到CM汇总发送的上传文件响应后,本地将各DBAgent节点上传的数据文件合并为一个完整的数据文件。
5)同时继续发送各DBAgent上子数据文件删除命令,然后等待CM汇总删除文件响应。
6)等以上流程结束以后,向dbtool客户端发送导出命令结果信息。
导出过程数据流如下:DB节点 --> DBAgent --> LOAD Server --> 外部系统




