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

目录

一、环境信息

二、简述

三、架构图

四、升级点

五、支持功能

六、安装包下载地址

七、配置参数介绍

八、安装步骤

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.xdnf.cn/news/143416.html

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

相关文章

Axios基本语法和前后端交互

Axios是一个js框架&#xff0c;用于发送ajax请求。 一、导入 // node中&#xff0c;使用npm安装 npm install axios // HTML中&#xff0c;使用cdn安装 <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 二、基本使用 // 使用axios…

x264中的cabac编码实现

typedef struct { /* state */ int i_low; //概率状态的范围low int i_range; //当前概率状态 范围range /* bit stream */ int i_queue; //stored with an offset of -8 for faster asm 队列中可输出的bits 个数&#xff0c;-8 开始&#xff0c;是为了方便asm优化 int i_byt…

数据防泄密系统的构建与功能分析(实用物料)

一、构建1、需求分析&#xff1a;明确企业需要保护的敏感数据类型&#xff08;如商业机密、研发资料等&#xff09;及其潜在的泄露途径&#xff08;如网络传输、文件共享、打印复印等&#xff09;。 2、策略&#xff1a;根据需求分析结果&#xff0c;制定详细的数据防泄密策略…

数字逻辑电路-加法器

目录 半加器和全加器 半加器 ​全加器 集成全加器 利用全加器实现二进制的乘法功能 加法器 半加器和全加器 半加器 不考虑低位进位的加法。 本位为s&#xff0c;进位为c。 全加器 多了一个相邻低位来的进位数。 集成全加器 左上角和右下角那两个是不用的。 利用全加器…

Selenium通过ActionBuilder模拟鼠标操作直接移动到指定坐标的注意事项

在目前&#xff08;2024-09-18&#xff09;得Selenium官方手册中&#xff0c;模拟鼠标操作基本上都是通过ActionChains完成的&#xff0c;唯独有一动作&#xff0c;是通过ActionBuilder完成的。 而前者ActionChains&#xff0c;主要是通过offset&#xff0c;也就是坐标偏移量来…

RK3568笔记五十九:FastSAM部署

若该文为原创文章,转载请注明原文出处。 记录FastSAM训练到部署全过程,转换模型和yolov8一样。 一、介绍 Fast Segment Anything Model (FastSAM) 是一种基于 CNN 的新型实时解决方案,可用于 Segment Anything 任务。该任务旨在根据各种可能的用户交互提示分割图像中的任何…

AT24CXX系列eeprom的相关知识总结

常用的eeprom存储器件有很多容量类型&#xff0c;AT系列的eeprom有at24c01,at24c02…at24c1024等。我们来做一个总结。 1.常见的型号含义 at24c01&#xff1a;表示1kbit&#xff08;128BYTE*8&#xff09; at24c02&#xff1a;表示2kbit&#xff08;256BYTE*8&#xff09; . .…

pybind11 学习笔记

pybind11 学习笔记 0. 一个例子1. 官方文档1.1 Installing the Library1.1.1 Include as A Submodule1.1.2 Include with PyPI1.1.3 Include with Conda-forge 1.2 First Steps1.2.1 Separate Files1.2.2 PYBIND11_MODULE() 宏1.2.3 example.cpython-38-x86_64-linux-gnu.so 的…

二百六十四、Java——Java采集Kafka主题A的JSON数据,解析成一条条数据,然后写入Kafka主题B中

一、目的 由于Hive是单机环境&#xff0c;因此庞大的原始JSON数据在Hive中解析的话就太慢了&#xff0c;必须放在Hive之前解析成一个个字段、一条条CSV数据 二、IDEA创建SpringBoot项目 三、项目中各个文件 3.1 pom.xml <?xml version"1.0" encoding"UTF…

java: 警告: 源发行版 17 需要目标发行版 17(100% 解决)

1. 问题说明 Idea启动Springboot服务报错&#xff1a;java: 警告: 源发行版 17 需要目标发行版 17 2. 解决方案 Project Structure指定jdk版本为我们当前使用的版本&#xff1b; Java Compiler指定jdk为我们当前使用的版本&#xff1b; Invalidate Caches重启Idea。 如果还…

小商品市场配电系统安全用电解决方案

1.概述 随着市场经济的快速发展和人民生活水平的不断提高,全国各地相继建起了大批大型小商品批发市场,此类市场以其商品种类繁多、价格实惠、停车方便等特点吸引了大量的顾客,成为人们日常光顾的重要场所,地方便了广大人民群众的日常生活。 小商品市场集商品销售和短时货物储…

如何利用生成式AI创建图像和可视化效果

每个小型出版商在创建博客文章或新闻文章的过程中&#xff0c;都有一个恐慌时刻&#xff1a; “我用什么做我的特色图片&#xff1f;” 广告公司和媒体公司都有创意总监、摄影师和艺术家随时为他们创作图片。但我们其他人怎么办呢&#xff1f; 我们中的一些人会不顾更好的判…

数据中心扩展之路:创新的数据中心布线解决方案

在不断发展的数据管理领域中&#xff0c;现代技术的迅猛发展既带来了机遇&#xff0c;也带来了挑战&#xff0c;尤其是对不断扩展的数据中心而言。随着这些基础设施的快速发展和转型&#xff0c;对高效可靠的数据中心布线解决方案的需求日益增长。本文将探讨飞速&#xff08;FS…

redis常见类型设置、获取键值的基础命令

redis常见类型设置、获取键值的基础命令 获取键值的数据类型 命令&#xff1a;TYPE keyname 常见数据类型设置、获取键值的基本命令 string类型 置键值&#xff1a;set keyname valuename获取键值&#xff1a;get keyname删除&#xff1a; del keyname list类型 从左边向列表…

关于在Qlabel遮罩方面的踩坑实录

先看目标效果&#xff1a; 想要实现封面图标的遮罩效果&#xff0c;有两个思路&#xff1a; 一、在鼠标移动到这个item上面时&#xff0c;重新绘制pixmap 例如以下代码&#xff1a; #include <QApplication> #include <QWidget> #include <QPixmap> #incl…

马尔科夫蒙特卡洛_吉布斯抽样算法(Markov Chain Monte Carlo(MCMC)_Gibbs Sampling)

定义 输入:目标概率分布的密度函数 p ( x ) p(x) p(x),函数 f ( x ) f(x) f(x) 输出: p ( x ) p(x) p(x)的随机样本 x m 1 , x m 2 , ⋯ , x n x_{m1},x_{m2},\cdots,x_n xm1​,xm2​,⋯,xn​,函数样本均值 f m n f_{mn} fmn​; 参数:收敛步数 m m m,迭代步数 n n n。 (1)初…

camtasia2024绿色免费安装包win+mac下载含2024最新激活密钥

Hey, hey, hey&#xff01;亲爱的各位小伙伴&#xff0c;今天我要给大家带来的是Camtasia2024中文版本&#xff0c;这款软件简直是视频制作爱好者的福音啊&#xff01; camtasia2024绿色免费安装包winmac下载&#xff0c;点击链接即可保存。 先说说这个版本新加的功能吧&#…

小微金融企业系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;贷款信息管理&#xff0c;贷款申请管理&#xff0c;贷款种类管理&#xff0c;代办项目管理&#xff0c;项目分类管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;代办项…

如何做好网站建设,多个维度解析一下

网站建设是一个复杂的过程&#xff0c;涉及多个方面的考虑。以下是一些关键步骤和最佳实践&#xff0c;帮助你做好网站建设&#xff1a; 1. 明确目标与定位 确定网站目标&#xff1a;明确你的网站是用于品牌宣传、产品销售、信息分享还是其他目的。分析受众群体&#xff1a;了…

LeetCode_sql_day27(1225.报告系统状态的连续信息)

目录 描述&#xff1a; 1225.报告系统状态的连续信息 数据准备&#xff1a; 分析&#xff1a; 代码&#xff1a; 总结&#xff1a; 描述&#xff1a; 1225.报告系统状态的连续信息 表&#xff1a;Failed ----------------------- | Column Name | Type | ----------…