自制数据库迁移工具-C版-04-HappySunshineV1.4-(支持Gbase8a、PG)

news2024/9/19 12:46:50

目录

一、环境信息

二、简述

三、架构图

四、升级点

五、支持功能

六、安装包下载地址

七、配置参数介绍

八、安装步骤

1、配置环境变量

2、生效环境变量

3、检验动态链接是否正常

4、修改配置文件MigrationConfig.txt

(1)Gbase8a -> Gbase8a

(2)Pg -> Gbase8a

九、运行效果

1、Gbase8a -> Gbase8a

2、Pg -> Gbase8a

十、性能对比

1、Gbase8a -> Gbase8a

(1)测试数据

(2)对比表格

(3)HappySunshine截图

INSERT

LOAD

(4)GBaseMigrationToolkit截图


一、环境信息

名称
CPUIntel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
操作系统CentOS Linux release 7.9.2009 (Core)
内存4G
逻辑核数4
Gbase8a版本8.6.2-R43.34.27468a27
HappySunshine版本V1.4
Pg版本PostgreSQL 16.3

二、简述

心血来潮写了一个小工具,功能还在逐步完善中(其实是还在陆续补充新的C语言相关知识),有什么好的建议,大家可以在评论或私信告知。

三、架构图

我的画图水平感觉还不错。

b57fa119095e48899dc4b33f7c3a8b50.png

1、管理者进程启动。

2、管理者进程读取配置文件参数。

3、管理者进程创建共享内存。

4、管理者进程拉起执行者进程。

5、管理者进程通过共享存储中的任务队列,将需要迁移的数据放入队列中。

6、执行者进程创建线程池。

6、执行者进程一个生产者线程,N个消费者线程。

7、生产者线程从共享存储中的任务队列拿取任务,查询需要迁移表的条数,来决定迁移方式:LOAD或INSERT。如果进程数大于1,任务中包含的表有一个整型主键,会自动拆分数据为N份(进程数)。

8、如果是LOAD,由生产者线程单独完成。

9、如果是INSERT,将读出去的数据行指针打包,发给线程池中的任务队列。

10、消费者线程从线程池中的任务队列拿取任务。

11、消费者线程将任务包解开,将数据清洗,并放入自己的缓冲区中,清洗完再把INSERT命令发给Gbase8a。

12、消费者线程执行任务失败,将任务状态置为错误,待生产者线程发现任务失败后,终止任务下发给线程池队列,重新到共享存储中的任务队列拿取任务。

13、消费者线程执行任务成功,就继续执行。

14、管理者进程将任务发送完成之后,将任务结束标记放入共享存储中的任务队列中。

15、生产者线程从共享存储中的任务队列中拿到任务结束标记后。等待屏障,也就是等待消费者线程完成所拿到的任务。

16、执行者进程等待所有的消费者、生产者结束后,回收线程池资源,释放自身所占用资源,结束退出。

17、管理者进程等待所有执行者进程结束后,回收进程资源,释放自身所占用资源,结束退出。

四、升级点

序号名称备注
1性能提升INSERT方式将数据清洗逻辑,放到了消费者线程执行。
2出错任务终止原:单表迁移出错,会将错误数据落地,继续迁移剩余数据。
现:单表迁移出错,会将错误数据落地,终止此表任务。
3PG到Gbase8a库级数据迁移INSERT方式迁移,表定义及其他暂不支持。
4PG到Gbase8a表级数据迁移INSERT方式迁移,表定义及其他暂不支持。
5主键切分数据PG到Gbase8a迁移时,PG表有一个整型主键,会自动拆分数据为N份(进程数)。

五、支持功能

序号功能备注
1Gbase8a到8a数据迁移INSERT、LOAD方式迁移,表定义及其他暂不支持。
2PG到Gbase8a数据迁移INSERT方式迁移,表定义及其他暂不支持。

六、安装包下载地址

GITHUB-HappySunshine-release版下载地址

七、配置参数介绍

