CN108121813A - 数据管理方法、装置、***、存储介质及电子设备 - Google Patents

数据管理方法、装置、***、存储介质及电子设备 Download PDF

Info

Publication number
CN108121813A
CN108121813A CN201711449172.7A CN201711449172A CN108121813A CN 108121813 A CN108121813 A CN 108121813A CN 201711449172 A CN201711449172 A CN 201711449172A CN 108121813 A CN108121813 A CN 108121813A
Authority
CN
China
Prior art keywords
free memory
free
dynamic block
space
dynamic
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.)
Granted
Application number
CN201711449172.7A
Other languages
English (en)
Other versions
CN108121813B (zh
Inventor
柳扬
陈小刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Neusoft Corp
Original Assignee
Neusoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Neusoft Corp filed Critical Neusoft Corp
Priority to CN201711449172.7A priority Critical patent/CN108121813B/zh
Publication of CN108121813A publication Critical patent/CN108121813A/zh
Application granted granted Critical
Publication of CN108121813B publication Critical patent/CN108121813B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开涉及一种数据管理方法、装置、存储介质及电子设备,该方法可以包括:数据库的存储引擎预先将数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,映射空间区由动态块组成,部分或所有动态块的空闲内存片段以链表元素的方式存在于两个或两个以上的链表中,不同链表用于存放内存大小范围不同的空闲内存片段,链表由数组形成索引,存储引擎响应于接收到分配空闲内存的分配请求,根据数组形成的索引,在两个或两个以上的链表中查找空闲内存片段大小足够分配请求的链表元素;将查找出的链表元素对应的空闲内存片段分配给分配请求,以及将链表元素从其所在链表删除,可见,本公开提供的数据管理方法可以快速而不易失的处理大量小数据。

Description

数据管理方法、装置、***、存储介质及电子设备
技术领域
本公开涉及计算机领域,具体地,涉及一种数据管理方法、装置、存储介质及电子设备。
背景技术
现有技术中,为了数据库不丢失数据,通常采用机械硬盘或固态硬盘这种硬件存储器的文件***来存储数据库的数据库文件。由于这种硬件存储器的文件***层次结构复杂,数据库只对数据的组织方式进行管理,例如,建立数据表的关系、表内行、列的关系等,而数据在这种硬件存储器的文件***中的存储机制如存储空间的分配等都是由操作***内部完成。限制于这种硬件存储器层次结构复杂的文件***,操作***内配套的数据管理方式的存储机制只擅长处理大块连续数据。
然而,在某些***中,例如汽车电子电气***,存在着大量随机小数据,这些数据多是数个字节大小的字节级小数据,并且对这些数据的访问是非连续和无序的。而现有技术的数据管理方式的存储机制只擅长处理大块连续数据,对于字节级数据、随机数据速度显著变慢,导致无法对大量随机小数据进行快速处理。
发明内容
本公开的目的是提供一种数据管理方法、装置、存储介质及电子设备,以实现对大量随机小数据进行快速处理的目的。
在本公开实施例的第一个方面,提供了一种数据管理方法。方法应用于数据库的存储引擎,该方法包括:预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,其中,所述数据库文件位于非易失随机访问存储器的文件***中,所述映射空间区由若干动态块组成,每个动态块包含一个或多个页,所述页为可分配的最小单元,部分或所有动态块的空闲内存片段作为链表元素存在于两个或两个以上的链表中,一个空闲内存片段对应一个链表元素,不同链表用于存放内存大小在不同范围区间的空闲内存片段,所述不同链表由数组的若干数组元素形成索引;响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素;将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
可选地,该方法还包括:响应于存在需要释放的空闲内存片段,根据所述数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表。
可选地,该方法还包括:如果在所述两个或两个以上的链表中查找不到空闲内存片段大小足够所述分配请求的链表元素,则在所述映射空间尚未加入链表的动态块中,查找出含有的页足够所述分配请求的动态块,根据所述分配请求要求分配的空闲空间,将查找出的动态块相应大小的若干页分配给所述分配请求;如果查找出的动态块在分配后仍有剩余空闲页,将所述剩余空闲页作为要释放的空闲内存片段,进入所述根据数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表的步骤。
可选地,所述映射空间区的所有动态块顺序连接。所述根据数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表包括:判断要释放的空闲内存片段大小是否为页的整数倍;如果不是整数倍,将所述要释放的空闲内存片段所在的动态块拆分为空闲内存片段占一页的部分空间的第一动态块、及空闲内存片段占页的整数倍的第二动态块,其中,所述第二动态块位于所述第一动态块之后,所述第二动态块与被拆分的动态块的下一动态块连接;根据所述数组形成的索引,将所述第一动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第一动态块的空闲内存片段大小相应的链表中;如果是整数倍,将所述要释放的空闲内存片段视为第二动态块;判断所述第二动态块的空闲内存段与其连接的后继动态块是否形成连续空闲空间;如果未形成连续空闲空间,则根据所述数组形成的索引,将所述第二动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第二动态块的空闲内存片段大小相应的链表中;如果形成连续空闲空间,则将所述第二动态块与其形成连续空闲空间的后继动态块合并为一个第三动态块;判断所述第三动态块是否可拆分为符合不同链表内存范围的多个动态块;如果可拆分,将所述第三动态块拆分为符合不同链表内存范围的多个动态块,根据所述数组形成的索引,将拆分出的各个动态块的空闲内存片段分别作为链表元素***内存大小范围区间与各个动态块的空闲内存片段大小相应的链表中;如果不可拆分,根据所述数组形成的索引,将所述第三动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第三动态块的空闲内存片段大小相应的链表中。
可选地,所述数组的一个数组元素指向一个链表,所述数组的第N个数组元素指向第N个链表,所述第N个链表的每个链表元素用于存放内存大小在大于等于2N且小于2(N+1)的空闲内存片段。
可选地,所述数据库进程虚拟地址空间中,位于所述映射空间区之前的、预留的头部空间用于存放描述了所述映射空间区存储结构及分配情况的数据存储元数据,所述头部空间为固定大小。所述数据库进程虚拟地址空间的尾部空间用于存放日志,所述日志描述了存储引擎操作相关的数据上下文信息,所述日志随着所述存储引擎的操作进行相应更新,所述尾部空间随着所述日志的增加而相应增大。
可选地,该方法还包括:当所述数据库所在***重启时,根据所述数据库进程虚拟地址空间的头部空间存放的数据存储元数据恢复空间分配及根据所述尾部空间存放的日志包含的数据上下文信息进行数据重建。
在本公开实施例的第二个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面任一实施例所述方法的步骤。
在本公开实施例的第三个方面,提供了一种电子设备,包括:如上述第二个方面所述的计算机可读存储介质;以及,一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。
在本公开实施例的第四个方面,提供了一种数据管理***,所述数据管理***用于嵌入在汽车中,所述数据管理***包括:如本公开第三方面所述的电子设备及非易失随机访问存储器;其中,所述非易失随机访问存储器的文件***中保存了数据库文件,所述数据库文件为如本公开第三方面所述的电子设备之上运行的数据库的数据库文件;所述数据库用于管理来自于所述汽车的电子电气***的数据。
在本公开实施例的第五个方面,提供了一种数据管理装置,该装置配置于数据库的存储引擎,该装置包括:预置模块,被配置为预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,其中,所述数据库文件位于非易失随机访问存储器的文件***中,所述映射空间区由若干动态块组成,每个动态块包含一个或多个页,所述页为可分配的最小单元,部分或所有动态块的空闲内存片段作为链表元素存在于两个或两个以上的链表中,一个空闲内存片段对应一个链表元素,不同链表用于存放内存大小在不同范围区间的空闲内存片段,所述不同链表由数组的若干数组元素形成索引。分配空间查找模块,被配置为响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素。分配执行模块,被配置为将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
可选地,该装置还包括:回收模块,被配置为响应于存在需要释放的空闲内存片段,根据所述数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表。
可选地,该装置还包括:新块分配模块,被配置为如果在所述两个或两个以上的链表中查找不到空闲内存片段大小足够所述分配请求的链表元素,则在所述映射空间尚未加入链表的动态块中,查找出含有的页足够所述分配请求的动态块,根据所述分配请求要求分配的空闲空间,将查找出的动态块相应大小的若干页分配给所述分配请求。余页回收模块,被配置为如果查找出的动态块在分配后仍有剩余空闲页,将所述剩余空闲页作为要释放的空闲内存片段,触发所述回收模块进入所述根据数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表的步骤。
可选地,所述映射空间区的所有动态块顺序连接。所述回收模块包括:判断整倍子模块,被配置为判断要释放的空闲内存片段大小是否为页的整数倍。块分解子模块,被配置为如果所述判断整倍子模块判定不是整数倍,将所述要释放的空闲内存片段所在的动态块拆分为空闲内存片段占一页的部分空间的第一动态块、及空闲内存片段占页的整数倍的第二动态块,其中,所述第二动态块位于所述第一动态块之后,所述第二动态块与被拆分的动态块的下一动态块连接。第一回收子模块,被配置为根据所述数组形成的索引,将所述第一动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第一动态块的空闲内存片段大小相应的链表中。第二块处理子模块,被配置为如果所述判断整倍子模块判定是整数倍,将所述要释放的空闲内存片段视为第二动态块。连续空间判断子模块,被配置为判断所述第二动态块的空闲内存段与其连接的后继动态块是否形成连续空闲空间。第二回收子模块,被配置为如果所述连续空间判断子模块判定未形成连续空闲空间,则根据所述数组形成的索引,将所述第二动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第二动态块的空闲内存片段大小相应的链表中。合并子模块,被配置为如果所述连续空间判断子模块判定形成连续空闲空间,则将所述第二动态块与其形成连续空闲空间的后继动态块合并为一个第三动态块。拆分判断子模块,被配置为判断所述第三动态块是否可拆分为符合不同链表内存范围的多个动态块。第三回收子模块,被配置为如果所述拆分判断子模块判定可拆分,将所述第三动态块拆分为符合不同链表内存范围的多个动态块,根据所述数组形成的索引,将拆分出的各个动态块的空闲内存片段分别作为链表元素***内存大小范围区间与各个动态块的空闲内存片段大小相应的链表中。第四回收子模块,被配置为如果所述拆分判断子模块判定不可拆分,根据所述数组形成的索引,将所述第三动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第三动态块的空闲内存片段大小相应的链表中。
可选地,所述数组的一个数组元素指向一个链表,所述数组的第N个数组元素指向第N个链表,所述第N个链表的每个链表元素用于存放内存大小在大于等于2N且小于2(N+1)的空闲内存片段。
可选地,所述数据库进程虚拟地址空间中,位于所述映射空间区之前的、预留的头部空间用于存放描述了所述映射空间区存储结构及分配情况的数据存储元数据,所述头部空间为固定大小。所述数据库进程虚拟地址空间的尾部空间用于存放日志,所述日志描述了存储引擎操作相关的数据上下文信息,所述日志随着所述存储引擎的操作进行相应更新,所述尾部空间随着所述日志的增加而相应增大。该装置还包括:数据库恢复模块,被配置为当所述数据库所在***重启时,根据所述数据库进程虚拟地址空间的头部空间存放的数据存储元数据恢复空间分配及根据所述尾部空间存放的日志包含的数据上下文信息进行数据重建。
通过上述技术方案,由于本公开数据库的数据库文件位于非易失随机访问存储器的文件***中,该文件***能够实现对大量小数据的快速访问,且为该文件***设计的、本公开所提出的数据库的存储引擎将数据库文件映射到数据库进程虚拟地址空间的映射空间区,使得存储引擎访问虚拟地址空间实质访问的是非易失随机访问存储器的文件***,这一过程不增加额外的数据拷贝而直接完成。而映射空间区由动态块组成,部分或所有动态块的空闲内存片段以链表元素的方式存在于两个或两个以上的链表中,不同链表用于存放内存大小范围不同的空闲内存片段,不同链表由数组形成索引。因此,空闲空间基于内存大小范围不同的链表及其中的链表元素来划分,并由数组形成索引,便于存储引擎快速查找。从而,存储引擎响应于接收到分配空闲内存空间的分配请求,可以根据所述数组形成的索引,快速在链表中查找空闲内存片段大小足够该分配请求的链表元素进行空闲内存片段的分配,可见,本公开提供的数据管理方法可以快速而不易失的处理大量小数据。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据本公开一示例性实施例示出的车载嵌入式环境示意图。
图2是根据本公开一示例性实施例示出的一种数据管理方法的流程图。
图3是根据本公开一示例性实施例示出的数据进程虚拟地址空间示意图。
图4是根据本公开一示例性实施例示出的数组与链表示意图。
图5是根据本公开另一示例性实施例示出的一种数据管理方法的流程图。
图6是根据本公开又一示例性实施例示出的一种数据管理方法的流程图。
图7是根据本公开再一示例性实施例示出的一种数据管理方法的流程图。
图8是根据本公开一示例性实施例示出的动态块拆分合并示意图。
图9是根据本公开一示例性实施例示出的一种电子设备的框图。
图10是根据本公开一示例性实施例示出的一种数据管理***的框图。
图11是根据本公开一示例性实施例示出的一种数据管理装置的框图。
图12是根据本公开另一示例性实施例示出的一种数据管理装置的框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
在介绍本公开提供的数据管理方法、装置、***、存储介质及电子设备之前,首先对该数据管理方法可能的应用场景进行简单介绍。如图1所示的车载嵌入式环境示意图。车载应用程序110对数据库120进行访问。数据库120可以包括但不限于基于键值对的各种数据库。数据库120中的数据管理引擎1201用于对数据的组织方式进行管理,例如,建立数据表的关系、表内行、列的关系等。数据管理引擎1201根据车载应用程序110发出的访问向数据库120中的存储引擎1202发出相应请求,如分配空闲内存的分配请求、释放空闲内存的释放请求、等等。存储引擎1202作为数据库管理***的下部结构,处理数据的存储机制等方面问题。数据库120的数据库文件保存在非易失随机访问存储器150的文件***140中。在本公开中,存储引擎1202预先将数据库120的数据库文件映射到数据库进程虚拟地址空间130的映射空间区。
为了使本公开提供的技术方案更加易于理解,下面再对本公开提到的非易失随机访问存储器及其文件***进行说明。非易失随机访问存储器,也即非易失内存(NVRAM,Non-Volatile Random Access Memory),指断电后仍能保持数据的一种RAM。非易失随机访问存储器可以包括相变存储器或具有非易失随机访问存储器特点的其他存储器,例如铁电存储器等。非易失随机访问存储器的文件***,例如,可以在用户请求打开、关闭和读/写被访问文件时,由文件***的管理进程对所述被访问文件的打开、关闭和读/写操作,查询文件***与非易失随机访问存储器之间的映射表,并判断被访问文件数据的逻辑地址与其所在的物理地址间是否存在映射关系,根据被访问文件数据的逻辑地址寻址到被访问文件数据的物理地址。该文件***能够充分发挥非易失随机访问存储器的优势,提高读写访问速度,实现进程对文件数据的快速访问。
在本公开中,数据库文件保存于非易失随机访问存储器的文件***,数据库文件中的数据实质上是保存于非易失随机访问存储器。存储引擎预先将数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,使得存储引擎访问虚拟地址空间实质是经过非易失随机访问存储器的文件***访问非易失随机访问存储器,因此,本公开所设计的存储引擎对数据库进程虚拟地址空间进行访问实质是对非易失随机访问存储器的快速访问。
图2是根据一示例性实施例示出的一种数据管理方法的流程图。该方法应用于数据库的存储引擎。如图2所示,该数据管理方法可以包括:
在步骤210中,存储引擎预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区。
例如,存储引擎可以采用Linux操作***mmap***调用方式将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区。可以理解的是,该步骤210在数据库建立之初执行即可,在数据库完成映射之后,无需再进行重复映射。
其中,所述数据库文件位于非易失随机访问存储器的文件***中。所述映射空间区由若干动态块组成。每个动态块包含一个或多个页。所述页为可分配的最小单元。部分或所有动态块的空闲内存片段作为链表元素存在于两个或两个以上的链表中,一个空闲内存片段对应一个链表元素,不同链表用于存放内存大小在不同范围区间的空闲内存片段。所述不同链表由数组的若干数组元素形成索引。
例如,如图3所示的数据进程虚拟地址空间示意图,映射空间区302是动态分配数据区,由一系列连续排列的页面构成,该区域以页面为最小管理单位进行管理,例如页面可以为4KB大小或其他尺寸。如图3所示,动态块310可以包括已分配内存片段3101、空闲内存片段3102。为了便于记录分配信息,可以在每个动态块的块首部存放块首部元数据,该块首部元数据可以包括已分配多少空间,空闲多少空间等信息。可以在空闲内存片段的首部存放空闲空间元数据,记录空闲空间的大小,及在链表中的位置。可见,在映射空间区,页面和动态块共同构成二级索引分配机制。
一可能的实施方式中,所述数据库进程虚拟地址空间中,位于所述映射空间区之前的、预留的头部空间可以用于存放描述了所述映射空间区存储结构及分配情况的数据存储元数据,所述头部空间为固定大小。例如,如图3所示的数据库进程虚拟地址空间中预留出固定大小的头部空间301。头部空间为固定大小,也即映射空间区302总是起始于进程虚拟地址空间的固定偏移量。存储结构例如包括映射空间区包括多少页,哪些页属于哪些动态块等。分配情况可以包括哪些页已分配,哪些页未分配等。所述数据库进程虚拟地址空间的尾部空间可以用于存放日志,所述日志描述了与存储引擎操作相关的数据上下文信息,所述日志随着所述存储引擎的操作进行相应更新,所述尾部空间随着所述日志的增加而相应增大。例如,如图3所示的数据库进程虚拟地址空间中尾部空间303存放了日志。当所述数据库所在***重启时,根据所述数据库进程虚拟地址空间的头部空间存放的数据存储元数据恢复空闲内存空间分配及根据所述尾部空间存放的日志包含的数据上下文信息进行数据重建。在该实施方式中,由于头部空间为固定大小,用于保存日志的尾部空间动态地随着日志的增加而相应增大,从而***重新启动后,数据不丢失,存储引擎可以从头尾固定位置读取出数据存储元数据及日志,重建数据及恢复空闲内存空间分配。例如,对于键值数据库来说,可以根据日志遍历并重建所有键值数据。
在步骤220中,存储引擎响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素。
例如,所述数组的一个数组元素可以指向一个链表,所述数组的第N个数组元素指向第N个链表,所述第N个链表的每个链表元素用于存放内存大小在大于等于2N且小于2(N+1)的空闲内存片段。在该实施方式中,每个数组指向链表元素为固定大小的空闲空间链表,每个链表元素位于某个动态块的空闲空间部位。数组是一个对空闲内存片段的索引列表。编号为N的链表存放可用内存大小大于等于2N且小于2(N+1)的内存片段。例如,参见图4所示数组与链表示意图,对于26个数组元素的数组,第26个链表的一个链表元素最大可分配的连续空闲内存片段为64MB(226)。某些数组元素指向的链表可以为空。
例如,对于请求分配1个字节的空闲内存的分配请求来说,可以根据数组形成的索引,在第0号数组所指向的链表中取出一个链表元素对应的空闲内存片段分配给该分配请求。例如,每次取链表元素可以从链表头项开始取,确定将链表头项对应的空闲内存片段分配给分配请求后,可以将链表头项删除。当然,也可以从链表中间或尾部来取链表元素,在这种情况下,对取出的链表元素之前的链表元素进行顺序下移即可。可以理解的是,从链表头项开始取,对链表操作较少,相对简单,速度较快。
在步骤230中,存储引擎将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
可以理解的是,对于数据管理引擎发出的分配请求,将空闲内存片段分配给所述分配请求也即将空闲内存片段分配给数据管理引擎。
为了便于记录分配信息,可以相应更新块首部元数据来记录该数据块使用情况。
通过上述技术方案,由于数据库的数据库文件位于非易失随机访问存储器的文件***中,该文件***能够实现对大量小数据的快速访问,且为该文件***设计的存储引擎将数据库文件映射到数据库进程虚拟地址空间的映射空间区,使得存储引擎访问虚拟地址空间实质访问的是非易失随机访问存储器的文件***,这一过程不增加额外的数据拷贝而直接完成。而映射空间区由动态块组成,部分或所有动态块的空闲内存片段以链表元素的方式存在于两个或两个以上的链表中,不同链表用于存放内存大小范围不同的空闲内存片段,不同链表由数组形成索引。因此,空闲空间基于内存大小范围不同的链表及其中的链表元素来划分,并由数组形成索引,便于存储引擎快速查找。从而,存储引擎响应于接收到分配空闲内存空间的分配请求,可以根据所述数组形成的索引,快速在链表中查找空闲内存片段大小足够该分配请求的链表元素进行空闲内存片段的分配,因此,本公开提供的数据管理方法可以快速而不易失的处理大量小数据。
与分配空闲内存相应地,本公开提供的方法设计的存储引擎也可以对释放内存进行回收。例如,一种可能的实施方式,本公开的存储引擎可以将数据管理引擎释放的空闲内存片段保留在映射空间区作为尚未加入链表的空闲内存片段。不过这样可能会导致链表很快被取空,需频繁到映射空间区去申请新的动态块来加入链表。
为了解决这一问题,本公开提供另一种可能的实施方式。图5是根据该实施方式示出的一种数据管理方法的流程图。该方法应用于数据库的存储引擎。如图5所示,该数据管理方法可以包括:
在步骤510中,存储引擎预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区。
数据库进程虚拟地址空间的存储结构详细可以参见图2所示实施例的说明,在此不再详细赘述。
在步骤520中,响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素。
在步骤530中,将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
在步骤540中,响应于存在需要释放的空闲内存片段,根据所述数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表。
例如,每当有内存块被释放回数据库动态分配数据区时,可以根据这个内存块的大小被放在对应的链表中,并放在链表首部。
在该实施方式中,释放的空闲内存片段直接加入链表,从而使得空闲内存片段的数量在链表中保持动态良性的维护,不必频繁到映射空间区去申请新的动态块,提高分配效率。
考虑到有可能在链表中找不到空闲内存片段大小足够分配请求的链表元素进行分配,需重新申请动态块,而新申请的动态块还可能存在剩余空闲内存片段需回收,本公开提供又一种可能的实施方式。图6是根据该实施方式示出的一种数据管理方法的流程图。该方法应用于数据库的存储引擎。如图6所示,该数据管理方法可以包括:
在步骤610中,存储引擎预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区。
在步骤620中,响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素。
在步骤630中,将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
在步骤631中,如果在所述两个或两个以上的链表中查找不到空闲内存片段大小足够所述分配请求的链表元素,则在所述映射空间尚未加入链表的动态块中,查找出含有的页足够所述分配请求的动态块,根据所述分配请求要求分配的空闲空间,将查找出的动态块相应大小的若干页分配给所述分配请求。
在步骤632中,如果查找出的动态块在分配后仍有剩余空闲页,将所述剩余空闲页作为要释放的空闲内存片段。
在步骤640中,响应于存在需要释放的空闲内存片段,根据所述数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表。
在该实施方式中,将新申请的动态块分配后还剩余的空闲内存片段回收到链表,从而使得空闲内存片段的数量在链表中保持动态良性的维护,不必频繁到映射空间区去申请新的动态块,提高分配效率。
为了能够将释放的空闲内存片段更加合理地加入长度相应的链表,完善存储机制,提高分配效率。本公开提供再一种可能的实施方式对回收的数据进行分块和合并。具体地,参见图7,图7是根据该实施方式示出的一种数据管理方法的流程图。该方法应用于数据库的存储引擎。如图7所示,该数据管理方法可以包括:
在步骤710中,存储引擎预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区。
在步骤720中,响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素。
在步骤730中,将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
在步骤721中,如果在所述两个或两个以上的链表中查找不到空闲内存片段大小足够所述分配请求的链表元素,则在所述映射空间尚未加入链表的动态块中,查找出含有的页足够所述分配请求的动态块,根据所述分配请求要求分配的空闲空间,将查找出的动态块相应大小的若干页分配给所述分配请求。
在步骤722中,如果查找出的动态块在分配后仍有剩余空闲页,将所述剩余空闲页作为要释放的空闲内存片段。
在步骤740中,响应于存在需要释放的空闲内存片段,判断要释放的空闲内存片段大小是否为页的整数倍。
在步骤741中,如果不是整数倍,将所述要释放的空闲内存片段所在的动态块拆分为空闲内存片段占一页的部分空间的第一动态块、及空闲内存片段占页的整数倍的第二动态块,其中,所述第二动态块位于所述第一动态块之后,所述第二动态块与被拆分的动态块的下一动态块连接。
在步骤742中,根据所述数组形成的索引,将所述第一动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第一动态块的空闲内存片段大小相应的链表中。
在步骤743中,如果是整数倍,将所述要释放的空闲内存片段视为第二动态块。
在步骤744中,判断所述第二动态块的空闲内存段与其连接的后继动态块是否形成连续空闲空间。
在步骤745中,如果未形成连续空闲空间,则根据所述数组形成的索引,将所述第二动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第二动态块的空闲内存片段大小相应的链表中。
在步骤746中,如果形成连续空闲空间,则将所述第二动态块与其形成连续空闲空间的后继动态块合并为一个第三动态块。
在步骤747中,判断所述第三动态块是否可拆分为符合不同链表内存范围的多个动态块。
在步骤748中,如果可拆分,将所述第三动态块拆分为符合不同链表内存范围的多个动态块,根据所述数组形成的索引,将拆分出的各个动态块的空闲内存片段分别作为链表元素***内存大小范围区间与各个动态块的空闲内存片段大小相应的链表中。
在步骤749中,如果不可拆分,根据所述数组形成的索引,将所述第三动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第三动态块的空闲内存片段大小相应的链表中。
例如,如图8所示的动态块拆分合并示意图。当存在需要释放的空闲内存片段时,首先对要释放的空闲内存片段进行整理,要释放的空闲内存片段不是页面的整数倍数时,要释放的空闲内存片段所在动态块被分解。如图8,动态块a分解成a1,a2。对于如动态块a2,检查其后续的连续动态块b中的块首部元数据,如能组成更大的连续空闲空间则发生如a2和b的动态块组合为c。检查c是否可以分解为多个正好吻合某个链表对应内存大小范围区间的动态块,由此将c分解为c1和c2。例如,动态块c1=16k=214,则c1进入第14个数组元素所指向的第14个空闲链表的链表首部,动态块c2=8k=213,则c2进入第13个数组元素所指向的第13个空闲链表的链表首部。而动态块a1的空闲空间为400字节,则a1的空闲空间进入第8个数组元素所指向的第8个空闲链表的链表首部。
可见,通过该实施方式,能够将释放的空闲内存片段更加合理地加入长度相应的链表,完善存储机制,提高分配效率。
图9是根据一示例性实施例示出的一种电子设备900的框图。如图9所示,该电子设备900可以包括:处理器901,存储器902,多媒体组件903,输入/输出(I/O)接口904,以及通信组件905。
其中,处理器901用于控制该电子设备900的整体操作,以完成上述的数据管理方法中的全部或部分步骤。存储器902用于存储各种类型的数据以支持在该电子设备900的操作,这些数据例如可以包括用于在该电子设备900上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器902可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件903可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器902或通过通信组件905发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口904为处理器901和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件905用于该电子设备900与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件905可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备900可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的数据管理方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器902,上述程序指令可由电子设备900的处理器901执行以完成上述的数据管理方法。
图10是根据一示例性实施例示出的一种数据管理***1000的框图。如图10所示,该数据管理***1000可以包括:如上述实施例所述的电子设备1010及非易失随机访问存储器1020。
其中,所述非易失随机访问存储器1020的文件***中保存了数据库文件,所述数据库文件为所述电子设备1010之上运行的数据库的数据库文件。所述数据库用于管理来自于所述汽车的电子电气***的数据。
通过该实施方式,可以在车载有限环境中快速处理具有车载特点的字节级随机海量小数据访问,熄火数据不丢失,减少数据拷贝次数,并由非易失内存带来极低处理延迟。
图11是根据一示例性实施例示出的一种数据管理装置的框图1100。该装置配置于数据库的存储引擎。如图11所示,该数据管理装置可以包括:预置模块1110、分配空间查找模块1120、分配执行模块1130。
该预置模块1110,可以被配置为预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,其中,所述数据库文件位于非易失随机访问存储器的文件***中,所述映射空间区由若干动态块组成,每个动态块包含一个或多个页,所述页为可分配的最小单元,部分或所有动态块的空闲内存片段作为链表元素存在于两个或两个以上的链表中,一个空闲内存片段对应一个链表元素,不同链表用于存放内存大小在不同范围区间的空闲内存片段,所述不同链表由数组的若干数组元素形成索引。
例如,一可能的实施方式中,所述数组的一个数组元素指向一个链表,所述数组的第N个数组元素指向第N个链表,所述第N个链表的每个链表元素用于存放内存大小在大于等于2N且小于2(N+1)的空闲内存片段。
该分配空间查找模块1120,可以被配置为响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素。
该分配执行模块1130,可以被配置为将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
可见,根据本公开提供的技术方案,存储引擎响应于接收到分配空闲内存空间的分配请求,可以根据所述数组形成的索引,快速在链表中查找空闲内存片段大小足够该分配请求的链表元素进行空闲内存片段的分配,因此,本公开提供的数据管理方法可以快速而不易失的处理大量小数据。
可以理解的是,与分配空闲内存相应地,本公开提供的方法设计的存储引擎也可以对释放内存进行回收。参见图12,图12是根据一示例性实施例示出的一种数据管理装置的框图1200。如图12所示,该装置还可以包括:回收模块1140,可以被配置为响应于存在需要释放的空闲内存片段,根据所述数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表。
考虑到有可能在链表中找不到空闲内存片段大小足够分配请求的链表元素进行分配,需重新申请动态块,而新申请的动态块还可能存在剩余空闲内存片段需回收,本公开提供又一种可能的实施方式。参见图12,该实施方式中,该装置还可以包括:新块分配模块1150,可以被配置为如果在所述两个或两个以上的链表中查找不到空闲内存片段大小足够所述分配请求的链表元素,则在所述映射空间尚未加入链表的动态块中,查找出含有的页足够所述分配请求的动态块,根据所述分配请求要求分配的空闲空间,将查找出的动态块相应大小的若干页分配给所述分配请求。余页回收模块1160,可以被配置为如果查找出的动态块在分配后仍有剩余空闲页,将所述剩余空闲页作为要释放的空闲内存片段,触发所述回收模块1140进入所述根据数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表的步骤。
在该实施方式中,将新申请的动态块分配后还剩余的空闲内存片段回收到链表,从而使得空闲内存片段的数量在链表中保持动态良性的维护,不必频繁到映射空间区去申请新的动态块,提高分配效率。
为了能够将释放的空闲内存片段更加合理地加入长度相应的链表,完善存储机制,提高分配效率。本公开提供再一种可能的实施方式对回收的数据进行分块和合并。具体地,参见图12,该实施方式中,回收模块1140可以包括:
判断整倍子模块1141,可以被配置为判断要释放的空闲内存片段大小是否为页的整数倍。
块分解子模块1142,可以被配置为如果所述判断整倍子模块1141判定不是整数倍,将所述要释放的空闲内存片段所在的动态块拆分为空闲内存片段占一页的部分空间的第一动态块、及空闲内存片段占页的整数倍的第二动态块,其中,所述第二动态块位于所述第一动态块之后,所述第二动态块与被拆分的动态块的下一动态块连接。
第一回收子模块1143,可以被配置为根据所述数组形成的索引,将所述第一动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第一动态块的空闲内存片段大小相应的链表中。
第二块处理子模块1144,可以被配置为如果所述判断整倍子模块判定是整数倍,将所述要释放的空闲内存片段视为第二动态块。
连续空间判断子模块1145,可以被配置为判断所述第二动态块的空闲内存段与其连接的后继动态块是否形成连续空闲空间。
第二回收子模块1146,可以被配置为如果所述连续空间判断子模块1145判定未形成连续空闲空间,则根据所述数组形成的索引,将所述第二动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第二动态块的空闲内存片段大小相应的链表中。
合并子模块1147,可以被配置为如果所述连续空间判断子模块1145判定形成连续空闲空间,则将所述第二动态块与其形成连续空闲空间的后继动态块合并为一个第三动态块。
拆分判断子模块1148,可以被配置为判断所述第三动态块是否可拆分为符合不同链表内存范围的多个动态块。
第三回收子模块1149,可以被配置为如果所述拆分判断子模块1148判定可拆分,将所述第三动态块拆分为符合不同链表内存范围的多个动态块,根据所述数组形成的索引,将拆分出的各个动态块的空闲内存片段分别作为链表元素***内存大小范围区间与各个动态块的空闲内存片段大小相应的链表中。
第四回收子模块1150,可以被配置为如果所述拆分判断子模块1148判定不可拆分,根据所述数组形成的索引,将所述第三动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第三动态块的空闲内存片段大小相应的链表中。
又一可能的实施方式中,所述数据库进程虚拟地址空间中,位于所述映射空间区之前的、预留的头部空间用于存放描述了所述映射空间区存储结构及分配情况的数据存储元数据,所述头部空间为固定大小。所述数据库进程虚拟地址空间的尾部空间用于存放日志,所述日志描述了存储引擎操作相关的数据上下文信息,所述日志随着所述存储引擎的操作进行相应更新,所述尾部空间随着所述日志的增加而相应增大。该实施方式中,所述装置还包括:数据库恢复模块1160,可以被配置为当所述数据库所在***重启时,根据所述数据库进程虚拟地址空间的头部空间存放的数据存储元数据恢复空间分配及根据所述尾部空间存放的日志包含的数据上下文信息进行数据重建。
根据该实施方式,***重新启动后,数据不丢失,存储引擎可以从头尾固定位置读取出数据存储元数据及日志,重建数据及恢复空闲内存空间分配。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

Claims (10)

1.一种数据管理方法,其特征在于,所述方法应用于数据库的存储引擎,所述方法包括:
预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,其中,所述数据库文件位于非易失随机访问存储器的文件***中,所述映射空间区由若干动态块组成,每个动态块包含一个或多个页,所述页为可分配的最小单元,部分或所有动态块的空闲内存片段作为链表元素存在于两个或两个以上的链表中,一个空闲内存片段对应一个链表元素,不同链表用于存放内存大小在不同范围区间的空闲内存片段,所述不同链表由数组的若干数组元素形成索引;
响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素;
将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于存在需要释放的空闲内存片段,根据所述数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
如果在所述两个或两个以上的链表中查找不到空闲内存片段大小足够所述分配请求的链表元素,则在所述映射空间尚未加入链表的动态块中,查找出含有的页足够所述分配请求的动态块,根据所述分配请求要求分配的空闲空间,将查找出的动态块相应大小的若干页分配给所述分配请求;
如果查找出的动态块在分配后仍有剩余空闲页,将所述剩余空闲页作为要释放的空闲内存片段,进入所述根据数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表的步骤。
4.根据权利要求2或3所述的方法,其特征在于,所述映射空间区的所有动态块顺序连接;
所述根据数组形成的索引,将要释放的空闲内存片段作为链表元素***内存大小范围区间与要释放的空闲内存片段大小相应的链表包括:
判断要释放的空闲内存片段大小是否为页的整数倍;
如果不是整数倍,将所述要释放的空闲内存片段所在的动态块拆分为空闲内存片段占一页的部分空间的第一动态块、及空闲内存片段占页的整数倍的第二动态块,其中,所述第二动态块位于所述第一动态块之后,所述第二动态块与被拆分的动态块的下一动态块连接;
根据所述数组形成的索引,将所述第一动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第一动态块的空闲内存片段大小相应的链表中;
如果是整数倍,将所述要释放的空闲内存片段视为第二动态块;
判断所述第二动态块的空闲内存段与其连接的后继动态块是否形成连续空闲空间;
如果未形成连续空闲空间,则根据所述数组形成的索引,将所述第二动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第二动态块的空闲内存片段大小相应的链表中;
如果形成连续空闲空间,则将所述第二动态块与其形成连续空闲空间的后继动态块合并为一个第三动态块;
判断所述第三动态块是否可拆分为符合不同链表内存范围的多个动态块;
如果可拆分,将所述第三动态块拆分为符合不同链表内存范围的多个动态块,根据所述数组形成的索引,将拆分出的各个动态块的空闲内存片段分别作为链表元素***内存大小范围区间与各个动态块的空闲内存片段大小相应的链表中;
如果不可拆分,根据所述数组形成的索引,将所述第三动态块的空闲内存片段作为链表元素***内存大小范围区间与所述第三动态块的空闲内存片段大小相应的链表中。
5.根据权利要求1所述的方法,其特征在于,所述数组的一个数组元素指向一个链表,所述数组的第N个数组元素指向第N个链表,所述第N个链表的每个链表元素用于存放内存大小在大于等于2N且小于2(N+1)的空闲内存片段。
6.根据权利要求1所述的方法,其特征在于,所述数据库进程虚拟地址空间中,位于所述映射空间区之前的、预留的头部空间用于存放描述了所述映射空间区存储结构及分配情况的数据存储元数据,所述头部空间为固定大小;
所述数据库进程虚拟地址空间的尾部空间用于存放日志,所述日志描述了存储引擎操作相关的数据上下文信息,所述日志随着所述存储引擎的操作进行相应更新,所述尾部空间随着所述日志的增加而相应增大;
所述方法还包括:
当所述数据库所在***重启时,根据所述数据库进程虚拟地址空间的头部空间存放的数据存储元数据恢复空间分配及根据所述尾部空间存放的日志包含的数据上下文信息进行数据重建。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一项所述方法的步骤。
8.一种电子设备,其特征在于,包括:
如权利要求7中所述的计算机可读存储介质;以及
一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。
9.一种数据管理***,其特征在于,所述数据管理***用于嵌入在汽车中,所述数据管理***包括:
如权利要求8所述的电子设备及非易失随机访问存储器;
其中,所述非易失随机访问存储器的文件***中保存了数据库文件,所述数据库文件为如权利要求8所述的电子设备之上运行的数据库的数据库文件;
所述数据库用于管理来自于所述汽车的电子电气***的数据。
10.一种数据管理装置,其特征在于,所述装置配置于数据库的存储引擎,所述装置包括:
预置模块,被配置为预先将所述数据库的数据库文件映射到数据库进程虚拟地址空间的映射空间区,其中,所述数据库文件位于非易失随机访问存储器的文件***中,所述映射空间区由若干动态块组成,每个动态块包含一个或多个页,所述页为可分配的最小单元,部分或所有动态块的空闲内存片段作为链表元素存在于两个或两个以上的链表中,一个空闲内存片段对应一个链表元素,不同链表用于存放内存大小在不同范围区间的空闲内存片段,所述不同链表由数组的若干数组元素形成索引;
分配空间查找模块,被配置为响应于接收到分配空闲内存的分配请求,根据所述数组形成的索引,在所述两个或两个以上的链表中查找空闲内存片段大小足够所述分配请求的链表元素;
分配执行模块,被配置为将查找出的所述链表元素对应的空闲内存片段分配给所述分配请求,以及将所述链表元素从其所在链表删除。
CN201711449172.7A 2017-12-27 2017-12-27 数据管理方法、装置、***、存储介质及电子设备 Active CN108121813B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711449172.7A CN108121813B (zh) 2017-12-27 2017-12-27 数据管理方法、装置、***、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711449172.7A CN108121813B (zh) 2017-12-27 2017-12-27 数据管理方法、装置、***、存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN108121813A true CN108121813A (zh) 2018-06-05
CN108121813B CN108121813B (zh) 2020-09-18

Family

ID=62231826

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711449172.7A Active CN108121813B (zh) 2017-12-27 2017-12-27 数据管理方法、装置、***、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN108121813B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109977078A (zh) * 2019-03-26 2019-07-05 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN110764711A (zh) * 2019-10-29 2020-02-07 北京浪潮数据技术有限公司 一种io数据分类删除方法、装置和计算机可读存储介质
CN112667637A (zh) * 2020-12-31 2021-04-16 中移(杭州)信息技术有限公司 数据管理方法、装置及计算机可读存储介质
CN112784120A (zh) * 2021-01-25 2021-05-11 浪潮云信息技术股份公司 一种基于范围分片方式的kv内存数据库存储管理方法
CN113050886A (zh) * 2021-02-23 2021-06-29 山东师范大学 面向嵌入式内存数据库的非易失性内存存储方法及***
CN113467716A (zh) * 2021-06-11 2021-10-01 苏州浪潮智能科技有限公司 一种数据存储的方法、装置、设备及可读介质
CN117539636A (zh) * 2023-12-06 2024-02-09 摩尔线程智能科技(北京)有限责任公司 总线模块的内存管理方法、装置、电子设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101676906A (zh) * 2008-09-18 2010-03-24 中兴通讯股份有限公司 一种利用位图对内存数据库空间进行管理的方法
CN102402622A (zh) * 2011-12-27 2012-04-04 北京人大金仓信息技术股份有限公司 嵌入式内存数据库的内存页面管理调度方法
CN102411632A (zh) * 2011-12-27 2012-04-11 北京人大金仓信息技术股份有限公司 基于链表的内存数据库页式存储方法
US20150378992A1 (en) * 2014-06-26 2015-12-31 Altibase Corp. Method and apparatus for moving data in database management system
CN107016100A (zh) * 2017-04-10 2017-08-04 重庆大学 一种基于非易失性内存文件***的元数据管理方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101676906A (zh) * 2008-09-18 2010-03-24 中兴通讯股份有限公司 一种利用位图对内存数据库空间进行管理的方法
CN102402622A (zh) * 2011-12-27 2012-04-04 北京人大金仓信息技术股份有限公司 嵌入式内存数据库的内存页面管理调度方法
CN102411632A (zh) * 2011-12-27 2012-04-11 北京人大金仓信息技术股份有限公司 基于链表的内存数据库页式存储方法
US20150378992A1 (en) * 2014-06-26 2015-12-31 Altibase Corp. Method and apparatus for moving data in database management system
CN107016100A (zh) * 2017-04-10 2017-08-04 重庆大学 一种基于非易失性内存文件***的元数据管理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
蒋智鹏: "内存数据库的存储管理", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111459884B (zh) * 2019-03-26 2023-05-16 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN111459885B (zh) * 2019-03-26 2023-04-28 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN109977078B (zh) * 2019-03-26 2020-06-02 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN111459884A (zh) * 2019-03-26 2020-07-28 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN109977078A (zh) * 2019-03-26 2019-07-05 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN111459885A (zh) * 2019-03-26 2020-07-28 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN110764711A (zh) * 2019-10-29 2020-02-07 北京浪潮数据技术有限公司 一种io数据分类删除方法、装置和计算机可读存储介质
CN110764711B (zh) * 2019-10-29 2022-03-22 北京浪潮数据技术有限公司 一种io数据分类删除方法、装置和计算机可读存储介质
CN112667637B (zh) * 2020-12-31 2023-09-19 中移(杭州)信息技术有限公司 数据管理方法、装置及计算机可读存储介质
CN112667637A (zh) * 2020-12-31 2021-04-16 中移(杭州)信息技术有限公司 数据管理方法、装置及计算机可读存储介质
CN112784120B (zh) * 2021-01-25 2023-02-21 浪潮云信息技术股份公司 一种基于范围分片方式的kv内存数据库存储管理方法
CN112784120A (zh) * 2021-01-25 2021-05-11 浪潮云信息技术股份公司 一种基于范围分片方式的kv内存数据库存储管理方法
CN113050886A (zh) * 2021-02-23 2021-06-29 山东师范大学 面向嵌入式内存数据库的非易失性内存存储方法及***
CN113467716B (zh) * 2021-06-11 2023-05-23 苏州浪潮智能科技有限公司 一种数据存储的方法、装置、设备及可读介质
CN113467716A (zh) * 2021-06-11 2021-10-01 苏州浪潮智能科技有限公司 一种数据存储的方法、装置、设备及可读介质
CN117539636A (zh) * 2023-12-06 2024-02-09 摩尔线程智能科技(北京)有限责任公司 总线模块的内存管理方法、装置、电子设备和存储介质

Also Published As

Publication number Publication date
CN108121813B (zh) 2020-09-18

Similar Documents

Publication Publication Date Title
CN108121813A (zh) 数据管理方法、装置、***、存储介质及电子设备
US6611898B1 (en) Object-oriented cache management system and method
US8751763B1 (en) Low-overhead deduplication within a block-based data storage
CN103164346B (zh) 使用lba位图的方法与***
US10565125B2 (en) Virtual block addresses
US9501421B1 (en) Memory sharing and page deduplication using indirect lines
CN107066498B (zh) 键值kv存储方法和装置
CN105224478A (zh) 一种映射表的形成、更新和恢复方法及电子设备
CN101617299A (zh) 数据库管理方法
US10552335B2 (en) Method and electronic device for a mapping table in a solid-state memory
CN115543224B (zh) 基于zns ssd的文件***控制方法、装置及设备
CN106919517B (zh) 闪存及其访问方法
WO2021129151A1 (zh) 文件备份方法、装置及终端设备
US20190034336A1 (en) System and method for hardware-independent memory storage
CN110674052A (zh) 内存管理方法、服务器及可读存储介质
CN110949173A (zh) 一种充电方法及装置
CN113641629A (zh) 一种flash存储器的文件写入和读取方法
CN114327290B (zh) 一种磁盘分区的结构、格式化方法和访问方法
US8024374B2 (en) Computer object conversion using an intermediate object
CN114090637A (zh) 数据存取方法、装置、设备及存储介质
CN112199042A (zh) 存储空间管理方法、装置、芯片、设备及存储介质
CN111813783A (zh) 数据处理方法、装置、计算机设备和存储介质
CN116340266A (zh) 一种细粒度文件***以及文件读写方法
CN106874457B (zh) 一种通过虚拟目录来提升元数据集群性能的方法
CN117251292B (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