CN109117273A - 数据存储方法、装置及设备 - Google Patents
数据存储方法、装置及设备 Download PDFInfo
- Publication number
- CN109117273A CN109117273A CN201810943032.3A CN201810943032A CN109117273A CN 109117273 A CN109117273 A CN 109117273A CN 201810943032 A CN201810943032 A CN 201810943032A CN 109117273 A CN109117273 A CN 109117273A
- Authority
- CN
- China
- Prior art keywords
- memory block
- capacity
- target
- memory
- data
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请公开了一种数据存储方法、装置及设备,在该方法中,获取会待存储到内存中的目标数据及目标数据的数据量之后,根据该数据量,从设定的内存块的多种容量规格中,确定能够容纳目标数据且剩余空间最小的内存块所具有的目标容量规格;依据该多种容量规格,构建总容量不小于数据量的至少一种内存块组合,内存块组合包括至少一种容量规格的内存块及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个;确定总容量最小的目标内存块组合;当目标内存块组合的总容量小于目标容量规格表征的容量时,将目标数据存储到与目标内存块组合对应的多个目标内存块中。本申请的方案可以减少内存中出现的内存碎片,提高内存使用率。
Description
技术领域
本申请涉及计算机技术领域,更具体地说,涉及一种数据存储方法、装置及设备。
背景技术
程序、进程、应用、代码、函数等运行时需使用内存,向内存中存储数据。为了合理利用内存,需要进行内存管理。
目前的内存管理机制是将内存分为若干个内存页,每个内存页的容量大小相同,如,每个内存页的大小为1MB,而内存页被进一步划分为若干个等大小的内存块(也称为内存片),内存块是内存管理的最小单元,不同内存页中内存块的大小规格可能会不同。如,内存块按照所能存储的数据大小,可以分为32B(B表示字节)、64B、128B、512B、1KB等多种规格。在现有内存管理机制下,在向内存中存储数据时,需要根据该数据的大小,确定出能够容纳该数据的内存块的规格,并将该数据存储到相应规格的内存块中。如,待存储的数据大小为80B,而内存块的规格有64B和128B、,那么能够容纳该数据的内存块的规格为128B,则会将数据存储到128B的内存块中。
然而当将数据存储到内存块之后,该内存块中就不会存储该数据之外的其他数据,这样,当内存块的内存大小大于该内存块所存储的数据的大小时,内存块中就会剩余部分不可用的内存,也就是俗称的内存碎片,导致内存浪费。如,在128B的内存块中存储80B的数据,则该128B的内存块中就会存在48B的内存碎片。而且,当内存中容量大小贴近待存储数据的数据量大小且能够容纳该待存储数据的内存块均未处于空闲状态(内存块已存储有数据或者由于其他原因导致不可用),则需要选用容量较大的内存块存储较少的数据,这样必然会产生导致出现较多的内存碎片,从而导致较多的内存浪费。
发明内容
有鉴于此,本发明实施例提供了一种数据存储方法、装置及设备,以实现更为合理的向内存中存储数据,减少内存中出现的内存碎片,提高内存使用率,降低内存浪费。
为实现上述目的,本发明实施例提供如下技术方案:一种数据存储方法,包括:
获取待向内存中存储的目标数据以及所述目标数据的数据量;
根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
在一种实现方式中,该数据存储方法还可以包括:当所述内存块组合的总容量不小于所述目标容量规格所表征的容量时,将所述目标数据存储到所述内存中具有所述目标容量规格的目标内存块中。
又一方面,本申请还提供了一种数据存储装置,包括:
数据获取单元,用于获取待向内存中存储的目标数据以及所述目标数据的数据量;
块容量确定单元,用于根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
块组合拼接单元,用于依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
块组合确定单元,用于从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
第一存储单元,用于当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
又一方面,本申请还提供了一种计算机设备,包括:
处理器和存储器;
其中,所述处理器用于执行所述存储器中存储的程序;
所述存储器用于存储程序,所述程序至少用于:
获取待向内存中存储的目标数据以及所述目标数据的数据量;
根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
由以上可知,在本申请实施例中,获取到待存储的目标数据后,在根据该目标数据的数据量,确定出最适合存储该目标数据的内存块所应具有的目标容量规格的同时,还会构建总容量不小于该目标数据的数据量且总容量最小的目标内存块组合。由于目标内存块组合实际上是由具有至少一种容量规格的多个内存块组合而成,而且,如果目标内存块组合的总容量小于最适合存储该目标数据的内存块所具有的容量时,则说明相对于利用具有该目标容量规格的单个内存块存储该目标数据,利用该目标内存组合对应的具有至少一种容量规格的多个内存块来存储该目标数据所产生的内存碎片更少,在该种情况下,将该目标数据存储到该目标内存组合对应的具有至少一种容量规格的多个内存块中,有利于减少内存中内存碎片的产生,从而减少了内存浪费,提高了内存利用率。
附图说明
图1示出了本发明实施例的数据存储方法所适用的一种应用场景示意图;
图2示出了本发明实施例的数据存储方法所适用的一种计算机设备的组成结构示意图;
图3示出了本申请实施例的数据存储方法的一种流程示意图;
图4和图5示出了向内存存储目标数据的两种不同方式的示意图;
图6示出了本申请实施例中将目标数据存储到该目标内存块组合对应的多个目标内存块的一种流程示意图;
图7示出了本申请实施例中将目标数据存储到内存中具有该目标容量规格的内存块的一种实现流程示意图;
图8示出了在内存中大数据无法“装箱”的一种示意图;
图9示出了目标数据在多个内存块中依次存储的先后顺序示意图;
图10示出了向内存中存储目标数据的新增数据的一种流程示意图;
图11示出了本申请一种数据存储装置一个实施例的组成结构示意图。
具体实施方式
本申请的方案适用于向内存中存储数据的场景,以减少内存碎片,提高内存利用率。如,计算机设备中的操作系统响应于计算机设备中应用程序或者进程等发起的内存请求,并将该内存请求所请求向内存中存储的数据存储到内存中。
为了便于理解,参见图1,其示出了本申请的数据存储方法所适用的一种应用场景的示意图。
由图1可以看出,计算机设备中运行有操作系统,同时该计算机设备中还运行有程序、进程等,操作系统可以用于对该计算机设备中的内存空间进行内存管理,并根据程序、进程等发送的内存请求,为程序、进程等分配内存空间,以用于存储程序、进程等运行过程中产生的数据。
以程序为例,操作系统可以接收程序发送的内存分配请求,该内存分配请求可以携带需要向内存中存储的数据;操作系统根据该数据的大小,从内存中确定用于存储该数据的内存区域,并将数据存储到该内存区域。
在本申请实施例中,内存中可以创建内存页,每个内存页又可以划分为多个内存块,内存块是内存中的最小管理单元,操作系统可以向内存的各个内存块中存储程序以及进程等所涉及到的数据。
可以理解的是,该计算机设备可以是服务器、个人计算机等具备操作系统并能够实现内存管理的设备。如,参见图2,其示出了本申请一种计算机设备的组成结构示意图。
由图2可以看出,该计算机设备200至少包括:处理器201和存储器202。
该处理器201,可以为中央处理器(Central Processing Unit,CPU),特定应用集成电路,数字信号处理器、现成可编程门阵列或者其他可编程逻辑器件等。
其中,所述处理器201用于执行所述存储器中存储的程序;
存储器202中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序代码包括计算机操作指令。
在本申请实施例中,该存储器中至少存储有用于实现以下功能的程序:
获取待向内存中存储的目标数据以及所述目标数据的数据量;
根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
在一种可能的实现方式中,该存储器202可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、以及至少一个功能(比如数据展现等)所需的应用程序等;存储数据区可存储根据计算机的使用过程中所创建的数据。
该存储器202可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。
可选的,该计算机设备还可以包括通信接口203、输入单元204和显示器205和通信总线206。
处理器201、存储器202、通信接口203、输入单元204、显示器205、均通过通信总线206完成相互间的通信。
当然,图2所示的计算机设备的结构并不构成对本申请实施例中计算机设备的限定,在实际应用中计算机设备可以包括比图2所示的更多或更少的部件,或者组合某些部件。
下面结合流程图,对本申请的数据存储方法进行介绍。
如参见图3,其示出了本申请一种数据存储方法一个实施例的流程示意图,本实施例的方法可以应用于计算机设备。该方法可以包括:
S301,获取待向内存中存储的目标数据以及该目标数据的数据量。
其中,目标数据为计算机设备的操作系统获取到的待存储到内存中的数据。如,该目标数据为计算机设备中的程序向操作系统请求存储到内存中的数据。
该目标数据的数据量可以是操作系统是基于目标数据确定的,也可以是操作系统接收到的内存分配请求中携带的。如,程序向操作系统发送内存分配请求,该内存分配请求可以携带所需存储的目标数据以及该目标数据的数据量等相关信息。
S302,根据该目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳该目标数据且剩余空间最小的内存块所具有的目标容量规格。
在本申请实施例中,内存中不同内存页划分出的内存块可以有多种不同的容量规格。其中,内存块的容量规格表征内存块的容量大小,该容量大小是指内存块用于存储数据的内存空间大小。例如,内存中内存块可以分为5种容量规格,分别为32B、64B、128B、2KB和32KB。
可以理解的是,在向内存中存储该目标数据之前,操作系统会根据内存中内存块所具有的多种容量规格,确定最适合存储该目标数据的内存块的容量规格。其中,最适合存储该目标数据的内存块是指相对于其他容量规格的内存块而言,该内存块可以容纳该目标数据,而且该内存块存储该目标数据之后剩余的剩余空间最小,也就是说,内存块的容量不小于该目标数据的数据量且存储该目标数据所产生的内存碎片最小。
其中,为了便于区分,将可以容纳该目标数据,且存储该目标数据之后剩余的剩余空间最小的内存块所具有的容量规格称为目标容量规格。
举例说明,以内存中内存块可以有分别为32B、64B、128B、2KB和32KB这五种容量规格为例,假设待存储的目标数据的数据量为90B,而容量规格为32B和64B的内存块无法容纳该目标数据,而采用容量规格为2KB和32KB的内存块存储该目标数据,又会存在较多的内存碎片,而选用128B的内存块存储该目标数据所产生的内存碎片最少,因此,128B属于目标容量规格,相应的,容量规格为128B的内存块为最适合存储该目标数据的内存块。
可选的,为了便于快速确定该目标容量规格,可以按照该多种容量规格从小到大的顺序,选取出表征的容量大于该目标数据的数据量且排序最靠前的目标容量规格。如上面例子中,大于该目标数据的数据量90B的容量规格且按照容量从小到大的顺序的排序为128B、2KB和32KB,则排序处于第一位的容量规格128就属于目标容量规格。
S303,依据设定的内存块的多种容量规格,构建总容量不小于该目标数据的数据量的至少一种内存块组合。
其中,该内存块组合可以理解为由属于至少一种容量规格的多个内存块构成的,用于存储该目标数据的一种存储方式。
该内存块组合包括至少一种容量规格的内存块以及每种容量规格的内存块所具有的数量。也就是说,该内存块组合实际上描述了构建该内存块组合所需的各个内存块所具有的至少一种容量规格,以及每种容量规格的内存块所需的数量。
其中,每种内存块组合中包括的内存块的总数量为多个,相应的,内存块组合的总容量为该内存块组合中各个内存块的容量规格表征的容量之和。
举例说明,假设内存中内存块的容量规格包括32B、64B、128B、2KB和32KB这五种容量规格为例,假设目标数据的数据量为90B,那么能够存储该目标数据的内存块组合至少可以有以下几种:
内存块组合1包括:32B容量规格的内存块3个;
内存块组合2包括:32B容量规格的内存块1个,以及64B容量规格的内存块1个;
内存块组合3包括:64B容量规格的内存块2个;
内存块组合4包括:32B容量规格的内存块1个,以及128B容量规格的内存块1个。
相应的,内存块组合1的总容量为32B*3=96B,内存块组合2的总容量为32B+64B=96B,相应的,内存块组合3的总容量为128B,而内存块组合4的总容量为160B。
可选的,考虑到构建内存块组合时,如果构建内存块组合所采用的容量规格大于或者等于前面确定的适合存储该目标数据的单个内存块所具有的目标容量规格,必然会构建出的内存块组合的容量过大,相应的,采用该种内存块组合存储该目标数据所产生的内存碎片也必然大于该目标容量规格的内存块存储该目标数据所产生的内存碎片。因此,可以先从设定的内存块的多种容量规格中,确定表征的容量小于该目标容量规格表征的容量的至少一种候选容量规格;然后,依据该至少一种候选容量规格,构建总容量不小于该目标数据的数据量的至少一种内存块组合。
相应的,在该种情况下构建出的内存块组合包括:至少一种候选容量规格的内存块以及每种候选容量规格的内存块的数量。
其中,为了便于区分,将设定的内存中内存块所具有的多种容量规格中,表征的容量小于该目标容量所表征的容量的容量规格称为候选容量规格。而只存候选容量规格中,选取能够构建内存块组合的内存块的容量规格,有利于减少构建出的内存块的数量,并能够更为合理的构建出内存块组合。
如,上面例子中在目标数据的数据量为90B的情况下,目标容量规格为128B,在该种情况下,内存块组合4中采用了该目标容量规格的内存块,那么该内存块组合4中多个内存块来存储该目标数据所产生的内存碎片,必然会大于采用目标容量规格128B的内存块存储该目标数据所产生的内存碎片,构建出该种内存块组合并没有意义,而且会增加数据处理量。
而小于目标容量规格128B的候选容量规格包括:32B、64B,这样,依据这两个候选容量规格构建内存块组合,则有可能构建出总容量大于该目标数据的数据量且小于目标容量规格所表征的容量的内存块组合,如,构建出的内存块组合包括内存块组合1、内存块组合2和内存块组合3。
S304,从该至少一种内存块组合中,确定总容量最小的目标内存块组合。
可以理解的是,为了减少存储该目标数据所产生的内存碎片,需要从构建出的多个内存块组合中,选取出总容量最小的内存块组合,其中,为了便于区分,将该总容量最小的内存块组合称为目标内存块组合。
其中,当总容量最小的内存块组合有多种时,则选择任意一个总容量最小的内存块组合作为目标内存块组合。可以理解的是,如果存储该目标数据所用的内存块过多,必然会导致后续读取该目标数据耗费的时间会相对较少,导致读取效率降低,因此,在总容量最小的内存块组合有多种时,则可以从该多种容量最小的内存块组合中,选取包含的内存块数量最小的内存块组合作为目标内存块组合。
如,上面构建出的内存块组合1、内存块组合2和内存块组合3的总容量为依次为96B、96B和128B,因此,总容量最小的内存块组合为内存块组合1和内存块组合2,而内存块组合1需要3个容量规格为32B的内存块,而内存块组合2仅仅需要一个容量规格为32B的内存块和一个容量规格为64B的内存块,内存块数量相对较少,因此,可以选取内存块组合2作为目标内存块组合。
S305,当目标内存块组合的总容量小于该目标容量规格所表征的容量时,将该目标数据存储到与该目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
可以理解的是,如果目标内存块组合的总容量小于该目标容量规格所表征的容量,则说明将该目标数据存储到该目标内存块组合所对应的多个内存块中所产生的内存碎片,会比将该目标数据存储到该目标容量规格的内存块中的内存碎片少。
如,假设目标容量规格为Mn,Mn为该目标容量规格表征的容量,而目标内存块组合可以依据小于该目标容量规格Mn的容量规格构建,相应的,该目标内存块组合的总容量可以表示如下:
M1*K1+M2*K2+……+Mn-1*Kn-1
其中,M1到Mn-1为表征的容量小于目标容量规格的容量Mn的n-1个容量规格,K1表示目标内存块组合中容量规格为M1的内存块的数量,K2表示目标内存块组合中容量规格为M2的内存块的数量,相应的,Kn-1为目标内存块组合中容量规格为Mn-1的内存块的数量。其中,K1到Kn-1中任意一个表示的数量均可以为包含0在内的自然数,但是K1到Kn-1至少有一个表示的数量不能为零,且K1到Kn-1表示的数量总和大于等于2。
例如,目标内存块组合可以由两个M1的内存块,0个M2的内存块以及1个Mn-1的内存块,则该目标内存块组合的总容量为M1*2+Mn-1。
相应的,假设目标数据的数据量为X,如果(M1*K1+M2*K2+……+Mn-1*Kn-1)<Mn,则相当于((M1*K1+M2*K2+……+Mn-1*Kn-1)-X)<(Mn-X),也就是通过目标内存块组合所涉及到的多个内存块存储该目标数据所产生的内存碎片,少于利用目标容量规格的单个内存块存储该目标数据所产生的内存碎片。
可见,当目标内存块组合的总容量小于该目标容量规格所表征的容量的情况下,可以在内存中采用由该多个内存块构建的目标内存块组合来存储该目标数据,以减少内存碎片。而通过该多个内存块来共同存储该目标数据实际上就相当于通过该多个内存块拼接成的内存空间来存储该目标数据。
可以理解的是,目标内存块组合中仅仅是构建出存储该目标数据所需的内存块的容量规格以及每种容量规格的内存块所需的数量,因此,在需要基于该目标内存块组合存储该目标数据时,需要依据该目标内存块中所包括的内存块所具有的每种容量规格以及每种容量规格的内存块的数量,从内存中分别查找出该内存块组合中每种容量规格对应的相应数量个空闲的内存块,并将该目标数据存储到最终查找出的多个空闲的内存块中。
具体的,可以按照目标内存块组合中所包括的内存块所具有的每种容量规格,分别从内存中定位每种容量规格对应的目标内存页,每种容量规格对应的目标内存页中包括多块给容量规格的内存块。然后,针对该目标内存块组合对应的每种容量规格所需的内存块的数量,从该容量规格对应的目标内存页中确定出相应数量的空闲内存块,相应的,将该目标数据存储到各个目标内存页中确定出的空闲内存页中。
举例说明,假设目标内存块组合为由1个容量规格为32B的内存块以及1个容量规格为64B的内存块组成,则可以从内存中定位出包含32B内存块的内存页以及包含64B内存块的内存页,然后从32B容量规格的内存页查找出一块处于空闲状态(未被存储数据)的32B的内存块,并从64B容量规格的内存页中查找出1个64B的内存块,并将该目标数据存储到查找出的该32B的内存块以及64B的内存块中,从而通过该32B的内存块以及64B的内存块组成的内存空间来存储该目标数据。
可见,本申请实施例,获取到待存储的目标数据后,在根据该目标数据的数据量,确定出最适合存储该目标数据的内存块所应具有的目标容量规格的同时,还会构建总容量不小于该目标数据的数据量且总容量最小的目标内存块组合。由于目标内存块组合实际上是由具有至少一种容量规格的多个内存块组合而成,而且,如果目标内存块组合的总容量小于最适合存储该目标数据的内存块所具有的容量时,则说明相对于利用具有该目标容量规格的单个内存块存储该目标数据,利用该目标内存组合对应的具有至少一种容量规格的多个内存块来存储该目标数据所产生的内存碎片更少,在该种情况下,将该目标数据存储到该目标内存组合对应的具有至少一种容量规格的多个内存块中,有利于减少内存中内存碎片的产生,从而减少了内存浪费,提高了内存利用率。
为了便于理解本申请实施例的有益效果,仍假设目标数据的数据量为90B,且假设内存中内存块的容量规格包括32B、64B、128B、2KB和32KB这五种,下面结合图4和图5进行说明。
按照目前常规的存储方式,则会选取容量规格为128B的内存块存储该目标数据,如图4所示。而128B的内存块存储90B的目标数据401,则只会占用该内存块中90B的内存空间,而剩余的38B内存空间就属于内存碎片,从而产生38B内存空间的浪费,如图4所示的内存块中空白部分表示38B的内存碎片。
但是如果按照本申请的方案,则会选取一块32B的内存块和一块64B的内存块来存储该目标数据,该种情况可以参见图5所示。由于内存中每个内存页中内存块的容量规格都是相同的,因此,32B的内存块和64B的内存块分别属于不同的内存页。相应的,需要从32B容量规格以及64B容量规格的内存页中分别定位出一个空闲的内存块,然后该目标数据会被跨内存页存储到这两个空闲的内存块中。如图5可以看出目标数据501被分散存储到32B的内存页的一个内存块中以及64B的内存页的一个内存块中。在该种情况下,假设目标数据先从32B的空闲内存块开始存储,那么由于目标数据的数据量为90B,则32B的内存块的空间会被全部占据。而该目标数据剩余的58B数据会被存储到该64B的内存块中,这样,64B的内存块存储该目标数据剩余的58B数据之后,会剩余6B的内存空间,如该内存块的空白区域502,即剩余6B的内存碎片502。通过对比图4和图5可知,通过本申请的方案利用两块内存块拼接到一起来存储该目标数据所产生的内存碎片为6B,相对于图4中产生38B的内存碎片,通过本申请的方案可以减少32B的内存碎片,有效减少了内存浪费。
S306,当该内存块组合的总容量不小于该目标容量规格所表征的容量时,将该目标数据存储到该内存中具有该目标容量规格的目标内存块中。
可以理解的是,如果采用内存块组合的总容量不小于该目标容量规格所表征的容量,则说明采用该目标容量规格的内存块来存储该目标数据所产生的内存碎片相对较少,在该种情况下,则可以按照常规方式,从内存中确定出一块具有该目标容量规格且空闲的内存块来存储该目标数据。
如,假设目标数据的数据量大小为100B,而假设内存中内存块的容量规格可以包括80B、128B、512B三种容量规格,则目标容量规格为128B,而内存块组合可以是两个80B的内存块,但是该目标内存块组合的总容量为160B大于目标容量规格的内存块的容量128B,在该种情况下,则可以从内存中选取出一个空闲的128B的内存块,并将该目标数据存储到该空闲的128B的内存块中。
需要说明的是,该步骤S306为可选步骤,其目的是为了便于完整向内存中存储数据的过程,但是其并不是为了减少内存碎片所必须执行的步骤。
在本申请实施例中,为了便于区分,将最终存储该目标数据的内存块称为目标内存块。
可以理解的是,内存中内存页可以是预先划分好的。如,将内存的内存区域划分为多个内存页,而每个内存页又划分为多个内存块。其中,不同内存页中内存块的容量规格可以不同。一般情况下,该多个内存页的内存块的容量规格会包含了设定的多种容量规格,以使得可以从内存中查询到设定的多种容量规格的内存块。
但是本申请的发明人经研究发现:由于不同计算机设备不同次向内存中存储数据的大小差异度较大,或者同一计算机设备内不同进程向内存中存储数据的大小也存在较大差异,因此,预先构建出的内存页可能并不适合计算机设备中程序以及进程对于内存的需求,从而可能会导致较多的内存浪费。比如,内存中预先划分出的内存页中可能会有较多内存页中内存块的容量规格为512KB,但是在实际应用中,该计算机设备向内存中存储的数量都较小,而虽然其他容量规格的内存块被不断占用,这些较小数据量的数据必然会存储到512KB的内存块中,这样,就会导致512KB的内存块中会产生较多的内存碎片,导致内存浪费。
基于以上研究发现:为了进一步减少内存浪费,可以在需要向内存中存储该待存储的目标数据时,基于该目标数据,在内存中创建适合的内存页并将内存页划分为内存块,从而实现根据存储需求动态创建内存页,从而有利于更为合理的在内存中划分内存页。
相应的,在将所述目标数据存储到与所述目标内存块组合对应的至少一种容量规格以及每种容量规格的内存块的数量相匹配的多个目标内存块中的过程中,就可以先根据目标内存块组合中每种容量规格,检测内存中是否创建有该容量规格的内存页,如果未创建有该种容量规格的内存页,则在内存的空闲存储区域中创建该种容量规格的内存页。
如,参见图6,其示出了将目标数据存储到该目标内存块组合对应的多个目标内存块的一种流程示意图,该过程可以包括:
S601,针对该目标内存块组合对应的每种容量规格,当该内存中未创建有该容量规格的内存页,或者该容量规格的内存页中空闲内存块的数量小于该目标内存块组合中该容量规格的内存块的数量时,在该内存的空闲存储区域构建具有该容量规格的内存页。
其中,该容量规格的内存页中包括多个具有该容量规格的内存块。在本申请实施例中,在该内存的空闲存储区域构建具有该容量规格的内存页实际上是在内存的空闲存储区域创建内存页,并将内存页划分为具有该容量规格的多个内存块。如,容量规格为32B的内存页中实际上是划分出多个32B的内存块。
其中,内存的空白区域可以为内存中未被占用的区域,在该空白区域中为被划分为内存页。
可以理解的是,对于目标内存块组合中的某种容量规格,在内存中未创建该种容量规格的内存页时,则内存中不存在该种容量规格的内存块。因此,可以在内存的空闲区域中创建相应容量规格的内存页,以便依据目标内存块组合中该种容量规格的内存块的数量,从创建的内存页中选取出相应数量个空闲的内存块,以存储该目标数据。
相应的,对于目标内存块组合中的某种容量规格,如果内存中创建有该种容量规格一个或多个内存页,但是该一个或多个内存页中空闲的内存块的数量小于该目标内存块组合中该种容量规格的内存块所需的数量,则仍需要在内存的空白区域创建该种容量规格的内存页。
如,假设目标内存块组合中32B容量规格的内存块需要3个,但是内存中32B容量规格的内存页中只有2个内存块处于空闲状态,则无法满足存储该目标数据的需求,在该种情况下,仍需要创建一个32B容量规格的内存页,以使得32B容量规格的空闲内存块的数量可以满足存储该目标数据的存储需求。
S602,依据该目标内存块组合中各种容量规格以及每种容量规格的内存块的数量,确定能够用于存储该目标数据的至少一个目标内存页,并将该目标数据存储到该目标内存页的至少一个目标内存块中,以通过多个目标内存块存储该目标数据。
其中,目标内存页中内存块的容量规格属于该目标内存块组合中的容量规格,且目标内存页中至少存在一个空闲的内存块。
如,假设目标内存块组合为2个32B的内存块以及1个64B的内存块,则可以从内存已创建的内存页中查找一个容量规格为32B的内存页,且该容量规格为32B的内存页中需要至少有两个空闲的内存块,以满足目标内存块组合对于2个32B的内存块的需求;或者是,查找出两个容量规格为32B的内存页,且每个容量规格为32B的内存页中至少有一个空闲的内存块。相应的,还需要查找出一个容量规格为64的内存页,该容量规格为64B的内存页中也需要至少有一个空闲的内存块。
相应的,可以将目标数据存储到容量规格为32B的一个或者两个内存页中,以使得目标数据被存储到两个32B的内存块中,同时,将目标数据剩余未被存储的数据存储到容量规格为64B的内存页的一个空闲内存块中。
可以理解的是,在极端情况中,如果内存中剩余存储空间不足,有可能出现以下情况:内存中未创建有该目标内存块组合中某种容量规格的内存页,或者内存中已创建的该某种容量规格的内存页中不存在空闲内存块,但是内存中不存在空闲存储区域,使得无法在内存中划分出部分存储区域作为该种容量规格的内存页。在该种情况下,可以从该至少一种内存块组合中,确定当前该目标内存块组合之外,总容量最小的内存块组合,并将确定出的内存块组合作为最新的目标内存块组合。然后,将最新确定出的目标内存块组合的总容量与该目标容量规格所表征的容量进行比较,如果最新确定出的目标内存块组合的总容量偏小,则将目标数据存储到该最新确定出的目标内存块组合对应的多个内存块中。
其中,将目标数据存储到该最新确定出的目标内存块组合对应的多个内存块中的过程可以参见前面步骤S305以及图6实施例的相关介绍,在此不再赘述。
与图6类似,在需要将目标数据存储到目标容量规格的内存块的情况中,同样可以检测内存中是否已创建有该目标容量规格的内存页,如果尚未创建,或者已创建的该目标容量规格的内存页中不存在空闲内存块,则需要先在内存的空闲存储区域创建该目标容量规格的内存页。具体的,可以参见图7,其示出了将目标数据存储到内存中具有该目标容量规格的内存块的一种实现流程示意图,该过程包括:
S701,当内存中未创建该目标容量规格的内存页,或者该目标容量规格的内存页中不存在空闲内存块时,在该内存的空闲存储区域构建具有该目标容量规格的内存页。
其中,目标容量规格的内存页中包括多个具有该目标容量规格的内存块。
该步骤S701与前面创建一种容量规格的内存页的过程相似,具体可以参见前面的相关介绍,在此不再赘述。
当然,如果内存中具有该目标容量规格的内存页,且该内存页中该具有空闲的该目标容量规格的内存块,则无需执行该步骤S701。
S702,确定内存中具有该目标容量规格且具有空闲内存块的待存储内存页。
其中,为了便于区分,将内存中具有该目标容量规格且具有空闲内存块的内存页称为待存储内存页,该待存储内存页为用于存储目标数据的内存页。
特别的,满足具有该目标容量规格且具有空闲内存块的内存页有多个时,可以随机选取一个内存页作为该待存储内存页,或者仅仅选取地址靠前的内存页作为待存储内存页。
S703,将该目标数据存储到该待存储内存页中空闲的目标内存块中。
如,选取待存储内存页中地址靠前的内存块作为目标内存块,并将该目标数据存储到该目标内存块中。
可以理解的是,与图6实施例类似,如果内存中剩余存储空间不足,有可能出现以下情况:内存中未创建有该目标容量规格的内存页,或者已创建的该目标容量规格的内存页中不存在空闲内存块,但是内存中不存在空闲存储区域来划分该目标容量规格的内存页。在该种情况下,可以从设定的内存块的多种容量规格中,选取表征的容量大于该目标容量规格且表征的容量最小的容量规格,并将选取的容量规格作为目标容量规格。如,按照容量规格从小到大的顺序,选取出表征的容量大于该目标数据且排序处于第二位的容量规格作为目标容量规格。
相应的,比较该新确定的目标容量规格所表征的容量与该目标内存块组合的总容量之间的大小关系,并根据比较结果采用该目标容量规格的内存块存储该目标数据,或者采用目标内存块组合存储该目标数据。该过程可以参见前面步骤S305、S306、图6和图7的相关介绍,在此不再赘述。
可以理解的是,在本申请实施例中,由于可以采用多个内存块组合到一起存储一份目标数据,因此可以有效利用多个内存块来共同存储较大的数据,可以减少由于内存中存在较多小容量规格的内存块,但是数据量较大的数据无法存储到内存中的情况,即减少俗称的大数据无法“装箱”的现象。
如,参见图8,在图8中以内存中创建有4个内存页801为例,其中,容量规格为32B的内存页及容量规格为64B的内存页中存在空闲内存块802,但是,但是内存中不存在容量规格超过64B的空闲内存块,如图8中,容量规格为512B和1KB的内存页中均不存在空闲内存块。在该种情况下,而待存储的目标数据803为80B,则按照现有常规的存储方式,则无法向内存中存储该目标数据803,出现大数据无法“装箱”的情况。而在本申请实施例中,由于向内存中存储数据的过程中,采用了拼接多个内存块存储数据的方式,从而可以减少该种大数据无法“装箱”的情况。
可选的,为了进一步减少大数据无法装箱的情况,在本申请实施例中,如果内存中不存在空闲存储区域,且内存中已创建的内存页中也不存在容量规格表征的容量大于该目标数据的数量的内存块,则可以采用构建出的目标内存块组合来存储该目标数据,以减少内存中存储空闲的内存块却无法存储待存储的目标数据的情况。
可以理解的是,在本申请实施例中,在将目标数据存储到目标内存块组合对应的多个目标内存块的情况中,由于目标内存块有可能并不是同一个内存页中连续的内存块,而且很容易出现跨内存页存储的情况。
为了后续能够便捷的从内存中定位出存储该目标数据的多个内存块,并从该多个内存块中读取出该目标数据,在将目标数据存储到该目标内存块组合对应的多个目标内存块之后,还可以按照该目标数据依次在该多个目标内存块中的存储先后顺序,确定该多个目标内存块之间的索引关系。相应的,在该目标内存块中可以存储该索引关系。
其中,该索引关系用于指示多个目标内存块中存储该目标数据的存储先后顺序。通过该索引关系可以定位出存储该目标数据的多个目标内存块。
如,在一种可能的情况下,该多个目标内存块之间的索引关系可以为每个目标内存块对应的存储先后顺序位于该目标内存块之后的下一个目标内存块的索引地址。该索引地址可以包括:该目标内存块之后的下一个目标内存块所在的内存页的标识以及内存块的标识。
结合图9说明,假设向内存中存储的目标数据的数据量为600B,则目标内存块组合包括1个32B的内存块、1个64B的内存块和1个512B的内存块。如图9所示,最终选取32B的内存页中从上到下的第一个32B的内存块901,64B的内存页中从上到下的第二个64B的内存块902以及512B的内存页中从上到下的第二个512B的内存块903来存储该目标数据。
同时,图9中箭头方向示出了操作系统向选取出的这三个内存块中存储目标数据的存储先后顺序,即先向32B的内存页中第一个32B的内存块901中存储该目标数据,然后向64B的内存页中第二个64B的内存块902中存储剩余的目标数据,最后将目标数据中仍未被存储的数据存储到该512B的内存页中的第二个512B的内存块903中。
结合图9可知,按照箭头指示的存储先后顺序,32B的内存页中第一个32B的内存块901之后的下一个目标内存块为64B的内存页中第二个64B的内存块902,而64B的内存页中第二个64B的内存块902对应的下一个目标内存块为该512B的内存页中的第二个512B的内存块903中。相应的,可以在32B的内存页中第一个32B的内存块中存储该64B的内存页的页标识以及该第二个64B的内存块的块标识;同时,在64B的内存页中第二个64B的内存块中存储该512B的内存页的页标识以及该第二个512B的内存块的块标识。
可见,根据目标内存块中存储的下一个目标内存块的索引地址,便可以从内存中定位出该下一个目标内存块,相应的,在读取该目标数据时,在获取到该目标数据的起始存储地址之后,基于起始存储地址可以定位到存储该目标数据的第一个内存块,而基于第二个内存块中存储的索引地址,可以定位出所述该目标数据的第二个内存块,依此类推,直至定位出所有存储该目标数据的内存块,并依次从各个内存块中取出该目标数据。
又如,在另一种可能的实现方式中,索引关系可以包括该存储该目标数据的多个目标内存块的地址,如,目标数据依次存储到3个内存块中,则索引关系可以包括该3个内存块的索引地址,且这3个内存块的索引地址的先后顺序与存储先后顺序一致。
需要说明的是,内存块中用于存储索引关系的存储区域不属于内存中存储数据的存储区域,也就是内存块中预留了用户存储索引关系的区域。
可以理解的是,在存储目标数据之后,有可能会出现针对该目标数据新增的新增数据,也就是俗称的追加数据。如,假设待存储到内存中的目标数据为一份用户A的通讯信息,在该用户A的通讯信息中包括用户A的电话号码,而当需要向该用户A的通讯信息中增加用户A的邮箱时,则该用户A的邮箱就是用户A的通讯信息的新增数据。
当存在向内存中存储该目标数据的新增数据的情况下,如果按照现有常规的方法,一般会基于该目标数据以及该新增数据的总数据量,从内存中确定容量不小于该总数据量的内存块,并将目标数据迁移到确定出的内存块中,并将该新增数据也存储到该内存块中。但是现有的该种方式同样会导致内存中内存碎片较多,且每个目标数据存在新增数据时,都需要将目标数据从一个内存块中全部拷贝到另一个内存块,使得产生较多内存拷贝且内存拷贝的数据量较多。
为了在内存中已存储的目标数据存在新增数据时,减少内存拷贝,在本申请实施例中,还提出了可以从内存中选取至少一个内存块与当前存储该目标数据的内存块进行拼接,以选取出的该至少一个内存块以及当前存储该目标数据的内存块来共同存储该目标数据以及该新增数据。如,参见图10,其示出了向内存中存储针对已存储的目标数据的新增数据的一种存储流程示意图,该流程包括:
S1001,当存在针对内存中已存储的目标数据的新增数据时,确定内存中存储该目标数据的至少一个目标内存块各自的容量规格,以及该目标数据与该新增数据的总数据量。
如,内存中通过一个目标内存块1存储该目标数据,则需要确定该目标内存块1的容量规格。
又如,内存中通过目标内存块1和目标内存块2存储该目标数据,则需要确定该目标内存块1的容量规格,以及该目标内存块2的容量规格。
S1002,基于该总数据量,从设定的内存块的多种容量规格中,确定能够容纳该目标数据和该新增数据且剩余空间最小的内存块所具有的最小容量规格。
该步骤与前面步骤S302相似,为了便于区分,将能够容纳目标数据以及该新增数据且剩余空间最小的内存块所具有的容量规格称为最小容量规格。
如,假设设定的容量规格有32B、64B、128B、2KB和32KB这五种,假设目标数据的数据量为60B,新增数据有20B,则总数据量为80B,而这五种容量规格中,表征的容量大于80B且存储该目标数据和新增数据之后剩余存储空间最小的内存块所具有的容量规格为128B,则最小容量规格为128B。
S1003,基于该总数据量以及该至少一个目标内存块各自的容量规格,从设定的内存块的多种容量规格中,确定能够与该至少一个目标内存块拼接的至少一个拼接内存块组。
其中,该拼接内存块组包括至少一种容量规格的内存块以及每种容量规格的内存块的数量。且,该拼接内存块组中各种容量规格的所有内存块与该至少一个目标内存块所构成的总容量大于该总数据量。
如,拼接内存块组包括1个容量为32B的内存块以及1个容量为128B的内存块,而当前存储目标数据的内存块为一个512B的目标内存块,则该目标内存块与该拼接内存块组所构成的总容量为32B+128B+512B=672B。
可见,该拼接内存块组的含义与前面内存块组合的意义相似,不同之处在于,该拼接内存块组可以包括一个内存块,也可以是多个内存块。另外,后续需要利用该至少一个目标内存块以及该拼接内存块组对应的多个内存块来共同存储目标数据以及该新增数据。
S1004,从该至少一个拼接内存块组中,确定与该至少一个目标内存块构成的总容量最小的目标拼接内存块组。
可以理解的是,与该至少一个目标内存块构成的总容量最小的目标拼接内存块组实际上也就是,该至少一个拼接内存组中总容量最小的拼接内存组。
S1005,当该目标拼接内存块组与该至少一个目标内存块构成的总容量小于该最小容量规格所表征的容量时,将该新增数据存储到至少一个目标内存块的空闲存储区以及与该目标拼接内存块组中至少一种容量规格以及每种容量规格的内存块的数量相匹配的内存块中。
与前面步骤S305相似,如果相对于该最小容量规格所表征的容量,该目标拼接内存组与该至少一个目标内存块构成的总容量偏小,则说明利用该至少一个目标内存块以及该目标拼接内存组对应的至少一个内存块来存储目标数据和新增数据所产生的内存碎片较少。在该种情况下,则可以将新增数据存储到该至少一个目标内存块剩余的空闲区域,并将该新增数据中无法被该至少一个目标数据块中剩余的空闲区域存储的剩余数据存储到该目标拼接内存块组对应的至少一个内存块中。
如,假设目标数据的数据量为60B,新增数据有20B,则总数据量为80B,假设内存中存储该目标数据的内存块为1个容量规格为64B的目标内存块,同时,假设拼接内存块组为1个容量规格为32B的内存块,则可以将新增数据中的前4B数据存储到该目标内存块剩余的4B存储空间;同时,从内存中确定粗和一个32B的内存块,并将该新增数据剩余的16B存储到该32B的内存块中。
S1006,当该目标拼接内存块组与该至少一个目标内存块构成的总容量不小于该最小容量规格所表征的容量时,将该目标数据迁移到该最小容量规格的内存块中,并将该新增数据存储到该最小容量规格的内存块中。
可见,当采用该最小容量规格的内存块存储该目标数据和新增数据所产生的内存碎片较少时,才会从内存中确定出一个该最小容量规格的内存块,并将目标数据迁移到确定出的内存块中,同时将新增数据也存储到该确定出的内存块中。
又一方面,本申请还提供了一种数据存储装置。如图11,其示出了本申请一种数据存储装置一个实施例的组成结构示意图,该数据存储装置可以应用于计算机设备,该装置可以包括:
数据获取单元1101,用于获取待向内存中存储的目标数据以及所述目标数据的数据量;
块容量确定单元1102,用于根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
块组合拼接单元1103,用于依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
块组合确定单元1104,用于从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
第一存储单元1105,用于当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
作为一种可选方式,本申请的数据存储装置还可以包括:
第二存储单元1106,用于当所述内存块组合的总容量不小于所述目标容量规格所表征的容量时,将所述目标数据存储到所述内存中具有所述目标容量规格的目标内存块中。
可选的,所述第一存储单元,包括:
第一页构建子单元,用于当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,针对所述目标内存块组合对应的每种容量规格,如果所述内存中未创建有所述容量规格的内存页,或者所述容量规格的内存页中空闲内存块的数量小于所述目标内存块组合中所述容量规格的内存块的数量,在所述内存的空闲存储区域构建具有所述容量规格的内存页,所述容量规格的内存页中包括多个具有所述容量规格的内存块;
第一存储子单元,用于依据所述目标内存块组合中各种容量规格以及每种容量规格的内存块的数量,确定能够用于存储所述目标数据的至少一个目标内存页,并将所述目标数据存储到所述目标内存页的至少一个目标内存块中,以通过多个目标内存块存储所述目标数据。
可选的,所述第一存储单元,包括:
第二页创建子单元,用于当所述内存块组合的总容量不小于所述目标容量规格所表征的容量时,如果内存中未创建所述目标容量规格的内存页,或者所述目标容量规格的内存页中不存在空闲内存块,在所述内存的空闲存储区域构建具有所述目标容量规格的内存页,所述目标容量规格的内存页中包括多个具有所述目标容量规格的内存块;
页确定子单元,用于确定具有所述目标容量规格且具有空闲内存块的待存储内存页;
第二存储子单元,用于将所述目标数据存储到所述待存储内存页中空闲的目标内存块中。
可选的,所述块组合拼装单元,包括:
规格筛选子单元,用于从设定的内存块的多种容量规格中,确定表征的容量小于所述目标容量规格表征的容量的至少一种候选容量规格;
块组合子单元,用于依据所述至少一种候选容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,所述内存块组合包括:至少一种候选容量规格的内存块以及每种候选容量规格的内存块的数量。
可选的,本申请实施例以上任意一个装置的实施例中,还可以包括:
索引确定单元,用于按照所述目标数据依次在所述多个目标内存块中的存储先后顺序,确定所述多个目标内存块之间的索引关系,所述索引关系用于指示多个目标内存块中存储所述目标数据的存储先后顺序;
索引存储单元,用于在所述目标内存块中存储所述索引关系。
在一种可能的实现方式中,在本申请以上任意一个装置的实施例中,该数据存储装置还可以包括:
新增数据获取单元,用于在所述第一存储单元存储所述目标数据之后,当存在所述目标数据的新增数据时,确定存储所述目标数据的至少一个目标内存块各自的容量规格以及所述目标数据与所述新增数据的总数据量;
最小容量确定单元,用于基于所述总数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据和所述新增数据且剩余空间最小的内存块所具有的最小容量规格;
拼接组构建单元,用于基于所述总数据量以及所述至少一个目标内存块各自的容量规格,从设定的内存块的多种容量规格中,确定能够与所述至少一个目标内存块拼接的至少一个拼接内存块组,所述拼接内存块组包括至少一种容量规格的内存块以及每种容量规格的内存块的数量,且所述拼接内存块组中各种容量规格的所有内存块与所述至少一个目标内存块所构成的总容量大于所述总数据量;
拼接组确定单元,用于从所述至少一个拼接内存块组中,确定与所述至少一个目标内存块构成的总容量最小的目标拼接内存块组;
第三存储单元,用于当所述目标拼接内存块组与所述至少一个目标内存块构成的总容量小于所述最小容量规格所表征的容量时,将所述新增数据存储到至少一个目标内存块的空闲存储区以及与所述目标拼接内存块组中至少一种容量规格以及每种容量规格的内存块的数量相匹配的内存块中;
第四存储单元,用于当所述目标拼接内存块组与所述至少一个目标内存块构成的总容量不小于所述最小容量规格所表征的容量时,将所述目标数据迁移到所述最小容量规格的内存块中,并将所述新增数据存储到所述最小容量规格的内存块中。
另一方面,本申请还提供了一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上任意一个实施例的数据存储方法。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件单元,或者二者的结合来实施。软件单元可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据存储方法,其特征在于,包括:
获取待向内存中存储的目标数据以及所述目标数据的数据量;
根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
2.根据权利要求1所述的数据存储方法,其特征在于,还包括:
当所述内存块组合的总容量不小于所述目标容量规格所表征的容量时,将所述目标数据存储到所述内存中具有所述目标容量规格的目标内存块中。
3.根据权利要求1所述的数据存储方法,其特征在于,所述将所述目标数据存储到与所述目标内存块组合对应的至少一种容量规格以及每种容量规格的内存块的数量相匹配的多个目标内存块中,包括:
针对所述目标内存块组合对应的每种容量规格,当所述内存中未创建有所述容量规格的内存页,或者所述容量规格的内存页中空闲内存块的数量小于所述目标内存块组合中所述容量规格的内存块的数量时,在所述内存的空闲存储区域构建具有所述容量规格的内存页,所述容量规格的内存页中包括多个具有所述容量规格的内存块;
依据所述目标内存块组合中各种容量规格以及每种容量规格的内存块的数量,确定能够用于存储所述目标数据的至少一个目标内存页,并将所述目标数据存储到所述目标内存页的至少一个目标内存块中,以通过多个目标内存块存储所述目标数据。
4.根据权利要求2所述的数据存储方法,其特征在于,所述将所述目标数据存储到所述内存中具有所述目标容量规格的内存块中,包括:
当内存中未创建所述目标容量规格的内存页,或者所述目标容量规格的内存页中不存在空闲内存块时,在所述内存的空闲存储区域构建具有所述目标容量规格的内存页,所述目标容量规格的内存页中包括多个具有所述目标容量规格的内存块;
确定具有所述目标容量规格且具有空闲内存块的待存储内存页;
将所述目标数据存储到所述待存储内存页中空闲的目标内存块中。
5.根据权利要求1或3所述的数据存储方法,其特征在于,还包括:
按照所述目标数据依次在所述多个目标内存块中的存储先后顺序,确定所述多个目标内存块之间的索引关系,所述索引关系用于指示多个目标内存块中存储所述目标数据的存储先后顺序;
在所述目标内存块中存储所述索引关系。
6.根据权利要求1至4任一项所述的数据存储方法,其特征在于,在存储所述目标数据之后,还包括:
当存在所述目标数据的新增数据时,确定存储所述目标数据的至少一个目标内存块各自的容量规格以及所述目标数据与所述新增数据的总数据量;
基于所述总数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据和所述新增数据且剩余空间最小的内存块所具有的最小容量规格;
基于所述总数据量以及所述至少一个目标内存块各自的容量规格,从设定的内存块的多种容量规格中,确定能够与所述至少一个目标内存块拼接的至少一个拼接内存块组,所述拼接内存块组包括至少一种容量规格的内存块以及每种容量规格的内存块的数量,且所述拼接内存块组中各种容量规格的所有内存块与所述至少一个目标内存块所构成的总容量大于所述总数据量;
从所述至少一个拼接内存块组中,确定与所述至少一个目标内存块构成的总容量最小的目标拼接内存块组;
当所述目标拼接内存块组与所述至少一个目标内存块构成的总容量小于所述最小容量规格所表征的容量时,将所述新增数据存储到至少一个目标内存块的空闲存储区以及与所述目标拼接内存块组中至少一种容量规格以及每种容量规格的内存块的数量相匹配的内存块中;
当所述目标拼接内存块组与所述至少一个目标内存块构成的总容量不小于所述最小容量规格所表征的容量时,将所述目标数据迁移到所述最小容量规格的内存块中,并将所述新增数据存储到所述最小容量规格的内存块中。
7.根据权利要求1至4任一项所述的数据存储方法,其特征在于,所述依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,包括:
从设定的内存块的多种容量规格中,确定表征的容量小于所述目标容量规格表征的容量的至少一种候选容量规格;
依据所述至少一种候选容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,所述内存块组合包括:至少一种候选容量规格的内存块以及每种候选容量规格的内存块的数量。
8.一种数据存储装置,其特征在于,包括:
数据获取单元,用于获取待向内存中存储的目标数据以及所述目标数据的数据量;
块容量确定单元,用于根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
块组合拼接单元,用于依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
块组合确定单元,用于从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
第一存储单元,用于当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
9.根据权利要求8所述的数据存储装置,其特征在于,还包括:
第二存储单元,用于当所述内存块组合的总容量不小于所述目标容量规格所表征的容量时,将所述目标数据存储到所述内存中具有所述目标容量规格的目标内存块中。
10.一种计算机设备,其特征在于,包括:
处理器和存储器;
其中,所述处理器用于执行所述存储器中存储的程序;
所述存储器用于存储程序,所述程序至少用于:
获取待向内存中存储的目标数据以及所述目标数据的数据量;
根据所述目标数据的数据量,从设定的内存块的多种容量规格中,确定能够容纳所述目标数据且剩余空间最小的内存块所具有的目标容量规格,内存块的容量规格表征内存块的容量大小;
依据设定的内存块的多种容量规格,构建总容量不小于所述目标数据的数据量的至少一种内存块组合,内存块组合包括:至少一种容量规格的内存块以及每种容量规格的内存块的数量,且内存块组合中内存块的总数量为多个,内存块组合的总容量为该内存块组合中各内存块的容量规格表征的容量之和;
从所述至少一种内存块组合中,确定总容量最小的目标内存块组合;
当所述目标内存块组合的总容量小于所述目标容量规格所表征的容量时,将所述目标数据存储到与所述目标内存块组合中至少一种容量规格以及每种容量规格的内存块的数量匹配的多个目标内存块中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810943032.3A CN109117273B (zh) | 2018-08-17 | 2018-08-17 | 数据存储方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810943032.3A CN109117273B (zh) | 2018-08-17 | 2018-08-17 | 数据存储方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109117273A true CN109117273A (zh) | 2019-01-01 |
CN109117273B CN109117273B (zh) | 2021-09-07 |
Family
ID=64852398
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810943032.3A Active CN109117273B (zh) | 2018-08-17 | 2018-08-17 | 数据存储方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109117273B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977035A (zh) * | 2019-03-18 | 2019-07-05 | 新华三技术有限公司成都分公司 | 磁盘空间分配方法、装置、存储设备及存储介质 |
CN110333953A (zh) * | 2019-07-11 | 2019-10-15 | 中国工商银行股份有限公司 | 数据存储资源调度方法及装置 |
CN111190626A (zh) * | 2019-12-30 | 2020-05-22 | 无锡小天鹅电器有限公司 | 家用电器的控制方法、控制装置及家用电器 |
CN113688062A (zh) * | 2020-05-18 | 2021-11-23 | 北京市商汤科技开发有限公司 | 用于存储数据的方法和相关产品 |
WO2022002020A1 (zh) * | 2020-06-29 | 2022-01-06 | 北京一流科技有限公司 | 静态网络中的数据传输系统及其方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093455A (zh) * | 2006-06-21 | 2007-12-26 | 中兴通讯股份有限公司 | 一种嵌入式操作系统的内存池分配方法 |
CN102446139A (zh) * | 2011-11-14 | 2012-05-09 | 奇智软件(北京)有限公司 | 一种数据存储方法及装置 |
CN104252415A (zh) * | 2013-06-28 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 一种重新分布数据的方法和系统 |
CN104778125A (zh) * | 2015-04-03 | 2015-07-15 | 无锡天脉聚源传媒科技有限公司 | 一种内存管理方法及系统 |
CN106250239A (zh) * | 2016-07-26 | 2016-12-21 | 汉柏科技有限公司 | 一种网络设备中内存缓存cache的使用方法及装置 |
CN106844050A (zh) * | 2017-01-19 | 2017-06-13 | 郑州云海信息技术有限公司 | 一种内存分配方法及装置 |
US20180088640A1 (en) * | 2015-06-25 | 2018-03-29 | International Business Machines Corporation | Affinity aware parallel zeroing of memory in non-uniform memory access (numa) servers |
CN108334288A (zh) * | 2017-11-29 | 2018-07-27 | 成都野望数码科技有限公司 | 数据存储方法和装置 |
-
2018
- 2018-08-17 CN CN201810943032.3A patent/CN109117273B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093455A (zh) * | 2006-06-21 | 2007-12-26 | 中兴通讯股份有限公司 | 一种嵌入式操作系统的内存池分配方法 |
CN102446139A (zh) * | 2011-11-14 | 2012-05-09 | 奇智软件(北京)有限公司 | 一种数据存储方法及装置 |
CN104252415A (zh) * | 2013-06-28 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 一种重新分布数据的方法和系统 |
CN104778125A (zh) * | 2015-04-03 | 2015-07-15 | 无锡天脉聚源传媒科技有限公司 | 一种内存管理方法及系统 |
US20180088640A1 (en) * | 2015-06-25 | 2018-03-29 | International Business Machines Corporation | Affinity aware parallel zeroing of memory in non-uniform memory access (numa) servers |
CN106250239A (zh) * | 2016-07-26 | 2016-12-21 | 汉柏科技有限公司 | 一种网络设备中内存缓存cache的使用方法及装置 |
CN106844050A (zh) * | 2017-01-19 | 2017-06-13 | 郑州云海信息技术有限公司 | 一种内存分配方法及装置 |
CN108334288A (zh) * | 2017-11-29 | 2018-07-27 | 成都野望数码科技有限公司 | 数据存储方法和装置 |
Non-Patent Citations (2)
Title |
---|
ZHANG JIAWEN等: "An Improved Memory Management Method of uC/OS-II", 《IEEE》 * |
高菲菲: "实时系统内存管理方案的设计与实现", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977035A (zh) * | 2019-03-18 | 2019-07-05 | 新华三技术有限公司成都分公司 | 磁盘空间分配方法、装置、存储设备及存储介质 |
CN110333953A (zh) * | 2019-07-11 | 2019-10-15 | 中国工商银行股份有限公司 | 数据存储资源调度方法及装置 |
CN111190626A (zh) * | 2019-12-30 | 2020-05-22 | 无锡小天鹅电器有限公司 | 家用电器的控制方法、控制装置及家用电器 |
CN113688062A (zh) * | 2020-05-18 | 2021-11-23 | 北京市商汤科技开发有限公司 | 用于存储数据的方法和相关产品 |
WO2021232769A1 (zh) * | 2020-05-18 | 2021-11-25 | 北京市商汤科技开发有限公司 | 一种存储数据的方法及数据处理装置 |
JP2022537007A (ja) * | 2020-05-18 | 2022-08-23 | 北京市商▲湯▼科技▲開▼▲發▼有限公司 | データ記憶 |
TWI779438B (zh) * | 2020-05-18 | 2022-10-01 | 大陸商北京市商湯科技開發有限公司 | 數據儲存方法、電子設備及儲存媒體 |
JP7164733B2 (ja) | 2020-05-18 | 2022-11-01 | 北京市商▲湯▼科技▲開▼▲發▼有限公司 | データ記憶 |
WO2022002020A1 (zh) * | 2020-06-29 | 2022-01-06 | 北京一流科技有限公司 | 静态网络中的数据传输系统及其方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109117273B (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109117273A (zh) | 数据存储方法、装置及设备 | |
US11243911B2 (en) | Method and apparatus for fault-tolerant memory management | |
KR100862584B1 (ko) | 기억장치 | |
JP2006221636A (ja) | Run単位アドレスマッピングテーブル及びそれの構成方法 | |
CN106776368A (zh) | 一种数据读取时的缓存管理方法、装置及系统 | |
US20070100919A1 (en) | Garbage collection unit and method thereof | |
JP2008130088A (ja) | 不揮発性メモリ管理方法及び装置 | |
EP1548600A1 (en) | Data management device and method for flash memory | |
CN103425435B (zh) | 磁盘存储方法及磁盘存储系统 | |
CN109240607B (zh) | 一种文件读取方法和装置 | |
US20150120992A1 (en) | Non-volatile memory device, non-volatile memory control device, and non-volatile memory control method | |
TW480395B (en) | Record regenerating device | |
CN109558456A (zh) | 一种文件迁移方法、装置、设备及可读存储介质 | |
CN111176896A (zh) | 文件备份方法、装置及终端设备 | |
CN107479834A (zh) | 一种基于cos的文件存储方法及装置 | |
CN117492661A (zh) | 数据写入方法、介质、装置和计算设备 | |
CN115964002B (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
US9507794B2 (en) | Method and apparatus for distributed processing of file | |
US20120198196A1 (en) | Nonvolatile memory system and block management method | |
TWI254205B (en) | Bidirectional data storing method | |
EP4134802A1 (en) | Method and apparatus for data access of nand flash file, and storage medium | |
US8782353B2 (en) | Information processing device having data field and operation methods of the same | |
US20130218851A1 (en) | Storage system, data management device, method and program | |
CN111427508B (zh) | 一种文件均衡分布方法及装置 | |
CN109471813A (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 |