序号参数备注
1[Tool]Tool标签头,下面只能写Tool相关参数。
2ProcessNums程序迁移时开的进程数。
3Level迁移级别。
1:表级迁移,SpecifiedTab生效。
2:库级迁移,MigrationDb、BlackList生效。
4OsInfoLOAD数据时使用。
样例:'工具所在操作系统IP;操作系统用户;操作系统用户密码;'
长度同下方的数据库IP;数据库用户名;数据库用户密码;
5OneBatchNums一个批次插入的数据条数。(INSERT方式)
6SwitchNumsMigrationType为0的情况下,支持此参数,此数以上使用LOAD,以下使用INSERT。
7MigrationType迁移类型,支持0、1。
0 : Gbase8a     -> Gbase8a
1 : PostgreSql  -> Gbase8a
8[Source] Source标签头,下面只能写Source相关参数。
9ConnInfo样例:'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
(1)单个IP长度限制19,数据库IP地址。
(2)单个用户名长度限制19,数据库用户名。
(3)单个用户名密码长度限制29,数据库密码。
(4)单个数据库名长度限制29,数据库名。
(5)数据库端口。
(6)长度限制9,数据库连接字符集,支持utf8和gbk。
10MigrationDb库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
MigrationType为1的情况下,此为PG的模式名。
11BlackList库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。
12SpecifiedTabMigrationType为0的情况下,表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'

MigrationType为1的情况下,表级迁移参数,格式:'源端查询字段;源端模式名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'

如果没有特定条件,可以不写,但必须有分隔符,举例如下:
';czg;testtab;;;zxj;NewTab;'
这样相当于testtab迁移到NewTab,没有任何特殊条件。
这个可以有多个标签,想迁移多少张表就写几个标签。
13[Target]Target标签头,下面只能写Target相关参数。
14ConnInfo参考Source的。
15MigrationDb参考Source的。

八、安装步骤

大家也可以参考Readme.txt内容。

1、配置环境变量

/home/gbase/.bashrc中添加如下

[gbase@czg0 Exec]$ vim /home/gbase/.bashrc
export HAPPY_SUNSHINE_HOME=/home/gbase/HappySunshine
export LD_LIBRARY_PATH=$HAPPY_SUNSHINE_HOME/Libs:$LD_LIBRARY_PATH

2、生效环境变量

source /home/gbase/.bashrc

3、检验动态链接是否正常

[gbase@czg0 Exec]$ pwd
/home/gbase/HappySunshine/Exec

[gbase@czg0 Exec]$ ldd HsManager 
        linux-vdso.so.1 =>  (0x00007ffefa1e1000)
        libPublic.so => /home/gbase/HappySunshine/Libs/libPublic.so (0x00007fcd61e61000)
        libLog.so => /home/gbase/HappySunshine/Libs/libLog.so (0x00007fcd61c5c000)
        libSqQueue.so => /home/gbase/HappySunshine/Libs/libSqQueue.so (0x00007fcd61a56000)
        libPthread.so => /home/gbase/HappySunshine/Libs/libPthread.so (0x00007fcd61849000)
        libFileOperate.so => /home/gbase/HappySunshine/Libs/libFileOperate.so (0x00007fcd61643000)
        libDataConvertion.so => /home/gbase/HappySunshine/Libs/libDataConvertion.so (0x00007fcd6143f000)
        libProcess.so => /home/gbase/HappySunshine/Libs/libProcess.so (0x00007fcd61236000)
        libGbase8aDb.so => /home/gbase/HappySunshine/Libs/libGbase8aDb.so (0x00007fcd6102f000)
        libgbase.so.16 => /home/gbase/HappySunshine/Libs/libgbase.so.16 (0x00007fcd60b6f000)
        libHashTable.so => /home/gbase/HappySunshine/Libs/libHashTable.so (0x00007fcd6096b000)
        libPgDb.so => /home/gbase/HappySunshine/Libs/libPgDb.so (0x00007fcd60763000)
        libpq.so.5 => /home/gbase/HappySunshine/Libs/libpq.so.5 (0x00007fcd6050d000)
        libHsPublic.so => /home/gbase/HappySunshine/Libs/libHsPublic.so (0x00007fcd6030a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fcd5ff3c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcd5fd20000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fcd5fb1c000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fcd5f81a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fcd62064000)

