跳至主要內容

数据导入导出

Klustron大约 4 分钟

数据导入导出

Klustron(原KunlunBase) 支持从常见数据库系统全量导入数据和流式导入增量的数据更新。

全量导入数据

如果从PostgreSQL导出数据,只需要在源数据库实例中全量dump 数据,然后执行Klustron的 copy命令open in new window即可导入。 如果从其他数据库系统导出数据,则要确保其SQL 语法可以被Klustron正确执行。

从MySQL导入

如果源数据库系统是MySQL,在Klustron-1.2版本开始,Klustron已经支持MySQL常用DDL语法,可以直接处理mysql-dump等工具的导出文件。

Klustron-1.1 的特殊步骤

Klustron-1.1 不支持MySQL的DDL语法,但是Klustron提供了 DDL2Kunlun 工具用于处理这些DDL SQL语句,把他们转换成Klustron可以执行的DDL SQL语法。所以需要预先使用该工具处理后给Klustron送入自动处理后的SQL 语句。

全量灌入数据的提速方法

如果有大量数据文件需要灌入,最好开多个连接,在每个连接中处理一部分数据文件,最好是每个连接灌入一个数据文件。这样就可以最大化地并行灌入,从而最大化地利用系统资源,大幅缩短灌数据的时间。在并行灌入时,如果数据文件 不是以表为单位拆分 的,并且事务的隔离级别不是READ COMMITTED,(Klustron的事务隔离级别默认值就是READ COMMITTED)那么需要设置配置文件中的事务隔离级别 transaction_isolation='read committed' 然后运行pg_ctl reload 命令open in new window重新加载配置文件。

如果用于灌入数据的数据文件包含大量auto-commit 的 insert语句,而不是在一个显式事务中插入大量数据,那么这数百万甚至数亿个事务提交的开销,会跟磁盘带来巨大的负载,使灌数据的速度大大降低。此时要么修改源数据文件,改为在每个INSERT语句或者显式事务中插入大量行,从而减少事务提交的次数,要么按照如下方法临时修改集群节点设置从而大幅降低事务提交的IO开销。

灌入数据临时提速设置

如果全量灌入数据时希望加速灌入速度,并且这个数据库集群在完成数据灌入之前,不会被用于生产系统,那么可以考虑对集群的计算节点和存储shard主做如下设置,在灌入完成后重新改回原来的值。这样,灌入速度会明显加快,不过如果灌入数据期间计算节点或者shard主节点异常退出(断电,软硬件故障等),则需要从头重新安装数据库集群然后灌入数据。

这些设置对于流式灌入提速也有效,不过流式灌入通常是一个持续的过程,此时集群可能已经在使用中,那么就不应该做这些提速设置修改了。如果流式灌入期间仍然符合上述全部提速要求,则仍然可以按照相同方法修改这些变量并且在完成灌入后恢复这些变量。

存储节点
| 变量名称                        | 灌数据前临时修改为此值  | 灌完数据后改回为此值  |
|--------------—------------------|-------------------------|-----------------------|
|  innodb_doublewrite             | 0                       | 1                     |
|  innodb_flush_log_at_trx_commit | 0                       | 1                     |
|  sync_binlog                    | 0                       | 1                     |
|  enable_fullsync                | false                   | true                  |

流式导入增量更新

对于从大多数数据库系统做数据流式导入(比如经典数据库Oracle, DB2, SQL Server, Sybase, Informix, PostgreSQL等),可以使用第三方工具比如OGG, DSG等;对于从MySQL数据库做流式导入,对于Klustron-1.1 版本,可以使用Klustron提供的 Binlog2sync工具 来流式导入数据更新;从 Klustron-1.2版本开始,可以使用Klustron的CDC工具做流式导入。

如果从TiDB等数据库导入全量和增量数据,则这些数据库提供了数据全量和增量导出工具,详见相关工具说明文档。