1.本说明书实施例涉及数据库技术领域,特别涉及数据处理方法以及装置。
背景技术:2.内存数据库是指将数据放在内存中直接操作的数据库,其相对于磁盘的读写速度要快,通过将数据保存在内存中相比于从磁盘上访问能够很大程度的提高应用的性能。但是,由于内存数据库是基于计算机内存支持的,因此其持久性问题一直存在。为解决该问题,现有技术中会在设定的时间节点对内存中的索引进行备份,以在内存数据库重启后可以通过备份的索引供应用继续运行。但是内存数据库在重新启动时为恢复索引,均需要一定的时间通过扫描数据来实现,在数据量较大时恢复索引则需要花费大量的时间,制约了内存数据库的扩展能力,因此亟需一种有效的方案以解决上述问题。
技术实现要素:3.有鉴于此,本说明书实施例提供了一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
4.根据本说明书实施例的第一方面,提供了一种数据处理方法,包括:
5.确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器;
6.获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件;
7.在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态;
8.按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。
9.根据本说明书实施例的第二方面,提供了一种数据处理装置,包括:
10.确定模块,被配置为确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器;
11.获取模块,被配置为获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件;
12.读取模块,被配置为在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态;
13.更新模块,被配置为按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。
14.根据本说明书实施例的第三方面,提供了一种计算设备,包括:
15.存储器和处理器;
16.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行
指令时实现任上述数据处理方法的步骤。
17.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述数据处理方法的步骤。
18.根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。
19.本说明书提供的数据处理方法,在确定区域地址对应的内存分配区域,以及管理内存分配区域的内存分配器后,可以获取内存分配区域的索引数据,以及内存分配器的分配状态,此时可以将索引数据和分配状态一同写入磁盘文件,实现通过物理复制的方式对索引和状态持久化,避免因内存数据库重启而无法恢复索引的问题发生。当包含内存分配区域的内存数据库重启后,即可直接从磁盘文件中读取索引数据和分配状态,并按照分配地址将索引数据映射到内存分配区域,同时根据分配状态更新内存分配器的状态,实现结合磁盘文件完成索引和状态的恢复,可以有效的降低内存数据库的重启时间,以实现内存数据库可以续接重启前的状态继续运行。
附图说明
20.图1是本说明书一个实施例提供的一种数据处理方法的流程图;
21.图2是本说明书一个实施例提供的一种数据处理方法的示意图;
22.图3是本说明书一个实施例提供的一种数据处理方法的处理过程流程图;
23.图4是本说明书一个实施例提供的一种数据处理装置的结构示意图;
24.图5是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
25.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
26.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
27.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
28.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
29.物理复制:指将程序运行中的内存数据直接复制其他内存或者磁盘等区域的操作。
30.数据库索引:是指数据库在运行过程中维护的用于查询的数据结构。
31.内存数据库:是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。
32.在本说明书中,提供了一种数据处理方法,本说明书同时涉及一种数据处理装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
33.实际应用中,内存数据库在重新启动时为恢复索引,大多数采用redo log(重做日志)和checkpoint(检查点)等技术实现;其中,重做日志是在数据库运行过程中不断生成对索引的操作记录,恢复时通过重新执行这些记录更新重启后的数据库索引,当记录执行完成后,索引恢复完成,但是因为需要依次执行操作记录,故恢复速度较慢。而检查点是在数据库运行期间,定期扫描索引,将索引内存进行保存,恢复时扫描保存内存即可完成还原索引,但是该过程需要建立检查点,且保存索引速度慢,会对内存数据库的正常运行产生干扰。因此亟需一种有效的方案以解决上述问题。
34.有鉴于此,本说明书提供的数据处理方法,在确定区域地址对应的内存分配区域,以及管理内存分配区域的内存分配器后,可以获取内存分配区域的索引数据,以及内存分配器的分配状态,此时可以将索引数据和分配状态一同写入磁盘文件,实现通过物理复制的方式对索引和状态持久化,避免因内存数据库重启而无法恢复索引的问题发生。当包含内存分配区域的内存数据库重启后,即可直接从磁盘文件中读取索引数据和分配状态,并按照分配地址将索引数据映射到内存分配区域,同时根据分配状态更新内存分配器的状态,实现结合磁盘文件完成索引和状态的恢复,可以有效的降低内存数据库的重启时间,以实现内存数据库可以续接重启前的状态继续运行。
35.图1示出了根据本说明书一个实施例提供的一种数据处理方法的流程图,具体包括以下步骤。
36.步骤s102,确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器。
37.具体的,区域地址具体是指内存分配区域在内存中使用的固定地址空间,用于保证内存数据库重启前后,内存分配区域不会发生地址变化;相应的,内存分配区域具体是指内存数据库中用于保存索引数据的分配区域,其中,索引数据用于在内存数据库运行过程中运维用于查询的数据结构,只需要对索引数据进行保存,即可保证内存数据库重启后可以续接重启前的运行状态。相应的,内存分配器具体是指内存数据库中对包含内存块的内存分配区域进行管理的程序,可以实现确定每块内存的分配状态、针对查询如何分配内存块、分配出内存块后空闲内存块的处理、以及释放内存块的处理。
38.基于此,考虑到内存分配区域的内存块状态由内存分配器管理,当内存数据库重启后,若仅针对内存分配区域的索引数据进行恢复,而不考虑内存分配区域内各个内存块的状态,将会产生极大的内存资源浪费,因此为了避免造成内存资源浪费,可以在需要针对内存数据库进行索引数据保存阶段,确定区域地址对应的内存分配区域,同时确定内存分配区域关联的内存分配器,即管理内存分配区域的内存分配器,实现后续可以采用索引数据和分配状态都保存的方式,以提高内存数据库重启速度的同时,避免内存资源的浪费。
39.进一步的,在确定内存分配区域的过程中,考虑到内存数据库中不仅包含存储索
引数据的分配区域,还包含存储其他数据的分配其余,如果此阶段针对全部区域都进行数据保存,将会消耗更多的时间和资源;因此为了能够提高资源利用率和降低时间的消耗,可以根据内存数据库预先配置的规则完成,也就是说,在检测到备份事件后,将按照预先配置的规则完成内存分配区域的确定,本实施例中,具体实现方式如下:
40.在检测到所述内存数据库对应的备份事件的情况下,在所述内存数据库中确定至少两个初始内存分配区域,所述至少两个初始内存分配区域包括索引分配区域和临时分配区域;根据所述备份事件确定所述区域地址,并按照所述区域地址在所述至少两个初始内存分配区域中,选择所述索引分配区域作为所述内存分配区域。
41.具体的,备份事件具体是指当前时间节点需要针对内存数据库进行索引数据保存的事件,用于避免内存数据库重启后,无法继续重启前的节点继续运行程序。相应的,初始内存分配区域具体是指内存数据库中基于不同的规则定义的多个内存分配区域,包含索引分配区域和临时分配区域,其中,索引分配区域具体是指存储索引数据的内存分配区域,临时分配区域具体是指存储临时数据的内存分配区域。
42.基于此,在检测到内存数据库对应的备份事件的情况下,说明当前时间节点需要针对内存数据库中的索引数据进行备份,在此过程中,考虑到内存数据库中包含多个不同的初始内存分配区域,而需要保存的数据仅涉及索引数据,因此只需要确定存储索引数据的初始内存分配区域即可。即:可以根据备份事件确定区域地址,之后按照区域地址在至少两个初始内存分配区域中,选择索引分配区域作为内存分配区域,以用于后续的索引数据存储处理即可。
43.具体实施时,在针对内存数据库中的内存分配区域进行划分时,可以将保存索引数据的内存分配区域作为索引分配区域,而剩余的其他内存分配区域都作为临时分配区域,用于实现对内存数据库中的内存分配区域通过更加简洁的形式区分,以提高索引数据拷贝效率。
44.综上,通过对初始内存分配区域进行区分,并在此基础上选择区域地址对应的索引分配区域,作为内存分配区域,以用于后续的索引数据保存处理,可以有效的提高索引数据保存效率。
45.步骤s104,获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件。
46.具体的,在上述确定内存分配区域以及内存分配器的基础上,进一步的,为了能够实现索引数据和分配状态持久化,以实现在内存数据库重启后,可以根据索引数据和分配状态恢复重启前的程序运行状态,用于避免造成资源浪费。因此,可以先获取内存分配区域存储的索引数据,以及内存分配器的分配状态,之后将索引数据和分配状态都写入磁盘文件,以达到数据持久化存储的目的。
47.其中,分配状态具体是指内存分配器针对内存分配区域中的各个内存块的分配情况进行记录的状态;相应的,磁盘文件具体是不受断电影响的计算机文件,可以实现对数据持久化。
48.实际应用中,在将索引数据写入磁盘文件时,可以使用mmap映射文件,实现将索引数据写入磁盘文件,或者直接写入磁盘文件进行物理拷贝,实现将索引数据使用磁盘文件进行保存,以使得索引数据可以持久化,避免丢失和无法使用的问题发生。
49.进一步的,为了能够降低内存资源的消耗,实现在内存数据库重启后,可以通过内存分配器在较短的时间内接管恢复的内存分配区域,还需要对内存分配器的分配状态进行确定,并对其进行持久化,用于在内存数据库重启后可以复用存储的分配状态,降低内存数据库的启动时间,本实施例中,具体实现方式如下:
50.创建关联所述内存分配区域的目标内存分配区域,并将所述内存分配区域的分配操作切换至所述目标内存分配区域;根据切换结果读取所述内存分配器的所述分配状态。
51.具体的,目标内存分配区域具体是指在对内存分配区域的索引数据进行存储时,可以使得内存分配区域不受其他操作所影响,实现将内存分配区域的分配操作切换到目标内存分配区域完成。相应的,分配操作切换即为在对索引数据存储阶段发生的分配操作,需要切换到目标内存分配区域完成的处理。
52.基于此,为了避免保存过程中对系统运行产生冲突,可以使用原子性方案对内存分配器状态进行保存,也就是说,实现分配状态保存和分配操作不发生在内存分配区域上,即内存分配器可以先创建一个新的内存分配区域,即目标内存分配区域,之后将内存分配区域的分配操作切换到目标内存分配区域,实现在索引数据保存阶段,可以将针对内存分配区域的操作转移到目标内存分配区域,以在目标内存分配区域上完成相应的分配操作。以实现根据分配操作切换结果完成对内存分配器的分配状态确定。
53.需要说明的是,在对内存分配区域中的索引数据进行保存时,如果依旧在旧的内存分配区域上执行相应的分配操作,可能会导致分配状态保存的不够准确,在此基础上若内存数据库重启,会出现索引数据和分配状态不匹配的问题,因此为了避免这一问题带来的系统不稳定的影响,选择创建新的内存分配区域,用于在新的内存分配区域上完成分配操作。
54.综上,通过采用创建新的内存分配区域,并将旧的内存分配区域的分配操作切换到新的内存分配区域,可以实现索引数据保存和分配操作互不影响,使得系统运行不会产生冲突的情况下完成索引数据保存,从而达到索引数据持久化的目的。
55.更进一步的,在根据内存分配区域的分配操作切换结果读取分配状态时,考虑到内容分配区域中包含多个内存块,而每个内存块对应不同的分配状态,因此需要整合全部内存块的分配状态才能够确定内存分配器的分配状态,本实施例中,具体实现方式如下:
56.根据切换结果扫描所述内存分配区域,确定所述内存分配区域中包含的内存块;根据所述内存分配器确定所述内存块的分配信息;通过对所述内存块的分配信息进行整合,生成所述内存分配器的所述分配状态。
57.具体的,内存块具体是指内存分配区域中最小的内存单位,多个内存块组成内存分配区域;相应的,分配信息具体是指内存块是否被分配的信息,通过对各个内存块的分配信息进行整合,可以确定内存分配器的分配状态。
58.基于此,在内存分配区域的分配操作切换完成后,可以对内存分配区域进行扫描,从而确定内存分配区域中包含的内存块,之后根据内存分配器确定每个内存块的分配信息,即每个内存块的分配情况,最后通过整合内存块的分配信息,即可得到内存分配区域在内存分配器中的分配状态,以用于后续进行持久化。
59.综上,通过扫描内存分配区域中包含的各个内存块的分配信息,可以实现精准的确定内存分配器的分配状态,在此基础上进行持久化,可以使得磁盘文件中写入的索引数
据和分配状态相匹配,以实现在恢复阶段可以快速的启动内存数据库。
60.此外,考虑到保存索引数据和分配状态过程中,内存分配区域可能接收到释放指令,如果直接在内容分配区域中执行释放操作,可能会造成保存后的分配状态与当前时刻的分配状态不对应的问题,在此基础上进行内存数据库的重启,释放操作将无法执行,因此为了避免上述问题,可以针对释放操作所对应的内存块状态完成释放处理,本实施例中,具体实现方式如下:
61.在接收到针对所述内存分配区域提交的内存块释放指令的情况下,确定目标内存块;检测所述目标内存块的目标分配状态是否保存至所述磁盘文件;若否,对所述内存释放指令进行延迟处理,直至所述目标分配状态写入所述磁盘文件,根据所述内存块释放指令在所述目标内存分配区域中释放所述目标内存块映射的内存块;若是,根据所述内存块释放指令在所述目标内存分配区域中释放所述目标内存块映射的内存块。
62.具体的,内存块释放指令具体是指内存分配区域中包含的目标内存块进行释放处理的操作,用于将目标内存块中存储的数据进行删除;相应的,目标内存块具体是指内存分配区域中,当前时刻执行释放操作的内存块。相应的,目标分配状态具体是指目标内存块的分配状态。
63.基于此,在对内存分配器的分配状态进行持久化时,若接收到针对内存分配区域提交的内存块释放指令,此时可以确定内存块释放指令需要释放的目标内存块,此时可以检测目标内存块的目标分配状态是否已经保存至磁盘文件,也就是说,检测目标分配状态是否持久化,若否,说明目标内存块的目标分配状态还未写入磁盘文件,如果持续目标内存块进行释放处理,将会影响系统运行,且导致系统冲突,即影响索引数据和分配状态的存储;因此为了能够在不影响数据存储的前提下完成内存释放,可以对内存释放指令进行延迟处理,即延迟内存释放操作,直至目标分配状态被写入磁盘文件后,再根据延迟后的内存释放指令在目标内存分配区域中释放目标内存块映射的内存块。
64.若是,说明目标内存块的目标分配状态已经写入磁盘文件,此时释放处理并不会对分配状态写入磁盘文件产生影响,因此可以直接执行内存块释放指令,实现在目标内存分配区域中释放目标内存块映射的内存块。
65.需要说明的是,目标内存分配区域是针对内存分配区域新建的内存分配区域,因此在执行内存块释放指令时,需要在目标内存分配区域上释放目标内存块映射的内存块,以达到释放内存资源的目的。实际应用中,在对内存块释放指令进行延迟处理时,可以使用tcache缓存释放操作,用于实现延迟处理。
66.此外,在分配状态保存完毕后,为了避免资源浪费,以及考虑到旧的内存分配区域中可能还包含不被目标分配区域管理的内存块,因此可以将内存分配区域和目标内存分配区域进行合并;也就是说,将旧的内存分配区域的所有权转移给新的内存分配区域,实现内存分配器可以对全部内存块都进行管理。
67.综上,在保存期间发生释放操作时,可以针对释放操作针对不同的情况进行处理,实现对释放操作进行处理的同时,可以不影响分配状态的保存,从而提高系统的并发处理能力。
68.进一步的,在得到索引数据和分配状态后,考虑到索引数据中可能包含运行索引数据,其仅在程序运行阶段才存在,如果对其进行保存,将会造成存储资源的浪费,因此可
以在保存索引数据后,对其进行压缩,达到减少占用存储空间的目的,本实施例中,具体实现方式如下:
69.确定所述索引数据中包含的运行索引数据;对所述索引数据中的所述运行索引数据进行删除,并将删除所述运行索引数据的索引数据写入所述磁盘文件。
70.具体的,运行索引数据具体是指程序运行过程中存在于内存数据库中的索引数据,在程序停止或者关闭后,这部分索引数据也就会被释放;也就是说,运行索引数据只有在程序运行过程中才会存在,而在索引数据保存阶段,程序是处于运行状态的,此时索引数据中将包含运行索引数据,如果此时对索引数据进行全部保存,将会消耗更多的存储空间,为了能够提高空间利用率,可以先确定索引数据中的运行索引数据,之后对运行索引数据进行删除处理,并将所述运行索引数据的索引数据写入磁盘文件即可,以达到节省空间资源的目的。
71.实际应用中,在对不包含运行索引数据的索引数据进行保存时,还可以在索引数据都写入磁盘文件后,通过对保存结果压缩的方式实现降低运行索引数据占用存储空间的问题。也就是说,在索引数据写入磁盘文件后,在从写入磁盘文件的索引数据中确定运行索引数据,之后从磁盘文件中删除运行索引数据,以达到节省存储空间资源的目的。其中,运行索引数据包括但不限于链表结构、链表指针等。
72.具体实施时,针对索引数据的压缩方式可以根据实际应用场景选择,本实施例在此不作任何限定。
73.综上,通过采用对运行索引数据删除的方式,减少写入磁盘文件的索引数据量,可以有效的提高索引数据写入效率,以及避免存储资源的浪费,且在后续恢复阶段,还能够基于少量的索引数据快速完成内存数据库的重启。
74.更进一步的,在向磁盘文件中写入内存分配器的分配状态时,考虑到分配状态是内存分配区域中包含的内存块的状态,而不同的内存块在当前时刻可能存在不同的分配状态,即已分配或者未分配,而未分配的内存块对应的状态如何也进行保存,在恢复阶段其也属于未使用状态,其并不会对程序恢复运行产生影响,因此如果对其状态进行保存,会降低内存数据库的启动速度,因此可以在分配状态存储时,对未分配的内存块进行释放,之后更新分配状态,降低分配状态的空间占用率,最后再写入磁盘文件即可,本实施例中,具体实现方式如下:
75.根据所述分配状态确定所述内存分配区域中未分配的待释放内存块,针对所述待释放内存块进行释放处理;根据释放处理结果对所述分配状态进行更新,并将更新后的分配状态写入所述磁盘文件。
76.具体的,待释放内存块具体是指内存分配区域中未被使用的内存块,即未被分配的内存块。基于此,在对分配状态进行存储时,可以先对分配状态进行遍历,从而确定内存分配区域中各个内存块的分配状态,之后选择未被分配的内存块作为待释放内存块,通过对待释放内存块进行释放处理,实现将待释放内存块归还给内存数据库,此时即可根据释放结果对分配状态进行更新,用于将释放的待释放内存块的分配状态剔除,最后将更新后的分配状态写入磁盘文件即可,用于实现压缩分配状态空间占用率。
77.例如,内存分配区域被切分为n块使用,用一个位图数据结构保存每一块的分配状态,如果n块内存块都被使用,如果继续使用位图将会占用更多的内存空间,因此可以使用
1bit来表示n个内存块都被分配使用,此时即可将位图删除,不需要将其写入磁盘文件,以达到节省空间资源的目的。
78.综上,通过采用对待释放内存块释放处理的方式,可以减少分配状态的文件大小,从而使得写入磁盘文件的分配状态不会包含冗余信息,以降低需要恢复的分配状态的数据量,提高内存数据库的启动速度。
79.步骤s106,在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态。
80.具体的,在上述完成将索引数据和分配状态写入磁盘文件后,即可继续通过内存数据库为程序提供运行环境。如果在索引数据和分配状态写入磁盘文件后,且在下一次重新写入新的索引数据和分配状态前,内存数据库因为外界因素而重启的情况下,如死机重启、断电重启等,则可以使用磁盘文件中的索引数据和分配状态对内存数据库进行重启处理,以实现内存数据库可以恢复到重启前的状态,继续为程序提供运行环境。因此,在包含内存分配区域的内存数据库重启后,可以从磁盘文件中读取索引数据和分配状态,之后将索引数据恢复到内存中,以及根据分配状态更新内存分配器,以达到重启内存数据库恢复程序运行环境的目的。
81.进一步的,考虑到在内存数据库重启阶段,为程序继续提供内存,供其运行的优先级最高,因此恢复索引数据和分配状态时,可以根据内存数据库的重启配置信息完成,本实施例中,具体实现方式如下:
82.获取所述内存数据库预设的重启配置信息,并按照所述重启配置信息对所述内存数据库进行重启处理;根据所述内存数据库的重启处理结果,检测所述内存分配器的快照信息是否可用;若是,执行所述在所述磁盘文件中读取所述索引数据和所述分配状态的步骤;若否,重启程序,重新建立索引即可。
83.具体的,重启配置信息具体是指内存数据库重启时,记录各个功能启动优先级的信息,用于控制内存数据库重启阶段,每个功能的重启先后顺序;相应的,快照信息具体是指内存分配器的分配状态存储的信息,通过判断快照信息是否可用,能够确定索引数据和分配状态是否可以恢复。
84.基于此,在内存数据库重启阶段,可以先获取内存数据库的重启配置信息,按照重启配置信息对内存数据库进行重启处理,实现将内存数据库中的部分功能按照先后顺序依次重启,实现线性重启的方式避免同一时间调用过多的计算资源。重启后,为了能够实现对内存数据库恢复到重启前的状态,需要对内存分配器的快照信息进行检测,若快照信息可用,说明磁盘文件中写入的索引数据和分配状态是未被损坏的,则此时即可执行步骤s106,在磁盘文件中读取索引数据和分配状态,用于后续使用。若快照信息不可用,说明盘文件中写入的索引数据和分配状态是损坏的,则此时需要重启启动程序,重新建立索引。
85.综上,通过采用重启配置信息的方式对内存数据库进行重启处理,实现采用线性重启部分功能的方式,减少高并发使用内存的问题发生,从而可以提高内存数据库的重启速度,实现在较短的时间内恢复程序运行,避免程序中断时间变长而影响下游服务。
86.步骤s108,按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。
87.具体的,在上述从磁盘文件中读取索引数据和分配状态后,为了能够使得内存数
据库可以会恢复到重启前的状态,可以按照区域地址将索引数据映射到内存分配区域,以及根据分配状态更新重启后的内存分配器的状态,用于实现将重启后的内存数据库可以恢复到重启前的状态,以继续运行程序。
88.进一步的,在从磁盘文件中读取索引数据映射到内存分配区域时,实则是内存数据库重启后,可以先根据磁盘文件中记录的信息确定区域地址,从而在内存数据库中确定内存分配区域,之后从磁盘文件中读取索引数据,并将其重新映回内存,即可完成索引的重建。
89.更进一步的,在索引数据恢复完成后,还需要对分配状态进行恢复,以达到避免内存资源浪费的问题,因此需要先将内存分配区域重新注册给内存分配器,再进行状态恢复即可,本实施例中,具体实现方式如下:
90.在所述内存分配器中注册所述内存分配区域,并根据注册结果扫描所述分配状态;根据扫描结果对所述内存分配区域中包含的内存块的分配信息进行更新,作为对所述内存分配器的状态更新。
91.参见图2所示的示意图,在启动服务器从初始分配时间加载服务器配置后,可以选择性启动部分功能,以提高内存数据库的启动速度,在此基础上,内存数据库拉起过程中首先需要尝试读取内存分配器的状态,并在成功后将索引数据映射到内存分配区域,此时,系统运行状态将与生成快照前一致,但是由于对应的内存分配器状态丢失,将会产生极大的内存资源浪费,其无法正常继续运行,因此,还需要对内存分配器的状态进行恢复。
92.也就是说,需要先在内存分配器中注册内存分配区域,之后根据注册结果扫描分配状态;以根据扫描结果对内存分配区域中包含的内存块的分配信息进行更新,以作为对内存分配器的状态更新。实现将内存块的各个分配状态更新到内存分配器中。即首先将内存分配区域重新注册会内存分配器,之后扫描保存的分配状态,修改对应内存块的分配器状态为已分配,实现将内存分配区域中的各个内存块状态更新到内存分配器中即可。
93.如图2所示,内存数据库重启后,会先检测内存分配器的快照信息是否可用,若可用,则加载索引数据和分配状态,之后修改对应区域的分配器状态,实现对内存数据库的恢复处理。如果快照信息不可用,则初始化索引数据,重建日志加载数据。且在任意一个恢复节点都会按照上述逻辑完成内存数据库的重启,用于可以维持内存数据库的重启前后可以续接。
94.综上,通过采用重新注册内存分配区域,并恢复分配状态的方式,可以避免内存分配器的状态丢失,可以很大程度的提高内存资源的利用率,避免状态丢失情况下的资源浪费。
95.此外,为避免产生空洞问题,可以在恢复分配状态后,再次扫面内存分配区域,用于归还未分配的内存块,本实施例中,具体实现方式如下:
96.通过状态更新后的内存分配器扫描所述内存分配区域,确定所述内存分配区域中未分配的空闲内存块;针对所述空闲内存块进行释放处理。
97.具体的,空闲内存块具体是指内存分配区域重新注册给内存分配器后,未被分配的内存块。基于此,在内存分配器的状态更新完成后,可以重新扫描内存分配区域,用于确定内存分配区域中未分配的空闲内存块;之后再针对空闲内存块进行释放处理,实现将未分配的区域归还给内存数据库,提高内存的利用率。
98.综上,在恢复内存数据库后,再进行一次扫描内存分配区域,可以实现对空闲内存块进行回收,以达到提高内存空间利用率的目的。
99.本说明书提供的数据处理方法,在确定区域地址对应的内存分配区域,以及管理内存分配区域的内存分配器后,可以获取内存分配区域的索引数据,以及内存分配器的分配状态,此时可以将索引数据和分配状态一同写入磁盘文件,实现通过物理复制的方式对索引和状态持久化,避免因内存数据库重启而无法恢复索引的问题发生。当包含内存分配区域的内存数据库重启后,即可直接从磁盘文件中读取索引数据和分配状态,并按照分配地址将索引数据映射到内存分配区域,同时根据分配状态更新内存分配器的状态,实现结合磁盘文件完成索引和状态的恢复,可以有效的降低内存数据库的重启时间,以实现内存数据库可以续接重启前的状态继续运行。
100.下述结合附图3,以本说明书提供的数据处理方法在内存数据库恢复场景中的应用为例,对所述数据处理方法进行进一步说明。其中,图3示出了本说明书一个实施例提供的一种数据处理方法的处理过程流程图,具体包括以下步骤。
101.步骤s302,在检测到内存数据库对应的备份事件的情况下,在内存数据库中确定至少两个初始内存分配区域。
102.步骤s304,根据备份事件确定区域地址,并按照区域地址在至少两个初始内存分配区域中,选择索引分配区域作为内存分配区域。
103.步骤s306,确定内存分配区域关联的内存分配器。
104.步骤s308,获取内存分配区域的索引数据,以及创建关联内存分配区域的目标内存分配区域。
105.步骤s310,将内存分配区域的分配操作切换至目标内存分配区域,根据切换结果读取内存分配器的分配状态。
106.步骤s312,确定索引数据中包含的运行索引数据。
107.步骤s314,对所索引数据中的运行索引数据进行删除,并将删除运行索引数据的索引数据写入磁盘文件。
108.步骤s316,根据分配状态确定内存分配区域中未分配的待释放内存块,针对待释放内存块进行释放处理。
109.步骤s318,根据释放处理结果对分配状态进行更新,并将更新后的分配状态写入磁盘文件。
110.此过程中,在接收到针对内存分配区域提交的内存块释放指令的情况下,确定目标内存块;检测目标内存块的目标分配状态是否保存至所述磁盘文件;若否,对内存释放指令进行延迟处理,直至目标分配状态写入磁盘文件,根据内存块释放指令在目标内存分配区域中释放目标内存块映射的内存块;若是,根据内存块释放指令在目标内存分配区域中释放目标内存块映射的内存块。
111.步骤s320,在内存数据库重启的情况下,获取内存数据库预设的重启配置信息。
112.步骤s322,按照所重启配置信息对内存数据库进行重启处理,根据内存数据库的重启处理结果检测内存分配器的快照信息。
113.步骤s324,在快照信息可用的情况下,在磁盘文件中读取索引数据,并按照区域地址将索引数据映射到内存分配区域。
114.步骤s326,在内存分配器中注册内存分配区域,并根据注册结果扫描磁盘文件中的分配状态。
115.步骤s328,根据扫描结果对内存分配区域中包含的内存块的分配信息进行更新,作为对内存分配器的状态更新。
116.步骤s330,通过状态更新后的内存分配器扫描内存分配区域,针对内存分配区域中未分配的空闲内存块进行释放处理。
117.综上所述,在确定区域地址对应的内存分配区域,以及管理内存分配区域的内存分配器后,可以获取内存分配区域的索引数据,以及内存分配器的分配状态,此时可以将索引数据和分配状态一同写入磁盘文件,实现通过物理复制的方式对索引和状态持久化,避免因内存数据库重启而无法恢复索引的问题发生。当包含内存分配区域的内存数据库重启后,即可直接从磁盘文件中读取索引数据和分配状态,并按照分配地址将索引数据映射到内存分配区域,同时根据分配状态更新内存分配器的状态,实现结合磁盘文件完成索引和状态的恢复,可以有效的降低内存数据库的重启时间,以实现内存数据库可以续接重启前的状态继续运行。
118.与上述方法实施例相对应,本说明书还提供了数据处理装置实施例,图4示出了本说明书一个实施例提供的一种数据处理装置的结构示意图。如图4所示,该装置包括:
119.确定模块402,被配置为确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器;
120.获取模块404,被配置为获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件;
121.读取模块406,被配置为在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态;
122.更新模块408,被配置为按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。
123.一个可选的实施例中,所述确定模块402进一步被配置为:
124.在检测到所述内存数据库对应的备份事件的情况下,在所述内存数据库中确定至少两个初始内存分配区域,所述至少两个初始内存分配区域包括索引分配区域和临时分配区域;根据所述备份事件确定所述区域地址,并按照所述区域地址在所述至少两个初始内存分配区域中,选择所述索引分配区域作为所述内存分配区域。
125.一个可选的实施例中,所述获取模块404进一步被配置为:
126.根据所述分配状态确定所述内存分配区域中未分配的待释放内存块,针对所述待释放内存块进行释放处理;根据释放处理结果对所述分配状态进行更新,并将更新后的分配状态写入所述磁盘文件。
127.一个可选的实施例中,所述获取模块404进一步被配置为:
128.确定所述索引数据中包含的运行索引数据;对所述索引数据中的所述运行索引数据进行删除,并将删除所述运行索引数据的索引数据写入所述磁盘文件。
129.一个可选的实施例中,所述获取模块404进一步被配置为:
130.创建关联所述内存分配区域的目标内存分配区域,并将所述内存分配区域的分配操作切换至所述目标内存分配区域;根据切换结果读取所述内存分配器的所述分配状态。
131.一个可选的实施例中,所述获取模块404进一步被配置为:
132.根据切换结果扫描所述内存分配区域,确定所述内存分配区域中包含的内存块;根据所述内存分配器确定所述内存块的分配信息;通过对所述内存块的分配信息进行整合,生成所述内存分配器的所述分配状态。
133.一个可选的实施例中,所述装置,还包括:
134.释放处理模块,被配置为在接收到针对所述内存分配区域提交的内存块释放指令的情况下,确定目标内存块;检测所述目标内存块的目标分配状态是否保存至所述磁盘文件;若否,对所述内存释放指令进行延迟处理,直至所述目标分配状态写入所述磁盘文件,根据所述内存块释放指令在所述目标内存分配区域中释放所述目标内存块映射的内存块;若是,根据所述内存块释放指令在所述目标内存分配区域中释放所述目标内存块映射的内存块。
135.一个可选的实施例中,所述读取模块406进一步被配置为:
136.获取所述内存数据库预设的重启配置信息,并按照所述重启配置信息对所述内存数据库进行重启处理;根据所述内存数据库的重启处理结果,检测所述内存分配器的快照信息是否可用;若是,执行所述在所述磁盘文件中读取所述索引数据和所述分配状态的步骤。
137.一个可选的实施例中,所述更新模块408进一步被配置为:
138.在所述内存分配器中注册所述内存分配区域,并根据注册结果扫描所述分配状态;根据扫描结果对所述内存分配区域中包含的内存块的分配信息进行更新,作为对所述内存分配器的状态更新。
139.一个可选的实施例中,所述装置,还包括:
140.释放模块,被配置为通过状态更新后的内存分配器扫描所述内存分配区域,确定所述内存分配区域中未分配的空闲内存块;针对所述空闲内存块进行释放处理。
141.本说明书提供的数据处理装置,在确定区域地址对应的内存分配区域,以及管理内存分配区域的内存分配器后,可以获取内存分配区域的索引数据,以及内存分配器的分配状态,此时可以将索引数据和分配状态一同写入磁盘文件,实现通过物理复制的方式对索引和状态持久化,避免因内存数据库重启而无法恢复索引的问题发生。当包含内存分配区域的内存数据库重启后,即可直接从磁盘文件中读取索引数据和分配状态,并按照分配地址将索引数据映射到内存分配区域,同时根据分配状态更新内存分配器的状态,实现结合磁盘文件完成索引和状态的恢复,可以有效的降低内存数据库的重启时间,以实现内存数据库可以续接重启前的状态继续运行。
142.上述为本实施例的一种数据处理装置的示意性方案。需要说明的是,该数据处理装置的技术方案与上述的数据处理方法的技术方案属于同一构思,数据处理装置的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
143.图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。
144.计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网
(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
145.在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
146.计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备500还可以是移动式或静止式的服务器。
147.其中,处理器520用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
148.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
149.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
150.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
151.本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。
152.上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
153.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
154.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖
区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
155.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
156.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
157.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
技术特征:1.一种数据处理方法,包括:确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器;获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件;在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态;按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。2.根据权利要求1所述的方法,所述确定区域地址对应的内存分配区域,包括:在检测到所述内存数据库对应的备份事件的情况下,在所述内存数据库中确定至少两个初始内存分配区域,所述至少两个初始内存分配区域包括索引分配区域和临时分配区域;根据所述备份事件确定所述区域地址,并按照所述区域地址在所述至少两个初始内存分配区域中,选择所述索引分配区域作为所述内存分配区域。3.根据权利要求1所述的方法,所述将所述分配状态写入磁盘文件,包括:根据所述分配状态确定所述内存分配区域中未分配的待释放内存块,针对所述待释放内存块进行释放处理;根据释放处理结果对所述分配状态进行更新,并将更新后的分配状态写入所述磁盘文件。4.根据权利要求1所述的方法,所述将所述索引数据写入磁盘文件,包括:确定所述索引数据中包含的运行索引数据;对所述索引数据中的所述运行索引数据进行删除,并将删除所述运行索引数据的索引数据写入所述磁盘文件。5.根据权利要求1所述的方法,所述获取所述内存分配器的分配状态,包括:创建关联所述内存分配区域的目标内存分配区域,并将所述内存分配区域的分配操作切换至所述目标内存分配区域;根据切换结果读取所述内存分配器的所述分配状态。6.根据权利要求5所述的方法,所述根据切换结果读取所述内存分配器的所述分配状态,包括:根据切换结果扫描所述内存分配区域,确定所述内存分配区域中包含的内存块;根据所述内存分配器确定所述内存块的分配信息;通过对所述内存块的分配信息进行整合,生成所述内存分配器的所述分配状态。7.根据权利要求5所述的方法,还包括:在接收到针对所述内存分配区域提交的内存块释放指令的情况下,确定目标内存块;检测所述目标内存块的目标分配状态是否保存至所述磁盘文件;若否,对所述内存释放指令进行延迟处理,直至所述目标分配状态写入所述磁盘文件,根据所述内存块释放指令在所述目标内存分配区域中释放所述目标内存块映射的内存块;若是,根据所述内存块释放指令在所述目标内存分配区域中释放所述目标内存块映射的内存块。
8.根据权利要求1所述的方法,所述在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态,包括:获取所述内存数据库预设的重启配置信息,并按照所述重启配置信息对所述内存数据库进行重启处理;根据所述内存数据库的重启处理结果,检测所述内存分配器的快照信息是否可用;若是,执行所述在所述磁盘文件中读取所述索引数据和所述分配状态的步骤。9.根据权利要求1所述的方法,所述根据所述分配状态更新所述内存分配器的状态,包括:在所述内存分配器中注册所述内存分配区域,并根据注册结果扫描所述分配状态;根据扫描结果对所述内存分配区域中包含的内存块的分配信息进行更新,作为对所述内存分配器的状态更新。10.根据权利要求1所述的方法,所述根据所述分配状态更新所述内存分配器的状态步骤执行之后,还包括:通过状态更新后的内存分配器扫描所述内存分配区域,确定所述内存分配区域中未分配的空闲内存块;针对所述空闲内存块进行释放处理。11.一种数据处理装置,包括:确定模块,被配置为确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器;获取模块,被配置为获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件;读取模块,被配置为在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态;更新模块,被配置为按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。12.一种计算设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至10任意一项所述方法的步骤。13.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至10任意一项所述方法的步骤。
技术总结本说明书实施例提供数据处理方法以及装置,其中所述数据处理方法包括:确定区域地址对应的内存分配区域,以及所述内存分配区域关联的内存分配器;获取所述内存分配区域的索引数据,以及所述内存分配器的分配状态,并将所述索引数据和所述分配状态写入磁盘文件;在包含所述内存分配区域的内存数据库重启的情况下,在所述磁盘文件中读取所述索引数据和所述分配状态;按照所述区域地址将所述索引数据映射到所述内存分配区域,以及根据所述分配状态更新所述内存分配器的状态。更新所述内存分配器的状态。更新所述内存分配器的状态。
技术研发人员:秦武 王正恒 朱国云 张为 李飞飞
受保护的技术使用者:阿里云计算有限公司
技术研发日:2022.06.17
技术公布日:2022/11/1