[gbase@czg0 Exec]$ ldd G8aExecutor 
        linux-vdso.so.1 =>  (0x00007fff53dab000)
        libPublic.so => /home/gbase/HappySunshine/Libs/libPublic.so (0x00007fb6e7799000)
        libLog.so => /home/gbase/HappySunshine/Libs/libLog.so (0x00007fb6e7594000)
        libSqQueue.so => /home/gbase/HappySunshine/Libs/libSqQueue.so (0x00007fb6e738e000)
        libPthread.so => /home/gbase/HappySunshine/Libs/libPthread.so (0x00007fb6e7181000)
        libFileOperate.so => /home/gbase/HappySunshine/Libs/libFileOperate.so (0x00007fb6e6f7b000)
        libDataConvertion.so => /home/gbase/HappySunshine/Libs/libDataConvertion.so (0x00007fb6e6d77000)
        libProcess.so => /home/gbase/HappySunshine/Libs/libProcess.so (0x00007fb6e6b6e000)
        libGbase8aDb.so => /home/gbase/HappySunshine/Libs/libGbase8aDb.so (0x00007fb6e6967000)
        libgbase.so.16 => /home/gbase/HappySunshine/Libs/libgbase.so.16 (0x00007fb6e64a7000)
        libMyPool.so => /home/gbase/HappySunshine/Libs/libMyPool.so (0x00007fb6e62a4000)
        libHashTable.so => /home/gbase/HappySunshine/Libs/libHashTable.so (0x00007fb6e60a0000)
        libHsPublic.so => /home/gbase/HappySunshine/Libs/libHsPublic.so (0x00007fb6e5e9d000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fb6e5acf000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb6e58b3000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fb6e56af000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fb6e53ad000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb6e799c000)

[gbase@czg0 Exec]$ ldd Pg2G8aExecutor 
        linux-vdso.so.1 =>  (0x00007ffcefb8f000)
        libPublic.so => /home/gbase/HappySunshine/Libs/libPublic.so (0x00007f3ce49a4000)
        libLog.so => /home/gbase/HappySunshine/Libs/libLog.so (0x00007f3ce479f000)
        libSqQueue.so => /home/gbase/HappySunshine/Libs/libSqQueue.so (0x00007f3ce4599000)
        libPthread.so => /home/gbase/HappySunshine/Libs/libPthread.so (0x00007f3ce438c000)
        libFileOperate.so => /home/gbase/HappySunshine/Libs/libFileOperate.so (0x00007f3ce4186000)
        libDataConvertion.so => /home/gbase/HappySunshine/Libs/libDataConvertion.so (0x00007f3ce3f82000)
        libProcess.so => /home/gbase/HappySunshine/Libs/libProcess.so (0x00007f3ce3d79000)
        libGbase8aDb.so => /home/gbase/HappySunshine/Libs/libGbase8aDb.so (0x00007f3ce3b72000)
        libgbase.so.16 => /home/gbase/HappySunshine/Libs/libgbase.so.16 (0x00007f3ce36b2000)
        libMyPool.so => /home/gbase/HappySunshine/Libs/libMyPool.so (0x00007f3ce34af000)
        libPgDb.so => /home/gbase/HappySunshine/Libs/libPgDb.so (0x00007f3ce32a7000)
        libpq.so.5 => /home/gbase/HappySunshine/Libs/libpq.so.5 (0x00007f3ce3051000)
        libHashTable.so => /home/gbase/HappySunshine/Libs/libHashTable.so (0x00007f3ce2e4d000)
        libHsPublic.so => /home/gbase/HappySunshine/Libs/libHsPublic.so (0x00007f3ce2c4a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3ce287c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3ce2660000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3ce245c000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f3ce215a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3ce4ba7000)

如果有动态库没有找到,就要看看环境变量是否配置正确或是否生效。

4、修改配置文件MigrationConfig.txt

具体的内容我都在配置文件中写好,大家按照规则来就行。

(1)Gbase8a -> Gbase8a

