CN106557427B - 共享内存数据库的内存管理方法及装置 - Google Patents
共享内存数据库的内存管理方法及装置 Download PDFInfo
- Publication number
- CN106557427B CN106557427B CN201510622060.1A CN201510622060A CN106557427B CN 106557427 B CN106557427 B CN 106557427B CN 201510622060 A CN201510622060 A CN 201510622060A CN 106557427 B CN106557427 B CN 106557427B
- Authority
- CN
- China
- Prior art keywords
- database
- memory
- space
- physical memory
- capacity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种共享内存数据库的内存管理方法及装置,包括:在创建数据库的空间中按照预设的数据库容量的最大值为数据库分配虚拟内存空间;为数据库分配第一物理内存,将第一物理内存的开始地址设为虚拟内存空间的开始地址,以便在第一物理内存中插入或修改数据;判断数据库的空闲内存是否小于预设阈值,得到第一判断结果;在第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到数据库的虚拟内存空间中,并将第二物理内存的开始地址设为上一物理内存的尾部地址;扩大数据库可用的内存空间。本发明能够解决多段式共享内存数据库地址不连续的问题;简化多段式共享内存数据库扩容时需要重新映射共享内存而造成的管理复杂性。
Description
技术领域
本发明涉及内存数据库管理领域,特别是指一种共享内存数据库的内存管理方法及装置。
背景技术
在现在电信领域中,业务对于数据访问一般具有很高的性能要求,特别面对大量用户使用的数据时,不仅要求对数据的访问和存储要有很高的性能,更要求有可靠的扩容功能来应对电信领域不断增长的数据。
因此在电信应用领域中,存储技术必须满足具有高可靠性的扩容功能,内存数据库作为一种高性能数据访问存储技术能满足上述要求,在电信领域已经被广泛应用。
为了适应多核、多进程(多线程)访问内存数据库需要,并且为了高的效率,可以采用共享内存方式来建立内存数据库,其架构如图1。采用共享内存方式,在多进程访问数据时,就可以直接访问内存,而不需要在进程间传递数据而多次数据拷贝了,如图2所示为多进程访问共享内存示意图。为了管理简单以及稳定性和性能需要,开辟共享内存时,一般都固定大小,当数据增多目前数据库内存无法容纳时,需要重新修改申请数据库内存大小配置参数并重启数据库实例,然后再装载数据,此时就中断了对外服务;有些共享内存数据库虽然能不重启就扩大数据库容量,但其内存采用分段式管理方式,见图3,即将内存分成多个相同大小的段,扩容时,申请指定段大小的共享内存加入内存管理模块,以提高内存数据库容量,该种方式虽然满足了不重启数据库实例就能扩充内存的要求,但在存取记录数据时需要先判断数据在哪一个段中,即可能会跨内存段存取数据,在多段之间存取数据,虽然看起来操作比较简单,但对于本身性能就很高的内存库来说,跨段查找数据时,性能会较大降低,这对性能要求极高的内存数据库影响很大;另外该段新申请的共享内存也需要一定的机制来通知各个进程来映射,管理也复杂。
发明内容
本发明要解决的技术问题是提供一种共享内存数据库的内存管理方法及装置,能够解决多段式共享内存数据库地址不连续、需要跨段存取数据而造成的内存数据库访问性能下降的问题;简化了多段式共享内存数据库扩容时需要重新映射共享内存而造成的管理复杂性,提高了程序稳定性和访问效率。
为解决上述技术问题,本发明的实施例提供技术方案如下:
一方面,提供一种共享内存数据库的内存管理方法,包括:
在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间;
为所述数据库分配第一物理内存,将所述第一物理内存的开始地址设为所述虚拟内存空间的开始地址,并在所述第一物理内存中插入或修改数据;
判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果;
在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址;
扩大所述数据库可用的内存空间,并转向所述判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果的步骤。
进一步地,所述判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果的步骤之后还包括:
判断所述数据库的当前物理内存空间与预设扩容步长的大小之和是否小于所述虚拟内存空间的大小,得到第二判断结果;
所述在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址的步骤,具体为在所述第一判断结果和第二判断结果均为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中。
进一步地,所述扩大所述数据库可用的内存空间的步骤之后还包括:
在所述第二物理内存中插入或修改数据。
进一步地,所述在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间的步骤之前还包括:
设置所述数据库容量的最大值、所述数据库容量的初始值和所述数据库的扩容步长大小。
进一步地,所述第一物理内存的大小为所述数据库容量的初始值。
本发明实施例还提供了一种共享内存数据库的内存管理装置,包括:
创建模块,用于在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间;
第一分配模块,用于为所述数据库分配第一物理内存,将所述第一物理内存的开始地址设为所述虚拟内存空间的开始地址,并在所述第一物理内存中插入或修改数据;
第一判断模块,用于判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果;
第二分配模块,用于在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址;
扩容模块,用于扩大所述数据库可用的内存空间。
进一步地,还包括:
第二判断模块,用于判断所述数据库的当前物理内存空间与预设扩容步长的大小之和是否小于所述虚拟内存空间的大小,得到第二判断结果;
所述第二分配模块,具体用于在所述第一判断结果和第二判断结果均为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中。
进一步地,还包括:
写数据模块,用于在所述第二物理内存中插入或修改数据。
进一步地,还包括:
设置模块,用于设置所述数据库容量的最大值、所述数据库容量的初始值和所述数据库的扩容步长大小。
进一步地,所述第一物理内存的大小为所述数据库容量的初始值。
本发明的实施例具有以下有益效果:
上述方案中,对于内存数据库的内存管理,采用共享内存方式,并且采用虚拟内存空间和物理内存分别管理,各进程在启动时,会映射整块虚拟内存空间,后续内存扩容时,将申请的多块物理内存补充到该虚拟内存空间中,并且使多块物理内存连成一个连续的物理内存,同时增大数据库内存容量,数据库的内存是连续的一个整体,此时数据库在存取数据时,不用跨段查找,扩容前后,性能不会降低;另外,在多进程连接到数据库时,其打开的共享内存空间是整个虚拟内存空间,在数据库内存扩容后,不用通知各个进程重新映射共享内存,提高了数据库在扩容期间多进程访问数据库访问效率以及减小扩容管理复杂性的,与分段式共享内存管理相比,在性能上,能有20~40%左右的提高。
附图说明
图1为现有技术采用共享内存方式来建立数据库的示意图;
图2为现有技术多进程访问数据库的示意图;
图3为现有技术采用分段式管理内存的示意图;
图4为本发明实施例共享内存数据库的内存管理方法的流程图;
图5为本发明实施例数据库启动时共享内存创建的流程图;
图6为本发明实施例共享内存数据库扩容的流程图;
图7-11为本发明实施例虚拟内存空间和物理内存对应示意图。
具体实施方式
为使本发明的实施例要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明的实施例提供一种共享内存数据库的内存管理方法及装置,能够解决多段式共享内存数据库地址不连续、需要跨段存取数据而造成的内存数据库访问性能下降的问题;简化了多段式共享内存数据库扩容时需要重新映射共享内存而造成的管理复杂性,提高了程序稳定性和访问效率
实施例一
如图4所示,本实施例的共享内存数据库的内存管理方法,包括:
步骤11:在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间;
步骤12:为所述数据库分配第一物理内存,将所述第一物理内存的开始地址设为所述虚拟内存空间的开始地址,并在所述第一物理内存中插入或修改数据;
步骤13:判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果;
步骤14:在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址;
步骤15:扩大所述数据库可用的内存空间,并转向所述判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果的步骤。
本实施例对于内存数据库的内存管理,采用共享内存方式,并且采用虚拟内存空间和物理内存分别管理,各进程在启动时,会映射整块虚拟内存空间,后续内存扩容时,将申请的多块物理内存补充到该虚拟内存空间中,并且使多块物理内存连成一个连续的物理内存,同时增大数据库内存容量,数据库的内存是连续的一个整体,此时数据库在存取数据时,不用跨段查找,扩容前后,性能不会降低;另外,在多进程连接到数据库时,其打开的共享内存空间是整个虚拟内存空间,在数据库内存扩容后,不用通知各个进程重新映射共享内存,提高了数据库在扩容期间多进程访问数据库访问效率以及减小扩容管理复杂性的,与分段式共享内存管理相比,在性能上,能有20~40%左右的提高。
进一步地,所述判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果的步骤之后还包括:
判断所述数据库的当前物理内存空间与预设扩容步长的大小之和是否小于所述虚拟内存空间的大小,得到第二判断结果;
所述在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址的步骤,具体为在所述第一判断结果和第二判断结果均为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中。
进一步地,所述扩大所述数据库可用的内存空间的步骤之后还包括:
在所述第二物理内存中插入或修改数据。
进一步地,所述在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间的步骤之前还包括:
设置所述数据库容量的最大值、所述数据库容量的初始值和所述数据库的扩容步长大小。
进一步地,所述第一物理内存的大小为所述数据库容量的初始值。
实施例二
本实施例还提供了一种共享内存数据库的内存管理装置,包括:
创建模块,用于在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间;
第一分配模块,用于为所述数据库分配第一物理内存,将所述第一物理内存的开始地址设为所述虚拟内存空间的开始地址,并在所述第一物理内存中插入或修改数据;
第一判断模块,用于判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果;
第二分配模块,用于在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址;
扩容模块,用于扩大所述数据库可用的内存空间。
本实施例对于内存数据库的内存管理,采用共享内存方式,并且采用虚拟内存空间和物理内存分别管理,各进程在启动时,会映射整块虚拟内存空间,后续内存扩容时,将申请的多块物理内存补充到该虚拟内存空间中,并且使多块物理内存连成一个连续的物理内存,同时增大数据库内存容量,数据库的内存是连续的一个整体,此时数据库在存取数据时,不用跨段查找,扩容前后,性能不会降低;另外,在多进程连接到数据库时,其打开的共享内存空间是整个虚拟内存空间,在数据库内存扩容后,不用通知各个进程重新映射共享内存,提高了数据库在扩容期间多进程访问数据库访问效率以及减小扩容管理复杂性的,与分段式共享内存管理相比,在性能上,能有20~40%左右的提高。
进一步地,所述装置还包括:
第二判断模块,用于判断所述数据库的当前物理内存空间与预设扩容步长的大小之和是否小于所述虚拟内存空间的大小,得到第二判断结果;
所述第二分配模块,具体用于在所述第一判断结果和第二判断结果均为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中。
进一步地,所述装置还包括:
写数据模块,用于在所述第二物理内存中插入或修改数据。
进一步地,所述装置还包括:
设置模块,用于设置所述数据库容量的最大值、所述数据库容量的初始值和所述数据库的扩容步长大小。
进一步地,所述第一物理内存的大小为所述数据库容量的初始值。
实施例三
本实施例的共享内存数据库的内存管理方法,包括以下步骤:
步骤A:根据需要在启动数据库节点上设置数据库容量的初始值,单位为M;
步骤B:根据需要在启动数据库节点上设置数据库容量的最大值,单位为M;
步骤C:根据需要在启动数据库节点上设置数据库每次扩容步长的大小,单位为M;
步骤D:启动共享内存数据库,此时在创建数据库的空间中按照数据库容量最大值分配虚拟内存空间(注意:此时并没有占用数据库最大容量的物理内存,只是在进程空间中占用了这么多的虚拟内存空间,多余物理内存可以给别的进程使用);
步骤E:分配数据库容量初始值大小的物理内存,同时将这块物理内存对齐到虚拟内存空间的开始地址处,即将这块物理内存的开始地址设为虚拟内存空间的开始地址;
步骤F:其它应用进程来连接数据库时,需要打开这块共享内存,将共享内存映射到整个虚拟内存空间,即步骤D中申请的整个虚拟内存空间;
步骤G:此时共享内存数据库按照已经分配的物理内存大小来存放业务数据,即数据库将记录(即数据)插入这块物理内存中;
步骤H:随着记录的不断插入,当初分配的物理内存已经不够用,此时启用数据库扩容机制。
数据库扩容步骤如下:
步骤I,当插入或修改记录或者定时查看数据库空闲空间时,发现空闲内存已经无或少于一定阀值;
步骤J:申请步骤C中配置的数据库的扩容步长大小的物理内存补充到虚拟内存空间中,这块物理内存的开始地址是上一次物理内存对应虚拟内存空间的尾部地址,使扩容前的物理内存和扩容后的物理内存首尾相连,中间没有空隙,组成一块连续的物理内存,就像重新申请了一块大的连续物理内存一样;
步骤K:扩大数据库可用的内存空间大小,此时整个数据库经过了一次扩容;
步骤L:如果此时有记录插入或修改,将该记录插入新申请的物理内存中。
与现有技术相比较,本实施例对于数据库的内存管理,采用共享内存方式,并且采用虚拟内存空间和物理内存分别管理,各进程在启动时,会映射整块虚拟内存空间,后续内存扩容时,将申请的多块物理内存补充到该虚拟内存空间中,并且使多块物理内存连成一个连续的物理内存,同时增大数据库内存容量,因此数据库的内存永远为连续的一个整体,此时数据库在存取数据时,不用跨段查找,扩容前后,性能不会降低;由于多进程连接到指定数据库时,其打开的共享内存空间是整个虚拟内存空间,在内存扩容后,不用通知各个进程重新映射共享内存,提高了数据库在扩容期间多进程访问数据库访问效率以及减小扩容管理复杂性;这种连续共享内存管理方式与分段式共享内存管理相比,在性能上,前者比后者能有20~40%左右的提高。
实施例四
如图5所示,本实施例的共享内存数据库启动时共享内存创建以及共享内存映射方法包括以下步骤:
步骤1:根据业务需求,数据库服务进程100设置数据库容量初始值,比如为200M,并将该值放入到共享内存的数据库空间管理区域,即101流程;
如图5所示,本实施例的功能由数据库服务进程100、应用进程200协同实现。另外,下面的容量大小只是一个举例,可以用其它值。本实施例用如下一组数值来进行说明,即数据库容量初始值为200M,数据库容量最大值为1000M,数据容量扩容步长为10M。其中,本实施例支持包括Linux系统在内的多种操作系统,数据库的扩容步长可变,比如可以设置为1M、2M、3M等,数据库最大容量可根据实际需要设置,比如根据需要已经单板的内存最大容量等决定。
步骤2:数据库服务进程100设置数据库容量最大值,比如1000M,并将该值放入到共享内存的数据库空间管理区域,即102流程;
步骤3:数据库服务进程100设置数据库容量扩容步长,比如每次扩容为10M,并将该值放入到共享内存的数据库空间管理区域,即103流程;
步骤4:数据库服务进程100启动数据库,在此过程中申请虚拟内存空间,大小为步骤2中设置的数据库容量最大值,比如这里为1000M,假如此时虚拟内存空间的开始地址为ADDR1,则终止地址为ADDR1+1000M,即104流程,申请完后,参见图7。此时数据库还不能对外提供服务,因为还没有申请物理内存,只是申请了虚拟内存空间。
步骤5:以步骤4中ADDR1为开始地址,申请数据库容量初始值大小的物理内存,即105流程。申请完后,这块物理内存就映射到虚拟内存开始处,此时虚拟内存空间与物理内存对应关系参见图8。此时[ADDR1,ADDR1+200M]这段虚拟内存空间是可以用于业务存储数据,此时,实际可用的数据库容量就为200M,同时,在共享内存的数据库空间管理区域,将修改当前数据库可用空间大小为200M;
步骤6:数据库启动完成,即106流程;
步骤7:应用进程200初始化,即201流程;
步骤8:应用进程200连接此共享内存数据库,即打开共享内存,即202流程;
步骤9:应用进程200将整个虚拟内存空间全部映射到本进程内,即流程203。此时该应用进程就可以访问该数据库,即可在数据库中进行记录增、删、改、查,当然此时只能使用分配了物理内存的那块地址,本实施例中为[ADDR1,ADDR1+200M]这200M空间。
如图6所示,本实施例的共享内存数据库扩容方法包括以下步骤,其中,本实施例的扩容功能由数据库应用进程300(可以是图5中的数据库服务进程100,也可以是图5中的应用进程200)实现。注意下面的数值只是举例,可以是其它数值。
步骤1:业务插入记录,数据库在其空间内申请内存,此时可用的内存地址空间为图8所示的上半部分,即地址从[ADDR1,ADDR1+200M]范围申请,即301流程
步骤2:判断[ADDR1,ADDR1+200M]这段内存是否还有可用内存,判断标准为剩余内存是否能容纳下此记录或剩余内存小于一定的阀值,即流程302;剩余内存不足,转步骤3,否则转步骤6;
步骤3:启动数据库扩容流程,即303流程;
步骤4:以ADDR1+200M为开始地址,申请数据库容量扩容步长大小的物理内存,假如为10M,即304流程,此时虚拟内存空间与物理内存对应关系参见图9;
步骤5:管理数据库的容量信息,该信息也存储于共享内存中,此时数据库的空间变为[ADDR1,ADDR1+210M],空闲内存变为[ADDR1+200M,ADDR1+210M],如图9,即305流程,因为数据库容量信息也在共享内存中,因此,扩容后,各个进程都能看得到容量变化;
步骤6:申请内存完成,插入记录,即306流程;后续扩容时,不断申请内存,对齐到虚拟内存空间中,比如第二次扩容完成后参见图10,图11为虚拟内存空间完全用完时,扩容截止。
本实施例对于内存数据库的内存管理,采用共享内存方式,并且采用虚拟内存空间和物理内存分别管理,各进程在启动时,会映射整块虚拟内存空间,后续内存扩容时,将申请的多块物理内存补充到该虚拟内存空间中,并且使多块物理内存连成一个连续的物理内存,同时增大数据库内存容量,数据库的内存是连续的一个整体,此时数据库在存取数据时,不用跨段查找,扩容前后,性能不会降低;另外,在多进程连接到数据库时,其打开的共享内存空间是整个虚拟内存空间,在数据库内存扩容后,不用通知各个进程重新映射共享内存,提高了数据库在扩容期间多进程访问数据库访问效率以及减小扩容管理复杂性的,与分段式共享内存管理相比,在性能上,能有20~40%左右的提高。
此说明书中所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方式的独立性。
本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地位于一起,而是可以包括存储在不同物理上的不同的指令,当这些指令逻辑上结合在一起时,其构成模块并且实现该模块的规定目的。
实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上(包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。
在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
在本发明各方法实施例中,所述各步骤的序号并不能用于限定各步骤的先后顺序,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,对各步骤的先后变化也在本发明的保护范围之内。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种共享内存数据库的内存管理方法,其特征在于,包括:
在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间;
为所述数据库分配第一物理内存,将所述第一物理内存的开始地址设为所述虚拟内存空间的开始地址,并在所述第一物理内存中插入或修改数据;
判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果;
在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址;
扩大所述数据库可用的内存空间,并转向所述判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果的步骤。
2.根据权利要求1所述的共享内存数据库的内存管理方法,其特征在于,所述判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果的步骤之后还包括:
判断所述数据库的当前物理内存空间与预设扩容步长的大小之和是否小于所述虚拟内存空间的大小,得到第二判断结果;
所述在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址的步骤,具体为在所述第一判断结果和第二判断结果均为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中。
3.根据权利要求1所述的共享内存数据库的内存管理方法,其特征在于,所述扩大所述数据库可用的内存空间的步骤之后还包括:
在所述第二物理内存中插入或修改数据。
4.根据权利要求1所述的共享内存数据库的内存管理方法,其特征在于,所述在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间的步骤之前还包括:
设置所述数据库容量的最大值、所述数据库容量的初始值和所述数据库的扩容步长大小。
5.根据权利要求4所述的共享内存数据库的内存管理方法,其特征在于,所述第一物理内存的大小为所述数据库容量的初始值。
6.一种共享内存数据库的内存管理装置,其特征在于,包括:
创建模块,用于在创建数据库的空间中按照预设的数据库容量的最大值为所述数据库分配虚拟内存空间;
第一分配模块,用于为所述数据库分配第一物理内存,将所述第一物理内存的开始地址设为所述虚拟内存空间的开始地址,并在所述第一物理内存中插入或修改数据;
第一判断模块,用于判断所述数据库的空闲内存是否小于预设阈值,得到第一判断结果;
第二分配模块,用于在所述第一判断结果为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中,并将所述第二物理内存的开始地址设为上一物理内存的尾部地址;
扩容模块,用于扩大所述数据库可用的内存空间。
7.根据权利要求6所述的共享内存数据库的内存管理装置,其特征在于,还包括:
第二判断模块,用于判断所述数据库的当前物理内存空间与预设扩容步长的大小之和是否小于所述虚拟内存空间的大小,得到第二判断结果;
所述第二分配模块,具体用于在所述第一判断结果和第二判断结果均为是时,将预设扩容步长大小的第二物理内存加入到所述数据库的虚拟内存空间中。
8.根据权利要求6所述的共享内存数据库的内存管理装置,其特征在于,还包括:
写数据模块,用于在所述第二物理内存中插入或修改数据。
9.根据权利要求6所述的共享内存数据库的内存管理装置,其特征在于,还包括:
设置模块,用于设置所述数据库容量的最大值、所述数据库容量的初始值和所述数据库的扩容步长大小。
10.根据权利要求9所述的共享内存数据库的内存管理装置,其特征在于,所述第一物理内存的大小为所述数据库容量的初始值。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510622060.1A CN106557427B (zh) | 2015-09-25 | 2015-09-25 | 共享内存数据库的内存管理方法及装置 |
PCT/CN2016/095355 WO2017050064A1 (zh) | 2015-09-25 | 2016-08-15 | 共享内存数据库的内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510622060.1A CN106557427B (zh) | 2015-09-25 | 2015-09-25 | 共享内存数据库的内存管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106557427A CN106557427A (zh) | 2017-04-05 |
CN106557427B true CN106557427B (zh) | 2021-11-12 |
Family
ID=58385844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510622060.1A Active CN106557427B (zh) | 2015-09-25 | 2015-09-25 | 共享内存数据库的内存管理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106557427B (zh) |
WO (1) | WO2017050064A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107608796B (zh) * | 2017-09-29 | 2020-08-04 | 武汉斗鱼网络科技有限公司 | 存储资源管控方法、存储资源管控装置及处理器 |
CN110019125B (zh) * | 2017-11-27 | 2021-12-14 | 北京京东尚科信息技术有限公司 | 数据库管理的方法和装置 |
CN108255624A (zh) * | 2018-02-02 | 2018-07-06 | 中国银行股份有限公司 | 一种数据的处理方法及处理装置 |
CN109032817B (zh) * | 2018-07-25 | 2022-03-18 | 天津凯发电气股份有限公司 | 一种电能质量管理系统共享内存实现方法 |
CN109062693A (zh) * | 2018-07-26 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种内存管理方法及相关设备 |
CN109522113B (zh) * | 2018-09-28 | 2020-12-18 | 迈普通信技术股份有限公司 | 一种内存管理方法及装置 |
CN113032162B (zh) * | 2021-03-23 | 2023-10-24 | 重庆兰德适普信息科技有限公司 | 一种基于共享内存备份机制的多进程通讯方法 |
CN116708579B (zh) * | 2023-08-04 | 2024-01-12 | 浪潮电子信息产业股份有限公司 | 数据访问方法、装置、电子设备及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101158924A (zh) * | 2007-11-27 | 2008-04-09 | 北京大学 | 一种虚拟机管理器的动态内存映射方法 |
CN103077120A (zh) * | 2012-12-31 | 2013-05-01 | 东软集团股份有限公司 | 程序共享内存的地址转换方法和装置 |
CN104090804A (zh) * | 2014-07-15 | 2014-10-08 | 四川航天系统工程研究所 | 一种实时dsp嵌入式系统虚拟内存扩容方法 |
CN104123233A (zh) * | 2013-04-26 | 2014-10-29 | 华茂云天科技(北京)有限公司 | 一种虚拟机大容量内存共享方法 |
CN104199740A (zh) * | 2014-08-28 | 2014-12-10 | 浪潮(北京)电子信息产业有限公司 | 共享系统地址空间的非紧耦合多节点多处理器系统和方法 |
CN104881330A (zh) * | 2015-05-22 | 2015-09-02 | 大唐移动通信设备有限公司 | 一种多进程共享数据的方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1269047C (zh) * | 2003-07-31 | 2006-08-09 | 中兴通讯股份有限公司 | 一种具有内存保护功能的内存管理方法 |
US7206890B2 (en) * | 2004-05-19 | 2007-04-17 | Sun Microsystems, Inc. | System and method for reducing accounting overhead during memory allocation |
US8271989B2 (en) * | 2008-02-07 | 2012-09-18 | International Business Machines Corporation | Method and apparatus for virtual processor dispatching to a partition based on shared memory pages |
US9292437B2 (en) * | 2008-07-01 | 2016-03-22 | International Business Machines Corporation | Optimizing virtual memory allocation in a virtual machine based upon a previous usage of the virtual memory blocks |
US8627036B2 (en) * | 2011-09-12 | 2014-01-07 | Microsoft Corporation | Memory management techniques |
-
2015
- 2015-09-25 CN CN201510622060.1A patent/CN106557427B/zh active Active
-
2016
- 2016-08-15 WO PCT/CN2016/095355 patent/WO2017050064A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101158924A (zh) * | 2007-11-27 | 2008-04-09 | 北京大学 | 一种虚拟机管理器的动态内存映射方法 |
CN103077120A (zh) * | 2012-12-31 | 2013-05-01 | 东软集团股份有限公司 | 程序共享内存的地址转换方法和装置 |
CN104123233A (zh) * | 2013-04-26 | 2014-10-29 | 华茂云天科技(北京)有限公司 | 一种虚拟机大容量内存共享方法 |
CN104090804A (zh) * | 2014-07-15 | 2014-10-08 | 四川航天系统工程研究所 | 一种实时dsp嵌入式系统虚拟内存扩容方法 |
CN104199740A (zh) * | 2014-08-28 | 2014-12-10 | 浪潮(北京)电子信息产业有限公司 | 共享系统地址空间的非紧耦合多节点多处理器系统和方法 |
CN104881330A (zh) * | 2015-05-22 | 2015-09-02 | 大唐移动通信设备有限公司 | 一种多进程共享数据的方法和装置 |
Non-Patent Citations (3)
Title |
---|
Memcached和Redis在高速缓存方面的应用;王心妍;《无线互联科技》;20120930;第8-9页 * |
Memory Expansion Technology (MXT): Software support and performance;B. Abali etc.;《IBM Journal of Research and Development》;20010331;第45卷(第2期);第287-301页 * |
一种按需分配增量卷的自动扩容方法研究;高岩等;《计算机研究与发展》;20110228;第119-125页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106557427A (zh) | 2017-04-05 |
WO2017050064A1 (zh) | 2017-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106557427B (zh) | 共享内存数据库的内存管理方法及装置 | |
US6470436B1 (en) | Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory | |
US8453015B2 (en) | Memory allocation for crash dump | |
US6175900B1 (en) | Hierarchical bitmap-based memory manager | |
US8909853B2 (en) | Methods and apparatus to share a thread to reclaim memory space in a non-volatile memory file system | |
CN109669640B (zh) | 一种数据存储方法、装置、电子设备及介质 | |
WO2017107414A1 (zh) | 文件操作方法和装置 | |
US20120303927A1 (en) | Memory allocation using power-of-two block sizes | |
US10824555B2 (en) | Method and system for flash-aware heap memory management wherein responsive to a page fault, mapping a physical page (of a logical segment) that was previously reserved in response to another page fault for another page in the first logical segment | |
CN112612623B (zh) | 一种共享内存管理的方法和设备 | |
WO2022120522A1 (zh) | 内存空间的分配方法、装置及存储介质 | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN115729849B (zh) | 内存管理方法及计算设备 | |
US20220253252A1 (en) | Data processing method and apparatus | |
US20060277221A1 (en) | Transactional file system with client partitioning | |
CN113434470A (zh) | 数据分布方法、装置及电子设备 | |
CN116431530B (zh) | 一种cxl内存模组、内存的处理方法及计算机系统 | |
WO2023124423A1 (zh) | 一种存储空间分配方法、装置、终端设备及存储介质 | |
CN112948336B (zh) | 数据加速方法及缓存单元、电子设备及存储介质 | |
US11474938B2 (en) | Data storage system with multiple-size object allocator for disk cache | |
CN113778688A (zh) | 内存管理系统、内存管理方法、内存管理装置 | |
CN113535392A (zh) | 基于cma实现支持大内存连续分配的内存管理方法及系统 | |
US11016685B2 (en) | Method and defragmentation module for defragmenting resources | |
US20130110882A1 (en) | System and method for persisting object pointers | |
CN111367836B (zh) | 一种针对数据库的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |