一种数据库兼容方法、装置、设备及存储介质与流程

文档序号:36708627发布日期:2024-01-16 11:44阅读:22来源:国知局
一种数据库兼容方法、装置、设备及存储介质与流程

本发明涉及数据库,尤其涉及一种数据库兼容方法、装置、设备及存储介质。


背景技术:

1、对于oracle数据库来说,其最大支持1000个字段的表,即oracle数据表最多支持1000个列,而mysql数据库中,sql层和innodb层存在行长度限制,导致对oracle大表的场景兼容失败。其中,mysql的限制如下:

2、sql层具有65535字节的最大行大小限制,而对于1000个varchar(65533),sql层计算的总大小为65535×1000=65535000字节,远大于65535字节;innodb层的最大引擎支持列数为1017,行长度限制为数据表的最大行大小不超过16kb(16384字节),而对于1000个varchar,若每个字段按41字节计算,41×1000=41000字节,远大于16384字节。所以,由于sql层和innodb层的限制,现有的mysql无法支持创建大表。

3、目前基于mysql数据库做oracle行长度兼容,主要是通过由业务或中间件层去修改业务表的方式,但是其只能满足部分场景。例如,对于1000个varchar的场景,通过blob字段替代varchar字段,虽然可通过sql层限制,但仍无法通过innodb层的限制,所以无法实现100%兼容。


技术实现思路

1、本发明提供了一种数据库兼容方法、装置、设备及存储介质,以实现数据库之间的兼容。

2、根据本发明的一方面,提供了一种数据库兼容方法,包括:

3、获取待存入第一数据库的第二数据库表;其中,所述第二数据库表来源于第二数据库;

4、根据所述第二数据库表的总列数对所述第一数据库中的目标数据库引擎进行行长度限制修改,创建第一数据库表;

5、将所述第二数据库表中的数据存储于缓存中,从缓存中提取待写入的第二数据库表数据并写入所述第一数据库表中。

6、进一步地,所述第一数据库包括mysql数据库,所述第二数据库包括oracle数据库。

7、进一步地,所述目标数据库引擎包括sql层和innodb层,根据所述第二数据库表的总列数对所述第一数据库中的目标数据库引擎进行行长度限制修改,包括:

8、获取所述目标数据库引擎的最大引擎支持列数;

9、若所述最大引擎支持列数大于所述第二数据库表的总列数,则根据所述最大引擎支持列数分别修改所述sql层和所述innodb层的行长度限制。

10、进一步地,根据所述最大引擎支持列数修改所述sql层的行长度限制,包括:

11、获取所述sql层的修改前的行长度限制数据;

12、将所述最大引擎支持列数与所述修改前的行长度限制数据的乘积作为所述sql层的修改后的行长度限制数据。

13、进一步地,根据所述最大引擎支持列数修改所述innodb层的行长度限制,包括:

14、获取所述innodb层的修改前的变长字段存储长度;

15、将所述最大引擎支持列数与所述修改前的变长字段存储长度的乘积作为所述innodb层的修改后的行长度限制数据。

16、进一步地,所述缓存中包括至少一个数据存储结构,所述数据存储结构中包括至少一个存储节点,所述存储节点中包括至少一个数据页。

17、进一步地,将所述第二数据库表中的数据存储于缓存中,包括:

18、提取所述第二数据库表中的定长字段和变长字段;

19、将所述变长字段存储于行溢出页中,将所述定长字段和所述变长字段的行溢出页指针存储于所述数据页中。

20、根据本发明的另一方面,提供了一种数据库兼容装置,包括:

21、第二数据库表获取模块,用于获取待存入第一数据库的第二数据库表;其中,所述第二数据库表来源于第二数据库;

22、行长度限制修改模块,用于根据所述第二数据库表的总列数对所述第一数据库中的目标数据库引擎进行行长度限制修改,创建第一数据库表;

23、数据写入模块,用于将所述第二数据库表中的数据存储于缓存中,从缓存中提取待写入的第二数据库表数据并写入所述第一数据库表中。

24、可选的,所述第一数据库包括mysql数据库,所述第二数据库包括oracle数据库。

25、可选的,所述目标数据库引擎包括sql层和innodb层,行长度限制修改模块还用于:

26、获取所述目标数据库引擎的最大引擎支持列数;

27、若所述最大引擎支持列数大于所述第二数据库表的总列数,则根据所述最大引擎支持列数分别修改所述sql层和所述innodb层的行长度限制。

28、可选的,行长度限制修改模块还用于:

29、获取所述sql层的修改前的行长度限制数据;

30、将所述最大引擎支持列数与所述修改前的行长度限制数据的乘积作为所述sql层的修改后的行长度限制数据。

31、可选的,行长度限制修改模块还用于:

32、获取所述innodb层的修改前的变长字段存储长度;

33、将所述最大引擎支持列数与所述修改前的变长字段存储长度的乘积作为所述innodb层的修改后的行长度限制数据。

34、可选的,所述缓存中包括至少一个数据存储结构,所述数据存储结构中包括至少一个存储节点,所述存储节点中包括至少一个数据页。

35、可选的,数据写入模块还用于:

36、提取所述第二数据库表中的定长字段和变长字段;

37、将所述变长字段存储于行溢出页中,将所述定长字段和所述变长字段的行溢出页指针存储于所述数据页中。

38、根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:

39、至少一个处理器;以及

40、与所述至少一个处理器通信连接的存储器;其中,

41、所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的数据库兼容方法。

42、根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的数据库兼容方法。

43、本发明公开的数据库兼容方法,首先获取待存入第一数据库的第二数据库表;其中,第二数据库表来源于第二数据库;然后根据第二数据库表的总列数对第一数据库中的目标数据库引擎进行行长度限制修改,创建第一数据库表;最后将第二数据库表中的数据存储于缓存中,从缓存中提取待写入的第二数据库表数据并写入第一数据库表中。本发明公开的数据库兼容方法,通过修改数据库的行长度限制,可以实现第一数据库和第二数据库的100%兼容。

44、应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1