//*代表不可以空
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//SpecifiedTab参数可以有多个。
 
[Tool]                                                              //工具信息。
ProcessNums      : '2;'                                             //*程序迁移时开的进程数。
Level            : '1;'	                                            //*迁移级别。
                                                                    //2:库级迁移,BlackList生效。
                                                                    //1:表级迁移,SpecifiedTab生效。
OsInfo           : '192.168.142.12;gbase;gbase;'                    //*Gbase8a -> Gbase8a LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;
OneBatchNums     : '80000;'                                         //*一个批次插入的数据条数。(INSERT方式)
SwitchNums       : '2000000;'                                       //*此数以上使用LOAD,以下使用INSERT。
MigrationType    : '0;'                                             //*迁移类型,支持0、1。
                                                                    //0 : Gbase8a     -> Gbase8a
                                                                    //1 : PostgreSql  -> Gbase8a

[Source]                                                            //源端信息。
ConnInfo         : '192.168.142.12;root;;czg;5258;utf8;'            //'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
                                                                    //*单个IP长度限制19,数据库IP地址。
                                                                    //*单个用户名长度限制19,数据库用户名。
                                                                    //*单个用户名密码长度限制29,数据库密码。
                                                                    //*单个数据库名长度限制29,数据库名。
                                                                    //*数据库端口。
                                                                    //*长度限制9,数据库连接字符集,支持utf8和gbk。
MigrationDb      : 'czg;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
                                                                    //MigrationType为1的情况下,此为PG的模式名。
BlackList        : 'testtab;'                                       //库级迁移参数,支持50个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        
SpecifiedTab     : 'a,b,c;czg;testtab;Limit 10;x,y,z;zxj;NewTab;'            
                                                                    //表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                    //如果没有特定条件,可以不写,但必须有分隔符,举例如下:
                                                                    //';czg;testtab;;;zxj;NewTab;'
                                                                    //这样相当于testtab迁移到NewTab,没有任何特殊条件。
                                                                    //这个可以有多个标签,想迁移多少张表就写几个标签。
SpecifiedTab     : ';czg;testtab_copy;;;zxj;testtab_copy;'
SpecifiedTab     : ';czg;czg;;;zxj;czg;'

[Target]                                                            //目的端信息。
ConnInfo         : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'
MigrationDb      : 'zxj;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。

(2)Pg -> Gbase8a

//*代表不可以空
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//SpecifiedTab参数可以有多个。
 
[Tool]                                                           //工具信息。
ProcessNums   : '2;'                                             //*程序迁移时开的进程数。
Level         : '1;'	                                         //*迁移级别。
                                                                 //2:库级迁移,BlackList生效。
                                                                 //1:表级迁移,SpecifiedTab生效。
OsInfo        : '192.168.142.12;gbase;gbase;'                    //*Gbase8a -> Gbase8a LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;
OneBatchNums  : '80000;'                                         //*一个批次插入的数据条数。(INSERT方式)
SwitchNums    : '2000000;'                                       //*MigrationType为0的情况下,支持此参数,此数以上使用LOAD,以下使用INSERT。
MigrationType : '1;'                                             //*迁移类型,支持0、1。
                                                                 //0 : Gbase8a     -> Gbase8a
                                                                 //1 : PostgreSql  -> Gbase8a
			  
[Source]                                                         //源端信息。
#ConnInfo      : '192.168.142.12;root;;czg;5258;utf8;'
ConnInfo      : '192.168.142.12;postgres;postgres;czg;5432;utf8;' //'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
                                                                 //*单个IP长度限制19,数据库IP地址。
                                                                 //*单个用户名长度限制19,数据库用户名。
                                                                 //*单个用户名密码长度限制29,数据库密码。
                                                                 //*单个数据库名长度限制29,数据库名。
                                                                 //*数据库端口。
                                                                 //*长度限制9,数据库连接字符集,支持utf8和gbk。
MigrationDb   : 'zxj;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
                                                                 //MigrationType为1的情况下,此为PG的模式名。
