一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据迁移方法、装置、计算机设备和可读存储介质与流程

2022-03-23 02:04:27 来源:中国专利 TAG:


1.本技术涉及互联网技术领域,尤其涉及一种数据迁移方法、装置、计算机设备和可读存储介质。


背景技术:

2.在互联网应用开发的过程中,数据库在一开始可能是使用单表来存储数据,当单表的数据量越来越大时,数据的查询效率会越来越慢,此时就需要对原有数据进行迁移,将旧库中存储的数据迁移到新库中。
3.现有技术中,在进行数据迁移时,主要是利用一些迁移工具来实现历史数据的迁移和增量数据的同步。其过程主要是先定位到数据库的某个位置,然后从该位置开始读取数据,将历史数据刷到数据库中。在同步历史数据时,增量数据会先积压到消息队列(message queue,mq)中,在同步完历史数据之后,再将mq的所有积压数据进行泄洪。
4.但是,现有技术的这种方式由于mq有可能会存在延迟,会导致一些存在互相依赖关系的复杂数据在迁移过程中产生混淆,造成数据迁移效果差。


技术实现要素:

5.本技术提供一种数据迁移方法、装置、计算机设备和可读存储介质,用于解决现有数据迁移效果差的问题。
6.第一方面,本技术实施例提供一种数据迁移方法,包括:
7.响应于数据迁移指令,将第一数据库中的待迁移数据迁移至第二数据库;
8.在所述第一数据库中的待迁移数据存在变更时,获取所述第一数据库中变更后的待迁移数据的第一标识信息、已迁移至所述第二数据库中的迁移数据的第二标识信息;
9.根据所述变更后的待迁移数据、第一标识信息和第二标识信息,对已迁移至所述第二数据库中的迁移数据进行更新。
10.在第一方面的一种可能设计中,所述将第一数据库中的待迁移数据迁移至第二数据库,包括:
11.获取所述第一数据库中的待迁移数据的初始版本号;
12.根据预设第一迁移工具,将所述第一数据库中的待迁移数据复制至所述第二数据库,作为已迁移至所述第二数据库中的迁移数据;
13.将所述初始版本号作为已迁移至所述第二数据库中的迁移数据的第二标识信息。
14.在第一方面的另一种可能设计中,所述在所述第一数据库中的待迁移数据存在变更时,获取所述第一数据库中变更后的待迁移数据的第一标识信息,包括:
15.根据预设第二迁移工具对所述第一数据库进行监听;
16.在监听到所述第一数据库中的待迁移数据存在变更时,将所述第一数据库中的待迁移数据的初始版本号作为所述变更后的待迁移数据的第一标识信息。
17.在第一方面的再一种可能设计中,所述根据所述变更后的待迁移数据、第一标识
信息和第二标识信息,对已迁移至所述第二数据库中的迁移数据进行更新,包括:
18.获取所述变更后的待迁移数据的同步标识字段的取值,所述同步标识字段的取值用于指示所述变更后的待迁移数据的来源;
19.在所述同步标识字段的取值与预设第一数值匹配时,将所述第一标识信息与所述第二标识信息进行对比;
20.若对比一致,则根据所述预设第二迁移工具和所述变更后的待迁移数据,对已迁移至所述第二数据库中的迁移数据进行更新。
21.在第一方面的又一种可能设计中,所述根据所述预设第二迁移工具和所述变更后的待迁移数据,对已迁移至所述第二数据库中的迁移数据进行更新之后,还包括:
22.将所述第二标识信息进行更新。
23.在第一方面的又一种可能设计中,所述根据所述预设第二迁移工具和所述变更后的待迁移数据,对已迁移至所述第二数据库中的迁移数据进行更新之后,还包括:
24.对更新后的已迁移至第二数据库中的迁移数据的同步标识字段的取值进行更新。
25.在第一方面的又一种可能设计中,所述根据所述变更后的待迁移数据、第一标识信息和第二标识信息,对已迁移至所述第二数据库中的迁移数据进行更新之后,还包括:
26.响应于数据查询请求,获取预设配置中心的第一配置信息;
27.根据所述第一配置信息和所述数据查询请求的请求接口,确定查询对象,所述查询对象为第一数据库或第二数据库;
28.根据所述数据查询请求,在所述查询对象中进行数据查询,得到查询结果,所述查询结果用于指示所述第二数据库是否存在数据异常。
29.在第一方面的又一种可能设计中,所述根据所述变更后的待迁移数据、第一标识信息和第二标识信息,对已迁移至所述第二数据库中的迁移数据进行更新之后,还包括:
30.响应于数据读写操作请求,获取预设配置中心的第二配置信息;
31.当所述第二配置信息满足预设条件时,确定所述数据读写操作请求的逻辑类型;
32.根据所述逻辑类型,在所述第一数据库中进行数据查询/数据更新或在所述第二数据库中进行数据写入/数据查询/数据更新;
33.当所述第二配置信息未满足条件时,在所述第一数据库中进行数据写入/数据查询/数据更新。
34.在第一方面的又一种可能设计中,所述根据所述逻辑类型,在所述第一数据库中进行数据查询/数据更新或在所述第二数据库中进行数据写入/数据查询/数据更新,包括:
35.当所述逻辑类型为新增逻辑时,在所述第二数据库和预设缓存中写入目标数据;
36.当所述逻辑类型为更新逻辑/查询逻辑时,确定所述预设缓存中是否缓存有所述目标数据;
37.若缓存有所述目标数据,则在所述第二数据库中进行数据更新/数据查询;
38.若未缓存有所述目标数据,则在所述第一数据库中进行数据更新/数据查询。
39.在第一方面的又一种可能设计中,所述在所述第二数据库和预设缓存中进行数据写入之后,还包括:
40.将写入至所述第二数据库中的目标数据同步至所述第一数据库。
41.在第一方面的又一种可能设计中,所述将写入至所述第二数据库中的目标数据同
步至所述第一数据库,包括:
42.确定所述目标数据的版本号和同步标识字段的取值;
43.在所述目标数据的同步标识字段的取值与预设第二数值匹配时,将所述目标数据的版本号与第一数据库中的待同步数据的版本号进行对比;
44.若对比一致,则根据所述目标数据,对所述第一数据库中的待同步数据进行更新。
45.在第一方面的又一种可能设计中,所述当所述第二配置信息未满足条件时,在所述第一数据库中进行数据写入/数据查询/数据更新之后,还包括:
46.当所述第二配置信息未满足预设条件时,确定所述数据读写操作是否在预设时间段且包含所述目标数据的数据标识;
47.若是,则查询所述目标缓存中是否缓存有所述目标数据;
48.若所述目标缓存中缓存有所述目标数据,则根据所述第一标识信息和第二标识信息,对所述第一数据库和第二数据库进行数据合并,得到合并数据;
49.根据所述合并数据,对所述第一数据库进行更新。
50.第二方面,本技术实施例提供一种数据迁移装置,包括:
51.数据迁移模块,用于响应于数据迁移指令,将第一数据库中的待迁移数据迁移至第二数据库;
52.标识获取模块,用于在所述第一数据库中的待迁移数据存在变更时,获取所述第一数据库中变更后的待迁移数据的第一标识信息、已迁移至所述第二数据库中的迁移数据的第二标识信息;
53.数据更新模块,用于根据所述变更后的待迁移数据、第一标识信息和第二标识信息,对已迁移至所述第二数据库中的迁移数据进行更新。
54.第三方面,本技术实施例提供一种计算机设备,包括存储器和至少一个处理器;
55.所述存储器存储计算机执行指令;
56.所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上述的方法。
57.第四方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机指令,所述计算机指令被处理器执行时用于实现如上述的方法。
58.第五方面,本技术实施例提供一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现上述的方法。
59.本技术实施例提供的数据迁移方法、装置、计算机设备和可读存储介质,通过对第一数据库中的待迁移数据、第二数据库中已迁移的数据分别使用标识信息进行标识,在第一数据库中的待迁移数据每发生一次修改时,可以根据对比标识信息,准确的将每一次的修改数据同步更新到第二数据库中,避免数据同步时消息队列产生的延迟,造成在进行同步更新时各个修改数据之间的混淆,提高数据迁移效果。
附图说明
60.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理;
61.图1为本技术实施例提供的数据迁移的场景示意图;
62.图2为本技术实施例提供的数据迁移方法实施例一的流程示意图;
63.图3为本技术实施例提供的数据迁移方法实施例二的流程示意图;
64.图4为本技术实施例提供的数据迁移方法实施例三的流程示意图;
65.图5为本技术实施例提供的数据迁移方法实施例四的流程示意图;
66.图6为本技术实施例提供的数据迁移方法实施例五的流程示意图;
67.图7为本技术实施例提供的数据迁移装置的结构示意图;
68.图8为本技术实施例提供的计算机设备的结构示意图。
69.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
70.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
71.图1为本技术实施例提供的数据迁移的场景示意图,如图1所示,该方法可以应用于对服务器11的数据库进行迁移,在互联网应用开发的时候,终端设备10中安装的应用可以产生各种各样的数据,数据可以存储在服务器11的数据库12中。
72.在实际的应用中,当数据库数据量越来越来多时,数据查询就会越来越慢。通常一般会考虑对数据库进行分片或者分表操作,例如将一个数据库分库成多个数据库,利用多个数据库来分摊一个数据库中的数据,提高数据查询效率。分库的过程就涉及到将原数据库中的数据迁移到其他各个数据库中。同时,在数据迁移的过程中,还需要保证服务器11不停机,数据库12能够照常使用,不影响用户的正常业务。
73.现有技术中,在进行数据迁移时,主要是利用canal进行数据同步,canal把自己伪装成从数据库,模拟从数据库的交互协议向主数据库发送备份文件系统(dump)协议,主数据库收到canal发送过来的dump请求,开始推送目标日志文件给canal,然后canal存放到消息队列中,通过消息队列再发送到存储目的地。其中,目标日志文件可以是binlog,binlog是一个二进制格式的文件,用于记录数据库的更新信息,例如更改数据库表或者更改内容等都会记录到binlog中。但是现有技术的这种方式,消息队列中存放的binlog在转发至存储目的地时,由于可能存在延时,会导致应该后到的数据先一步到达,而应该先到的数据延迟到达。如此,在进行数据迁移时就会存在数据发生混淆,造成数据迁移出错的情况。
74.针对上述问题,本技术实施例提供的数据迁移方法、装置、计算机设备和可读存储介质,通过对比数据迁入库(即第二数据库)中数据的版本号与第一数据库中发生变更的数据的版本号(变更的数据会存放到消息队列中,通过消息队列转达至第二数据库),能够避免消息队列的延迟导致的版本号大的变更数据比版本号小的变更数据先到达第二数据库,造成数据混乱,导致数据迁入库的数据更新发生错误的问题,提高数据迁移效果。
75.下面,通过具体实施例对本技术的技术方案进行详细说明。需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再
赘述。
76.图2为本技术实施例提供的数据迁移方法实施例一的流程示意图。该方法可以应用于计算机等终端设备,如图2所示,该方法具体可以包括如下步骤:
77.s201、响应于数据迁移指令,将第一数据库中的待迁移数据迁移至第二数据库。
78.示例性的,数据迁移指令中包括有数据库标识,即第一数据库的标识和第二数据库的标识,通过标识来区分出哪个数据库是数据迁出库,哪个数据库是数据迁入库。
79.在本实施例中,第一数据库为需要进行数据迁移的数据迁出库,数据需要从第一数据库迁移至第二数据库中。示例性的,第一数据库可以是第一服务器上的数据库,第二数据库可以是第二服务器上的数据库。可选的,第一数据库和第二数据库可以是同一个服务器的数据库,第一数据库可以是单个数据库,第二数据库可以多个数据库,即数据迁移的目的用于进行分库。
80.其中,待迁移数据可以是第一数据库的全量数据,即第一数据库中的所有数据。在进行数据迁移时,可以将第一数据库的全量数据进行复制,迁移到第二数据库中。
81.在本实施例中,若第一数据库和第二数据库为服务器的数据库,且在进行数据迁移时服务器不停机,则可以将开始进行数据迁移的时间节点作为第一时间节点,全量数据是第一时间节点之前第一数据库中存储的数据。在数据迁移过程中,可能会有业务请求访问服务器,从而会出现增量数据,即增量数据是指在第一时间节点之后,对待迁移数据进行更新、删除、新增等所产生的。可以理解,为了保证第一数据库和第二数据库中数据的一致性,在数据迁移过程中所产生的增量数据也需要同步至第二数据库中。
82.其中,可以使用预设的同步数据库工具来实现第一数据库的待迁移数据同步至第二数据库中。示例性的,根据第一数据库和第二数据库中表的结构是否一致,可以选取不同的同步数据库工具。
83.示例性的,第一数据库可以是关系型数据库mysql,mysql是一款安全、跨平台、高效的,并与主流编程语言紧密结合的数据库系统。第二数据库可以是动态弹性库。
84.s202、在第一数据库中的待迁移数据存在变更时,获取第一数据库中变更后的待迁移数据的第一标识信息、已迁移至第二数据库中的迁移数据的第二标识信息。
85.其中,在服务器未停机的情况下,第一数据库依然处于使用状态,数据有可能会存在变更,例如可以有数据更新、删除、新增等操作。这些变更的数据同样需要同步到第二数据库中。
86.在本实施例中,可以对第一数据库的binlog进行监听,当有数据变更事件发生时,变更后的数据会存放到消息队列中,并通过第一标识信息进行标识。每一次数据变更,都可以通过一个第一标识信息进行标识。示例性的,第一标识信息可以是版本号,第一次数据变更时的版本号可以为1,第二次数据变更时的版本号可以为2,后续每一次数据变更时,版本号可以在原基础上加1。
87.其中,已经迁入到第二数据库中的迁移数据也存在一个第二标识信息,在每一次将第一数据库中变更的数据更新至第二数据库中时,第二数据库中的第二标识信息也会发生更新。
88.示例性的,在第一数据库的数据迁移至第二数据库,且第一数据库的数据第一次发生变更时,第一数据库中的数据的版本号可以与迁移至第二数据库中的数据的版本号相
同,即第一次发生数据变更时,第一标识信息与第二标识信息相同。
89.s203、根据变更后的待迁移数据、第一标识信息和第二标识信息,对已迁移至第二数据库中的迁移数据进行更新。
90.在本实施例中,存放在消息队列中的变更数据可以包括变更数据a和变更数据b,都用于对第二数据库中的迁移数据进行更新。示例性的,变更数据a是需要先更新到第二数据库中的,其版本号较低,例如版本号为1,而变更数据b是需要后更新到第二数据库中的,其版本号较高,例如版本号为2。但是由于消息队列有可能存在延迟,会造成变更数据b先一步到达第二数据库,而变更数据a会延迟一步到达第二数据库。
91.示例性,在对第二数据库中的迁移数据进行更新时,可以比对迁移数据的第二标识信息和变更后的待迁移数据的第一标识信息,若相同,则进行更新。
92.例如,第二数据库中的迁移数据的第二标识信息可以为版本号,其版本号为1,与变更数据a的版本号一致,此时就可以将变更数据a更新到第二数据库中。
93.本技术实施例通过将数据迁移到第二数据库,在第一数据库存在数据修改时,可以根据其修改时的第一标识信息,与迁移到第二数据库中数据的第二标识信息进行对比,从而确定是否对第二数据库中的数据进行更新,避免了消息队列延迟所产生的数据混淆。
94.在一些实施例中,在上述步骤s201中“将第一数据库中的待迁移数据迁移至第二数据库”,具体可以通过如下步骤实现:
95.获取第一数据库中的待迁移数据的初始版本号;
96.根据预设第一迁移工具,将第一数据库中的待迁移数据复制至第二数据库,作为已迁移至第二数据库中的迁移数据;
97.将初始版本号作为已迁移至第二数据库中的迁移数据的第二标识信息。
98.示例性的,可以在待迁移数据中添加初始版本号进行标识,在将待迁移数据复制至第二数据库之后,第二数据库中的迁移数据也添加有该初始版本号。即当前第一数据库中待迁移数据的第一标识信息为初始版本号,当前第二数据库中的迁移数据的第二标识信息也为初始版本号。
99.在本实施例中,预设第一迁移工具可以是同步数据库工具jtransfer,且第一数据库中的表结构与第二数据库中的表结构相同。
100.本技术实施例通过将第一数据库中的待迁移数据的初始版本号作为第二数据库中的迁移数据的第二标识信息,能够对第二标识信息进行版本标识,在后续对迁移数据进行更新时,可以准确识别出迁移数据当前的更新版本,避免在更新过程中出现数据混乱。
101.进一步的,在上述实施例的基础上,在一些实施例中,上述步骤s202中“在第一数据库中的待迁移数据存在变更时,获取第一数据库中变更后的待迁移数据的第一标识信息”,具体可以通过如下步骤实现:
102.根据预设第二迁移工具对第一数据库进行监听;
103.在监听到第一数据库中的待迁移数据存在变更时,将第一数据库中的待迁移数据的初始版本号作为变更后的待迁移数据的第一标识信息。
104.在本实施例中,预设第二迁移工具可以是canal或者binlake,其中,binlake与canal类似,是对第二数据库的binlog进行监听,监听是否存在数据变更,并将变更后的数据存放到消息队列中。
105.示例性的,第一数据库中的待迁移数据变更可以是指数据新增、数据更新和数据删除等操作。在使用预设第一迁移工具将第一数据库中的待迁移数据迁移至第二数据库的过程中,当第一数据库中的数据与第二数据库中的数据的总数相差特别小(例如满足预设最小值)时,可以关闭预设第一迁移工具,并使用预设第二迁移工具进行数据同步。
106.示例性的,在第一数据库中的待迁移数据首次进行数据变更时,其第一标识信息可以为初始版本号,与第二数据库中的迁移数据的第二标识信息一致。在第一数据库中的待迁移数据第二次进行数据变更时,其第一标识信息可以更新,后续每进行一次数据变更,第一标识信息都会相应的更新一次。
107.本技术实施例通过将初始版本号作为变更后的待迁移数据的第一标识信息,能够对变更后的待迁移数据进行标识,当确定出不同版本的变更后的待迁移数据,避免在将不同版本的变更后的待迁移数据存放到消息队列之后,由于消息队列的延迟,导致不同版本的变更后的待迁移数据送达至第二数据库时发生混乱的问题。
108.进一步的,在上述实施例的基础上,在一些实施例中,上述步骤s203具体可以通过如下步骤实现:
109.获取变更后的待迁移数据的同步标识字段的取值;
110.在同步标识字段的取值与预设第一数值匹配时,将第一标识信息与第二标识信息进行对比;
111.若对比一致,则根据预设第二迁移工具和变更后的待迁移数据,对已迁移至第二数据库中的迁移数据进行更新。
112.其中,同步标识字段的取值用于指示变更后的待迁移数据的来源。示例性的,同步标识字段的取值可以为0或者1或者2,其中,当同步标识字段取值为0时,表示为默认值,在同步标识字段取值为1时,表示待迁移数据来源于第一数据库。当同步标识字段取值为2时,表示待迁移数据已经迁移至第二数据库中。示例性的,预设第一数值可以为1。
113.在本实施例中,在第一数据库中的待迁移数据迁移到第二数据库中之后,第二数据库中已迁移的迁移数据的第二标识信息为初始版本号。在第一数据库中的待迁移数据第一次发生变更后,变更后的待迁移数据的第一标识信息也为初始版本号。
114.示例性的,在第一数据库中的待迁移数据第一次变更时,变更后的待迁移数据的第一标识信息可以为版本号1,第二次数据变更时,变更后的待迁移数据的第一标识信息可以为2,后续每一次进行数据变更,变更后的待迁移数据的第一标识信息都会在原基础上加1。
115.本技术实施例通过对比版本号,可以避免第二数据库中的数据更新发生混乱,导致版本号小的变更数据覆盖版本号高的变更数据的问题,提高数据迁移的准确性。
116.进一步的,在上述实施例的基础上,在一些实施例中,在对已迁移至第二数据库中的迁移数据进行更新之后,还可以将第二标识信息进行更新。
117.示例性的,第二标识信息在第二数据库中的迁移数据更新之前可以为初始版本号,例如1。当第二数据库中的迁移数据更新完成之后,第二标识信息可以在原基础上加1,变为2。示例性的,后续每一次数据更新完成之后,第二标识信息都会在原基础上加1。
118.本技术实施例通过对第二标识信息进行更新,能够在第一数据库中的待迁移数据发生下一次变更时,与下一次变更后的待迁移数据的版本号保持一致,提高数据迁移的准
确性。
119.在上述实施例的基础上,在一些实施例中,在对已迁移至第二数据库中的迁移数据进行更新之后,还可以将更新后的已迁移至第二数据库中的迁移数据的同步标识字段的取值进行更新。
120.具体的,在将第一数据库中变更后的数据迁移到第二数据库中时,此时的数据已经处于第二数据库中,故而其来源发生变更。
121.本技术实施例通过将同步标识字段的取值进行更新,能够识别出数据来源的改变,避免第一数据库与第二数据库中的数据混淆。
122.图3为本技术实施例提供的数据迁移方法实施例二的流程示意图,如图3所示,在将第一数据库中的待迁移数据迁移至第二数据库之后,还可以包括如下步骤:
123.s301、监听数据修改事件,将修改数据存放到消息队列。
124.具体的,可以使用binlake对第一数据库(即mysql)的binlog进行监听,确定第一数据库是否存在数据新增、数据更新等数据修改事件。当存在数据修改事件时,将第一数据库mysql中的修改数据存放到消息队列jmq中。
125.s302、确定同步标识字段是否取值为预设第一数值。
126.其中,预设第一数值可以取值为1,若修改数据的同步标识字段取值不为1,则表示该修改数据的来源不为第一数据库mysql,则放弃本次数据更新。
127.s303、对比版本号,若版本号相同,则进行数据更新,将同步标识字段的取值更新为预设第二数值。
128.其中,预设第二数据可以取值为2,当版本号相同时,则表示可以对第二数据库jed中的数据进行更新,即将第一数据库mysql中发生修改的修改数据同步至第二数据库jed中。
129.在一些实施例中,上述的数据迁移方法还可以包括如下步骤:
130.响应于数据查询请求,获取预设配置中心的第一配置信息;
131.根据第一配置信息和数据查询请求的请求接口,确定查询对象;
132.根据数据查询请求,在查询对象中进行数据查询,得到查询结果。
133.其中,查询对象为第一数据库或第二数据库,查询结果用于指示第二数据库是否存在数据异常。
134.在本实施例中,在第一数据库中的数据全部同步完成至第二数据库之后,需要将部分接口切量到第二数据库,例如非实时查询接口,通过非实时查询接口进行数据查询,来进行数据校验,确定数据迁移过程中数据是否保持一致性。
135.其中,非实时查询接口可以做成动态配置,通过在预设配置中心添加第一开关,根据第一开关的第一开关值(即第一配置信息),来为非实时查询接口配置对应的数据库。
136.示例性的,第一开关值可以为0或者1。当第一开关值为0时,表示不开启非实时查询切量逻辑,在进行数据查询时,选择第一数据库作为数据源,进行数据查询;当第一开关的取值为1时,表示开启非实时查询切量逻辑,在进行数据查询时,若请求接口与预设配置中的配置接口相同,则选择第二数据库作为数据源,进行数据查询。
137.本技术实施例通过将部分接口切换到第二数据库,通过部分接口对第二数据库进行数据查询,校验数据在迁移过程中是否一致,当不一致时,可以通过配置第一开关的第一
开关值,使得数据查询请求依然走第一数据库。实现了在第二数据库存在数据不一致时,可以迅速的回滚到第一数据库,保证业务的正常进行。
138.图4为本技术实施例提供的数据迁移方法实施例三的流程示意图,如图4所示,在将第一数据库中的数据同步到第二数据库之后,该方法还可以包括如下步骤:
139.s401、读取第一开关值。
140.其中,第一开关值可以取值为1或者0,第一开关值可以预先设置并存储在预设配置中心中。
141.s402、确定是否开启非实时查询。
142.具体的,当第一开关值为1时,表示开启非实时查询,从第二数据库进行数据查询,当开关值为0时,表示关闭非实时查询,从第一数据库mysql进行数据查询。
143.示例性的,第一开关值的取值可以根据实际情况进行切换,例如当数据迁移过程中出现异常,导致第二数据库的数据不一致时,可以将第一开关值切换为0,此时,在对服务器发起查询请求时,将在第一数据库中进行数据查询。
144.s403、请求接口是否在配置中。
145.具体的,在进行数据查询时,有部分接口切换到了第二数据库,这些切换到第二数据库中的接口需要写入配置中,当有请求接口发起数据查询请求时,若该请求接口为配置中的接口,则在第二数据库中进行数据查询。
146.s404、查询第二数据库。
147.s405、返回结果。
148.在一些实施例中,上述的数据迁移方法还可以包括如下步骤:
149.响应于数据读写操作请求,获取预设配置中心的第二配置信息;
150.当第二配置信息满足预设条件时,确定数据读写操作请求的逻辑类型;
151.根据逻辑类型,在第一数据库中进行数据查询/数据更新或在第二数据库中进行数据写入/数据查询/数据更新;
152.当第二配置信息未满足条件时,在第一数据库中进行数据写入/数据查询/数据更新。
153.其中,第二配置信息包括有总开关逻辑和切量信息,其中,切量信息可以是订单类型,总开关逻辑可以取值1或2或3,当总开关逻辑取值为1时,表示数据读写操作请求数据源为第一数据库,当总开关逻辑取值为2时,表示部分或全部数据读写操作请求的数据源为第二数据库,当总开关逻辑为3时,则表示第二数据库出现异常。
154.其中,预设条件可以是总开关逻辑取值为2且订单类型在缓存中。
155.示例性的,数据读写操作请求的逻辑类型可以新增逻辑、查询逻辑、更新逻辑,新增逻辑用于数据写入,查询逻辑用于数据查询,更新逻辑用于数据更新。
156.本技术实施例通过对第二配置信息进行配置,在数据同步完成和数据查询无误之后,能够将部分接口切换到第二数据库,以验证第二数据库是否能够正常工作,在不能正常工作时,数据的读写依然可以在第一数据库进行,保证第一数据库与第二数据库之间的随时切换,并最终实现将数据的读写从第一数据库过渡至第二数据库,完成最终的迁移。
157.进一步的,在上述实施例的基础上,在第一数据库中进行数据查询/数据更新或在第二数据库中进行数据写入/数据查询/数据更新时,可以具体通过如下步骤实现:
158.当逻辑类型为新增逻辑时,在第二数据库和预设缓存中写入目标数据;
159.当逻辑类型为更新逻辑/查询逻辑时,确定预设缓存中是否缓存有目标数据;
160.若缓存有目标数据,则在第二数据库中进行数据更新/数据查询;
161.若未缓存有目标数据,则在第一数据库中进行数据更新/数据查询。
162.在本实施例中,在第二数据库中写入目标数据时,可以新增目标数据的业务主键(例如问诊单号),并将目标数据的业务主键写入到缓存中,其中,业务主键用于对目标数据进行标识。
163.示例性的,业务主键还可以包括订单号或者应用程序的用户唯一标识。
164.示例性的,在将目标数据写入至缓存中时,可以根据业务主键,分为四个维度,具体为问诊单号(diagid)、订单号(orderid)、用户唯一标识(userpin)和子系统问诊单号(subsystem diagid)。具体如下表1所示:
165.数据维度数据类型keyvaluediagidstringdiagid1orderidstringorderid1userpinsetuserpin1subsystem diagidstringsubsystem diagid1
166.表1
167.示例性的,在将目标数据缓存至缓存中时,若第一次缓存失败,可以继续缓存,当缓存失败超过三次时,则输出报警提示。
168.本技术实施例通过在对第二数据库进行数据写入时,同时将目标数据写入到预设缓存中,在进行数据查询或数据更新时,能够直接根据缓存中的数据确定数据是否已写入到第二数据库,避免消息队列造成的延迟。
169.进一步的,在第二数据库和预设缓存中写入数据之后,还可以将写入至第二数据库中的目标数据同步至第一数据库中。
170.示例性的,在将写入至第二数据库中的目标数据同步至第一数据库时,可以使用binlake或者canal,其数据同步过程可以参考将第一数据库同步至第二数据库的过程。
171.示例性的,在将目标数据同步至第一数据的过程中,可以通过如下步骤实现:
172.确定目标数据的版本号和同步标识字段的取值;
173.在目标数据的同步标识字段的取值与预设第二数值匹配时,将目标数据的版本号与第一数据库中的待同步数据的版本号进行对比;
174.若对比一致,则根据目标数据,对第一数据库中的待同步数据进行更新。
175.示例性的,在同步过程中需要判断目标数据的同步标识字段的取值,若取值为2,在表示该数据的来源为第二数据库。
176.本技术实施例通过确定同步标识字段的取值,能够为第一数据库中的数据和第二数据库中的数据打上来源标签,避免在第一数据库中的数据同步更新到第二数据库之后,第二数据库根据更新后的数据,继续同步到第一数据库中,形成数据同步死锁的问题。
177.图5为本技术实施例提供的数据迁移方法实施例四的流程示意图,如图5所示,在对已迁移至第二数据库中的迁移数据进行更新之后,还可以包括如下步骤:
178.s501、读取总开关逻辑。
179.其中,总开关逻辑的取值可以是1或2或3中的任意一个。
180.s502、判断总开关逻辑的取值。
181.具体的,当总开关逻辑取值为1时,选择第一数据库作为数据源,数据的读写操作在第一数据库中进行。当总开关逻辑取值为2时,则继续步骤s503。
182.s503、判断订单类型是否在缓存中。
183.在实施例中,以订单类型来进行数据切量,当订单类型在缓存中时,则进入步骤s504,若不在缓存中,则选择第一数据库作为数据源。示例性的,还可以在预设配置中心配置其他的条件来进行数据切量。
184.s504、选择第二数据库。
185.s505、当请求操作的逻辑类型为新增逻辑时,新增问诊单,将数据写入到第二数据库。
186.其中,问诊单可以是用户在访问服务器的某一个业务时所产生的单号,问诊单也属于业务主键中的一种,用于对数据进行标识。
187.s506、将数据写入缓存中。
188.示例性的,还可以将数据的业务主键也写入至缓存中,示例性的,业务主键还可以包括订单号、用户唯一标识等。
189.s507、当逻辑类型为更新逻辑或查询逻辑时,根据业务主键,判断数据是否在缓存中。
190.具体的,若数据在缓存中,则表示在第二数据库jed中也存在数据,可以在第二数据库jed中进行数据更新/数据查询,若数据不在缓存中,则需要从第一数据库mysql进行数据查询/数据更新。
191.s508、选择第二数据库进行数据更新/数据查询。
192.在上述实施例的基础上,在一些实施例中,上述数据迁移方法还可以包括如下步骤:
193.当第二配置信息未满足预设条件时,确定数据读写操作是否在预设时间段且包含目标数据的数据标识;
194.若是,则查询目标缓存中是否缓存有目标数据;
195.若目标缓存中缓存有目标数据,则根据第一标识信息和第二标识信息,对第一数据库和第二数据库进行数据合并,得到合并数据;
196.根据合并数据,对第一数据库进行更新。
197.示例性的,第二配置信息未满足预设条件可以是指第二配置信息中包含有预设异常值,其中,预设异常值用于指示第二数据库的数据异常。示例性的,预设异常值可以是指总开关逻辑取值为3。预设时间段可以是五分钟,通常数据切量的过程为几秒钟到几十秒钟,设置五分钟可以有效的覆盖数据。
198.示例性的,在数据合并时,可以确定出第一数据库中数据的第一标识信息,例如版本号、第二数据库中数据的第二标识信息,例如版本号,通过比对第一数据库中数据的版本号和第二数据库中数据的版本号,选取版本号大的数据作为合并数据,更新到第一数据库中。
199.本技术实施例通过设置预设条件,在第二配置信息中包含预设异常值,即指示第
二数据库存在数据异常时,可以将第一数据库和第二数据库中的数据进行合并,保障第一数据库的数据正常使用。
200.图6为本技术实施例提供的数据迁移方法实施例五的流程示意图,如图6所示,在对已迁移至第二数据库中的迁移数据进行更新之后,还可以包括如下步骤:
201.s601、总开关逻辑取值为预设异常值。
202.其中,预设异常值可以取值为3,用于指示第二数据库存在数据异常。
203.s602、判断是否在预设时间段内。
204.示例性的,预设时间段可以为5分钟。
205.s603、判断是否带有业务主键。
206.示例性的,业务主键包括问诊单号、订单号、用户唯一标识等。若存在业务主键,则继续后续步骤,若不存在业务主键,则在存在数据请求时,直接以第一数据库mysql作为数据源。
207.s604、判断缓存中是否有数据。
208.其中,若缓存中没有数据,则表明第二数据库中也不存在该数据,直接以第一数据库mysql作为数据源。
209.s605、使用aop选择数据源,根据入参条件和预设时间段查询数据。
210.其中,面向切面编程(aspect oriented programming,aop)是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
211.s606、使用aop选择数据源,根据入参条件查询数据。
212.s607、业务主键为主键,第一数据库mysql的数据与第二数据库jed的数据对比版本号,将版本号大的数据更新至第一数据库mysql,进行数据合并。
213.s608、数据合并,删除缓存。
214.下述为本技术装置实施例,可以用于执行本技术方法实施例。对于本技术装置实施例中未披露的细节,请参照本技术方法实施例。
215.图7为本技术实施例提供的数据迁移装置的结构示意图,该数据迁移装置可以集成在计算机设备中,也可以独立于计算机设备且与计算机设备协同完成本方案。如图7所示,该数据迁移装置70包括数据迁移模块71、标识获取模块72和数据更新模块73。
216.其中,数据迁移模块71用于响应于数据迁移指令,将第一数据库中的待迁移数据迁移至第二数据库。标识获取模块72用于在第一数据库中的待迁移数据存在变更时,获取第一数据库中变更后的待迁移数据的第一标识信息、已迁移至第二数据库中的迁移数据的第二标识信息。数据更新模块73用于根据变更后的待迁移数据、第一标识信息和第二标识信息,对已迁移至第二数据库中的迁移数据进行更新。
217.在一些实施例中,上述标识获取模块72具体可以用于:
218.获取第一数据库中的待迁移数据的初始版本号;
219.根据预设第一迁移工具,将第一数据库中的待迁移数据复制至第二数据库,作为已迁移至第二数据库中的迁移数据;
220.将初始版本号作为已迁移至第二数据库中的迁移数据的第二标识信息。
221.在一些实施例中,上述数据更新模块73具体可以用于:
222.根据预设第二迁移工具对第一数据库进行监听;
223.在监听到第一数据库中的待迁移数据存在变更时,将第一数据库中的待迁移数据的初始版本号作为变更后的待迁移数据的第一标识信息。
224.在一些实施例中,上述数据更新模块73具体可以用于:
225.获取变更后的待迁移数据的同步标识字段的取值,同步标识字段的取值用于指示变更后的待迁移数据的来源;
226.在同步标识字段的取值与预设第一数值匹配时,将第一标识信息与第二标识信息进行对比;
227.若对比一致,则根据预设第二迁移工具和变更后的待迁移数据,对已迁移至第二数据库中的迁移数据进行更新。
228.在一些实施例中,上述数据迁移装置70还包括更新模块,用于将第二标识信息进行更新。
229.在一些实施例中,上述数据迁移装置70还包括查询接口切换模块,用于:
230.响应于数据查询请求,获取预设配置中心的第一配置信息;
231.根据第一配置信息和数据查询请求的请求接口,确定查询对象,查询对象为第一数据库或第二数据库;
232.根据数据查询请求,在查询对象中进行数据查询,得到查询结果,查询结果用于指示第二数据库是否存在数据异常。
233.在一些实施例中,上述数据迁移装置70还包括数据读写切量模块,用于:
234.响应于数据读写操作请求,获取预设配置中心的第二配置信息;
235.当第二配置信息满足预设条件时,确定数据读写操作请求的逻辑类型;
236.根据逻辑类型,在第一数据库中进行数据查询/数据更新或在第二数据库中进行数据写入/数据查询/数据更新;
237.当第二配置信息未满足条件时,在第一数据库中进行数据写入/数据查询/数据更新。
238.在一些实施例中,上述数据读写切量模块,具体可以用于:
239.当逻辑类型为新增逻辑时,在第二数据库和预设缓存中写入目标数据;
240.当逻辑类型为更新逻辑/查询逻辑时,确定预设缓存中是否缓存有目标数据;
241.若缓存有目标数据,则在第二数据库中进行数据更新/数据查询;
242.若未缓存有目标数据,则在第一数据库中进行数据更新/数据查询。
243.在一些实施例中,上述数据迁移装置70还可以包括数据同步模块,用于将写入至第二数据库中的目标数据同步至第一数据库。
244.在一些实施例中,上述数据同步模块具体可以用于:
245.确定目标数据的版本号和同步标识字段的取值;
246.在目标数据的同步标识字段的取值与预设第二数值匹配时,将目标数据的版本号与第一数据库中的待同步数据的版本号进行对比;
247.若对比一致,则根据目标数据,对第一数据库中的待同步数据进行更新。
248.在一些实施例中,上述数据迁移装置70还包括数据合并模块,用于:
249.当第二配置信息未满足预设条件且包含预设异常值时,确定数据读写操作是否在预设时间段且包含目标数据的数据标识,预设异常值用于指示第二数据库的数据异常;
250.若是,则查询目标缓存中是否缓存有目标数据;
251.若目标缓存中缓存有目标数据,则根据第一标识信息和第二标识信息,对第一数据库和第二数据库进行数据合并,得到合并数据;
252.根据合并数据,对第一数据库进行更新。
253.本技术实施例提供的装置,可用于执行上述实施例中的方法,其实现原理和技术效果类似,在此不再赘述。
254.需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,数据迁移模块可以为单独设立的处理元件,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上数据迁移模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。在实现过程中,上述方法的各步骤或以上各个模块可以通过软件形式的指令完成。
255.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本技术实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
256.图8为本技术实施例提供的计算机设备的结构示意图。如图8所示,该计算机设备80包括:至少一个处理器81、存储器82、总线83及通信接口84。
257.其中:处理器81、通信接口84以及存储器82通过总线83完成相互间的通信。
258.通信接口84,用于与其它设备进行通信。该通信接口84包括用于进行数据传输的通信接口以及用于进行人机交互的显示界面或者操作界面等。
259.处理器81,用于执行存储器82中存储的计算机执行指令,具体可以执行上述实施例中所描述的方法中的相关步骤。
260.处理器81可能是中央处理器,计算机设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
261.存储器82,用于存放计算机执行指令。存储器82可能包含高速ram存储器,也可能还包括非易失性存储器,例如至少一个磁盘存储器。
262.本实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,当计算机设备的至少一个处理器执行该计算机指令时,计算机设备执行上述的各种
实施方式提供的数据迁移方法。
263.本实施例还提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在可读存储介质中。计算机设备的至少一个处理器可以从可读存储介质读取该计算机指令,至少一个处理器执行该计算机指令使得计算机设备实施上述的各种实施方式提供的数据迁移方法。
264.本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系;在公式中,字符“/”,表示前后关联对象是一种“相除”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中,a,b,c可以是单个,也可以是多个。
265.可以理解的是,在本技术实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本技术的实施例的范围。在本技术的实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术的实施例的实施过程构成任何限定。
266.最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献