BlackList     : ''                                               //库级迁移参数,支持50个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        
#SpecifiedTab  : 'a,b,c;czg;testtab;Limit 10;x,y,z;zxj;NewTab;'            
                                                                 //MigrationType为0的情况下,表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //MigrationType为1的情况下,表级迁移参数,格式:'源端查询字段;源端模式名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //如果没有特定条件,可以不写,但必须有分隔符,举例如下:
                                                                 //';czg;testtab;;;zxj;NewTab;'
                                                                 //这样相当于testtab迁移到NewTab,没有任何特殊条件。
                                                                 //这个可以有多个标签,想迁移多少张表就写几个标签。
#SpecifiedTab  : ';czg;testtab_copy;;;zxj;testtab_copy;'
#SpecifiedTab  : ';czg;czg;;;zxj;czg;'

SpecifiedTab  : ';public;testtab;;;zxj;testtab;'
SpecifiedTab  : ';public;students;;;zxj;students;'
SpecifiedTab  : ';public;haha;;;zxj;haha;'

[Target]                                                         //目的端信息。
ConnInfo      : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'
MigrationDb   : 'zxj;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。

九、运行效果

1、Gbase8a -> Gbase8a

[gbase@czg0 Exec]$ ./HsManager &

[gbase@czg0 Exec]$ tail -100f HappySunshineV1.4.log
2024-08-16 10:44:56-P[50461]-T[50461]-[Info ]-HappySunshineV1.4
2024-08-16 10:44:56-P[50461]-T[50461]-[Info ]-PrintHsMngrSt      :
OsEnv              : /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/HappySunshine
OsUser             : gbase
OsPwd              : gbase
OsIp               : 192.168.142.12
SrcMigrationDb     : czg
TgtMigrationDb     : 
OneBatchNums       : 50000
SwitchNums         : 2000000
Level              : 1
ProcessNums        : 2
ConnInfo           : [192.168.142.12,root,,czg,5258,utf8] -> [192.168.142.12,czg,qwer1234,zxj,5258,utf8]
PrintSeq           : TaskQ,BlackList,WhiteList.
2024-08-16 10:44:56-P[50461]-T[50461]-[Info ]-StrSqQ             :
Data               : []
FrontIndex         : 0
RearIndex          : 0
SqQueueLen         : 0
2024-08-16 10:44:56-P[50461]-T[50461]-[Info ]-SqQueue Data       :
Data               : [ 'testtab' ]
FrontIndex         : 0
RearIndex          : 1
SqQueueLen         : 1
SqQueueMaxLen      : 50
Flag               : STRING_TYPE_FLAG
2024-08-16 10:44:56-P[50461]-T[50461]-[Info ]-SqQueue Data       :
Data               : [ 'a,b,c;czg;testtab;Limit 10;x,y,z;zxj;NewTab;' ,';czg;testtab_copy;;;zxj;testtab_copy;' ,';czg;czg;;;zxj;czg;' ]
FrontIndex         : 0
RearIndex          : 3
SqQueueLen         : 3
SqQueueMaxLen      : 50
Flag               : STRING_TYPE_FLAG
2024-08-16 10:44:57-P[50465]-T[50475]-[Info ]-Migration Complete : czg.testtab              -> zxj.NewTab              , DataNum :         10 Row, Elapsed Time :     0 s.
2024-08-16 10:44:57-P[50465]-T[50475]-[Info ]-Migration Complete : czg.czg                  -> zxj.czg                 , DataNum :       2050 Row, Elapsed Time :     0 s.
2024-08-16 10:45:22-P[50466]-T[50473]-[Info ]-Migration Complete : czg.testtab_copy         -> zxj.testtab_copy        , DataNum :    1310727 Row, Elapsed Time :    25 s, Efficiency : 52429 Row/s.
2024-08-16 10:46:22-P[50461]-T[50461]-[Info ]-HappySunshine Quit : OK.

2、Pg -> Gbase8a

[gbase@czg2 Exec]$ ./HsManager &
[1] 30081
[gbase@czg2 Exec]$ tail -100f HappySunshineV1.4.log 
2024-09-18 10:45:22-P[30081]-T[30081]-[Info ]-HappySunshineV1.4
2024-09-18 10:45:22-P[30081]-T[30081]-[Info ]-PrintHsMngrSt      :
MigrationType      : 1
OsEnv              : /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/HappySunshine
OsUser             : gbase
OsPwd              : gbase
OsIp               : 192.168.142.12
SrcDb              : zxj
DestDb             : zxj
OneBatchNums       : 80000
SwitchNums         : 2000000
Level              : 1
ProcessNums        : 2
ConnInfo           : [192.168.142.12,postgres,postgres,czg,5432,utf8] -> [192.168.142.12,czg,qwer1234,zxj,5258,utf8]
PrintSeq           : TaskQ,BlackList,WhiteList.
2024-09-18 10:45:22-P[30081]-T[30081]-[Info ]-StrSqQ             :
Data               : []
FrontIndex         : 0
RearIndex          : 0
SqQueueLen         : 0
2024-09-18 10:45:22-P[30081]-T[30081]-[Info ]-SqQueue Data       :
Data               : []
FrontIndex         : 0
RearIndex          : 0
SqQueueLen         : 0
SqQueueMaxLen      : 50
Flag               : STRING_TYPE_FLAG
2024-09-18 10:45:22-P[30081]-T[30081]-[Info ]-SqQueue Data       :
Data               : [ ';public;testtab;;;zxj;testtab;' ,';public;students;;;zxj;students;' ,';public;haha;;;zxj;haha;' ]
FrontIndex         : 0
RearIndex          : 3
SqQueueLen         : 3
SqQueueMaxLen      : 50
Flag               : STRING_TYPE_FLAG
2024-09-18 10:45:22-P[30084]-T[30111]-[Info ]-PgPkSplit2Q        : OK, Schema : public, Tab : testtab, SplitNums : 2.
2024-09-18 10:45:22-P[30083]-T[30118]-[Info ]-Migration Complete : public.students             -> zxj.students            , DataNum :          0 Row, Elapsed Time :    0.001 s.
2024-09-18 10:45:22-P[30083]-T[30118]-[Info ]-Migration Complete : public.haha                 -> zxj.haha                , DataNum :          0 Row, Elapsed Time :    0.001 s.
2024-09-18 10:46:01-P[30083]-T[30118]-[Info ]-Migration Complete : public.testtab              -> zxj.testtab             , DataNum :    1049631 Row, Elapsed Time :   38.782 s, Efficiency : 27621 Row/s.
2024-09-18 10:46:10-P[30084]-T[30111]-[Info ]-Migration Complete : public.testtab              -> zxj.testtab             , DataNum :    1048608 Row, Elapsed Time :   47.605 s, Efficiency : 22310 Row/s.
2024-09-18 10:47:10-P[30081]-T[30081]-[Info ]-HappySunshine Quit : OK.

我这边测试的PUBLIC.TESTTAB表包含一个整型主键,所以进行了数据切分,效率在48000 Row/s左右,因为我这边虚机资源有限,如果大家有条件的话,最好PG、GBASE8A、HappySunshine分别放在三台机器上运行,这时大家可以加大进程数,看一下单表(包含一个整型主键)的效果,应该会更快一些。

十、性能对比

我们测试将czg库下的testtab_copy拉到zxj库下,对比效率。

1、Gbase8a -> Gbase8a

(1)测试数据

gbase> select count(*) from czg.testtab_copy;
+----------+
| count(*) |
+----------+
|  1310720 |
+----------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select * from czg.testtab_copy limit 10;
+------+------+------+--------------------+---------------------+--------------------------+------------+---------------------+
| a    | b    | c    | d                  | e                   | f                        | g          | h                   |
+------+------+------+--------------------+---------------------+--------------------------+------------+---------------------+
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfz\xczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfz.xczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfz.xczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
+------+------+------+--------------------+---------------------+--------------------------+------------+---------------------+
10 rows in set (Elapsed: 00:00:00.31)

gbase> desc czg.testtab_copy;
+-------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type         | Null | Key | Default           | Extra                       |
+-------+--------------+------+-----+-------------------+-----------------------------+
| a     | int(11)      | YES  |     | NULL              |                             |
| b     | double       | YES  |     | NULL              |                             |
| c     | varchar(100) | YES  |     | NULL              |                             |
| d     | text         | YES  |     | NULL              |                             |
| e     | blob         | YES  |     | NULL              |                             |
| f     | longblob     | YES  |     | NULL              |                             |
| g     | date         | YES  |     | NULL              |                             |
| h     | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+--------------+------+-----+-------------------+-----------------------------+
8 rows in set (Elapsed: 00:00:00.00)

(2)对比表格

工具名每秒条数方式环境
HappySunshine48545INSERT本机Linux虚拟机
87381LOAD
GBaseMigrationToolkit_8.5.20.0_build4_winx86_6413375INSERT本机win

(3)HappySunshine截图

INSERT

LOAD

(4)GBaseMigrationToolkit截图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习模型中特征贡献度分析:预测贡献与错误贡献

在机器学习领域,特征重要性分析是一种广泛应用的模型解释工具。但是特征重要性并不等同于特征质量。本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。 核心概念 预测贡献度:衡量特征在…

【w0网页制作】Html+Css网页制作影视主题之庆余年Ⅱ含轮播表单(5页面附源码)

庆余年2HTMLCSS网页开发目录 🍔涉及知识🥤写在前面🍧一、网页主题🌳二、网页效果效果1、轮播效果图Page1、首页Page2、角色介绍Page3、剧情介绍Page4、剧集评价Page5、留言模块 🐋三、网页架构与技术3.1 脑海构思3.2 整…

集装箱机房可视化:高效管理与监控

通过图扑可视化平台实时监控集装箱机房的运行状态和环境参数,优化资源配置,提升运维效率,确保数据中心安全可靠运行。

Java面试篇基础部分-Java中5种常用的线程池

Java中定义了一个Executor的接口并且在接口中定义了execute()方法用来执行一个线程任务。然后通过ExecutorService实现了Executor接口用来执行具体的线程操作。 ExecutorService接口实现了多个类用来创建不同的线程池,其中最常见的线程池有如下几种 newCachedThreadPool 可以缓…

工业一体机在汽车零部件工厂ESOP系统中的关键作用

在当今竞争激烈的汽车市场中,汽车零部件工厂的高效生产和严格质量控制至关重要。而工业一体机在汽车零部件工厂的 ESOP(电子标准化作业程序)系统中发挥着关键作用。 一、汽车零部件工厂面临的挑战 汽车零部件的生产过程复杂且要求严格&#…

8--SpringBoot原理分析、注解-详解(面试高频提问点)

目录 SpringBootApplication 1.元注解 --->元注解 Target Retention Documented Inherited 2.SpringBootConfiguration Configuration Component Indexed 3.EnableAutoConfiguration(自动配置核心注解) 4.ComponentScan Conditional Co…

【Leetcode152】分割回文串(回溯 | 递归)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 具体例子和步骤:假设 s "aab",步骤如下: 初始状态: s "aab"path []res [] 第一层递归(外层循环): path []检…

高精度乘法和除法

高精度乘法 高精度乘法的核心思想是将两个大数的乘法运算拆解为多个小规模运算&#xff0c;并最终将结果合并得到最后的乘积。 我们来做一道题 大整数乘法 代码如下&#xff1a; #include<iostream> #include<string> using namespace std;// 定义两个字符数…

黑龙江事业单位联考报名流程及照片处理方法

随着黑龙江省事业单位联考的报名帷幕即将拉开&#xff0c;众多考生已经摩拳擦掌&#xff0c;准备投身于这场职业发展的大潮中。在这个关键时刻&#xff0c;掌握报名流程和照片处理技巧&#xff0c;将是你成功迈出的第一步。本文将为你提供一份详尽的报名指南&#xff0c;让你在…

代理模式---静态代理和动态代理

代理模式 代理模式&#xff1a;给某一个对象提供一个代理&#xff0c;并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。 代理模式角色分为 3 种&#xff1a; Subject&#xff08;抽象主题角色&#xff09;&#xff1a;定义代理类和真实主题的公共对外方法…

【JavaScript】算法之排序搜索

排序 冒泡排序 选择排序 插入排序 从第一个元素开始&#xff0c;该元素可以被认为已经被排序取出下一个元素&#xff0c;在已经排序好的序列中&#xff0c;从后往前扫描直到找到小于或者等于该元素的位置将该位置后面的所有已经排序的元素从后往前移动将该元素插入到该位置重复…

鲲鹏云-docker安装mysql8.0-并设置参数(--lower-case-table-names=1)

前言&#xff1a; 由于鲲鹏云是arm架构&#xff0c;公司现有的镜像就用不了&#xff0c;为了搭建个测试环境&#xff0c;记录一下搭建过程 注意在mysql8.0里面lower-case-table-names必须在第一次安装时设置。 ①镜像的获取 鲲鹏镜像pull下来是不能跑的&#xff0c;会提示内…

自我评估与改进:TMS优化自检清单

自我评估与改进&#xff1a;TMS优化自检清单 在当今快速变化的物流行业中&#xff0c;运输管理系统&#xff08;TMS&#xff09;的优化成为企业提升运营效率、降低成本、增强竞争力的关键。为了帮助企业和物流管理者全面评估TMS的运行状况&#xff0c;识别并优化潜在问题&…

优思学院|中国六西格玛研究调查2025

四年前&#xff0c;优思学院与精益六西格玛专业协会&#xff08;LSSPA&#xff09;共同发起了一项具有里程碑意义的调查研究——《中国六西格玛调查研究 2020》。这是中国第一次全面了解六西格玛在本地企业中的发展现状、应用情况以及所面临的挑战和机遇的调研项目。这个调查不…

Matlab进阶绘图第68期—带分组折线段的分区柱状图

上一篇文章分享了分区柱状图的绘制方法&#xff1a; 带分组折线段的分区柱状图是在原始分区柱状图的基础上&#xff0c;再添加分组折线段&#xff0c;用以增加一个对象的表达。 由于Matlab中未收录的带分组折线段的分区柱状图的绘制方法&#xff0c;因此需要大家自行解决。 本…

NEMESIS: NORMALIZING THE SOFT-PROMPT VECTORS OF VISION-LANGUAGE MODELS

文章汇总 发现的现象 动机的描述 Norm增加会导致性能下降&#xff0c;Norm降低会导致性能上升。于是作者提出&#xff1a; 我们需要规范化VLMs中的软提示吗? 实验验证 在左图中的紫色块中可以看到&#xff0c;随着模型性能的上升&#xff0c;Norm value会不断下降。 解决…

RedisTemplate混用带来的序列化问题

最近在工作中发现一个现象&#xff0c;项目中使用了不同的 RedisTemplate 来操作redis&#xff0c;有的同事用默认的 RedisTemplate &#xff0c;有的同事用 StringRedisTemplate。这就导致了我本次遇到的问题&#xff1a; 在一次需求中&#xff0c;我需要从 redis 中取值&…

AIGC产品经理自学不迷路!全网最全AI产品大模型的学习教程!

一、《AI产品经理知识扫盲》 1️⃣【AI的产品形态到底是什么】&#xff1f; 没有固定形态。实际上AI只是一种对传统产品或服务赋能的手段而已&#xff0c;将各种“中间件”&#xff08;通常是一种训练好的模型&#xff0c;当输入一定数据后自动返回一定的输出值&#xff09;、…

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard下载及安装 1 WRF Domain Wizard 的主要功能2 使用 WRF Domain Wizard 的步骤2.1 安装 WRF Domain Wizard&#xff1a;2.2 启动 WRF Domain Wizard&#xff1a;2.3 定义计算域&#xff1a;2.4 生成配置文件&#xff1a;2.5 运行 WPS 和 WRF&am…

内核是如何接收网络包的

1、数据如何从网卡到网络协议栈 1.1内核收包的过程 1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡发出硬中断通知CPU 4、CPU响应硬中断&#xff0c;简单处理后发出软中断 5、k’softirqd线程处理软中断&#xff0c;调…