CN113934362A - 数据存储方法、装置、计算机设备和存储介质 - Google Patents
数据存储方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113934362A CN113934362A CN202010676941.2A CN202010676941A CN113934362A CN 113934362 A CN113934362 A CN 113934362A CN 202010676941 A CN202010676941 A CN 202010676941A CN 113934362 A CN113934362 A CN 113934362A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- file
- memory block
- written back
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据存储方法、装置、计算机设备和存储介质。所述方法包括:获取内存块的内存占用量;当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;获取所述待回写数据对应的校验数据;将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。采用本方法能够能够即时地将待回写数据写入文件中,由此提高了写入文件中的回写数据的完整性,从而能够有效降低数据回写过程中的损坏率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据存储方法、装置、计算机设备和存储介质。
背景技术
随着互联网技术的迅速发展,可通过各种应用程序和操作***等对大量数据进行处理,以实现各种功能。在数据处理中,经常会涉及到对内存和磁盘文件等的I/O操作,即读操作和/或写操作。
目前的方式中,通常是先将数据写到内存中进行缓存后,再回写到磁盘文件,以提高数据读写性能。然而,这种方式通常由操作***确定何时回写内存映射文件中的数据,数据回写可能不及时。若发生设备断电、设备重启等情形时,可能会造成文件损坏或数据丢失。
发明内容
基于此,有必要针对上述技术问题,提供一种数据存储方法、装置、计算机设备和存储介质,能够即时有效地将待回写数据写入文件中,由此提高了写入文件中的回写数据的完整性,从而能够有效降低数据回写过程中的损坏率。
一种数据存储方法,所述方法包括:
获取内存块的内存占用量;
当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;
获取所述待回写数据对应的校验数据;
将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;
其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。
一种数据存储装置,所述装置包括:
数据获取模块,用于获取内存块的内存占用量;
数据重整模块,用于当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;
所述数据获取模块还用于获取所述待回写数据对应的校验数据;
数据回写模块,用于将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。
在其中一个实施例中,所述数据获取模块还用于当应用程序向内存块写入数据时,获取所述应用程序触发的数据写入请求;所述数据写入请求用于请求基于内存映射文件向所述内存块中写入数据;根据所述数据写入请求,解析所述内存映射文件,获得所述内存块的内存占用量。
在其中一个实施例中,所述内存块中的内存数据包括键值对,所述键值对包括关键字和对应的值;所述数据重整模块还用于基于所述内存块中键值对的关键字,对所述内存块中的键值对进行去重处理,获得所述内存块中的有效数据;将所述有效数据确定为所述内存块中的待回写数据。
在其中一个实施例中,所述数据重整模块还用于获取所述内存块中内存数据的操作记录;根据所述操作记录,从所述内存数据中筛选出所述内存块中键值对的关键字所对应的值在经过操作后的最新值;将所述关键字和对应的最新值确定为所述内存块中的有效数据。
在其中一个实施例中,所述数据获取模块还用于确定所述待回写数据对应的内存占用数值;对所述待回写数据进行编码,获得所述待回写数据对应的校验码;基于所述内存占用数值和所述校验码,生成所述待回写数据对应的校验数据。
在其中一个实施例中,所述数据回写模块还用于将所述校验数据成功写入目标文件的文件头后,即时调用用于将内存数据与文件数据进行同步的***函数;基于所述内存块中的待回写数据,确定所述***函数对应的函数参数;通过所述***函数和对应的函数参数,对所述内存块中的待回写数据进行同步操作,以将所述待回写数据回写至所述目标文件。
在其中一个实施例中,所述数据回写模块还用于基于内存映射文件,确定所述内存块中的待回写数据的数据序列和映射区域;通过所述***函数和对应的函数参数,将所述待回写数据按照所述数据序列,同步至所述目标文件中与所述映射区域对应的存储位置。
在其中一个实施例中,所述数据存储装置还包括数据缓存模块,用于当应用程序从目标文件读取数据时,获取所述应用程序触发的数据读取请求;根据所述数据读取请求,基于内存映射文件将所述目标文件中与所述数据读取请求对应的文件数据缓存至所述内存块。
在其中一个实施例中,所述数据存储装置还包括数据写入模块,用于通过键值对存储组件,获得所述内存映射文件的写锁;基于所述内存映射文件的写锁,向所述内存块中写入文件数据,并在所述文件数据写入结束时释放所述写锁。
在其中一个实施例中,所述键值对存储组件为基于内存映射的跨进程存储组件,用于同时访问所运行的各进程对应的键值对,以对所访问的键值对进行读取处理。
在其中一个实施例中,所述数据存储装置还包括数据读取模块,用于当应用程序再次从目标文件读取数据时,获取所述应用程序触发的数据读取请求;根据所述数据读取请求确定待访问数据,并从所述目标文件的文件头中获取待访问数据对应的校验数据;基于所述校验数据,对所述待访问数据进行数据完整性校验;当所述数据完整性校验通过后,将所述目标文件中的待访问数据缓存至所述内存块,并从所述内存块中读取所述待访问数据。
在其中一个实施例中,所述数据读取模块还用于通过数据存储组件,读取所述目标文件中待访问数据对应的键值对;按照所述内存块的内存序列,将所述待访问数据对应的键值对缓存至所述内存块的哈希表中;基于所述数据读取请求,从所述内存块的哈希表中读取与所述待访问数据对应的键值对。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取内存块的内存占用量;
当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;
获取所述待回写数据对应的校验数据;
将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;
其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取内存块的内存占用量;
当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;
获取所述待回写数据对应的校验数据;
将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;
其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。
上述数据存储方法、装置、计算机设备和存储介质,当应用程序需要向内存中写入数据时,获取内存块的内存占用量;当内存块的内存占用量达到内存阈值时,则对内存块进行数据重整,以确定内存块中的待回写数据并确定待回写数据对应的校验数据。进一步将校验数据写入目标文件的文件头,用于在读取目标文件中数据时进行数据完整性校验,以保证数据的完整性。通过即时调用用于将内存数据与文件数据进行同步的***函数,从而能够即时有效地将待回写数据写入文件中,由此提高了写入文件中的回写数据的完整性,进而能够有效降低数据在回写过程中的损坏率和丢失率。
附图说明
图1为一个实施例中数据存储方法的应用环境图;
图2为一个实施例中数据存储方法的流程示意图;
图3为一个实施例中对内存块中存储键值的示意图;
图4为另一个实施例中数据存储方法的流程示意图;
图5为一个实施例中读取数据的步骤的流程示意图;
图6为一个具体的实施例中数据存储方法的流程示意图;
图7为一个实施例中数据存储装置的结构框图;
图8为另一个实施例中数据存储装置的结构框图;
图9为又一个实施例中数据存储装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据存储方法,可以应用于如图1所示的应用环境中。其中,图1中的应用环境为基于计算机设备中的运行环境。计算机设备中包括磁盘和内存,磁盘中包括磁盘文件对应的数据存储结构,内存中包括基于内存映射的内存块。当应用程序需要向内存中写入数据时,操作***获取内存块的内存占用量;当内存块的内存占用量达到内存阈值时,操作***则对内存块进行数据重整,以确定内存块中的待回写数据并确定待回写数据对应的校验数据。操作***进一步将校验数据写入目标文件的文件头,以保证数据的完整性。通过即时调用用于将内存数据与文件数据进行同步的***函数,从而即时地将待回写数据回写至目标文件中。其中,计算机设备可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。
在一个实施例中,如图2所示,提供了一种数据存储方法,以该方法应用于计算机设备为例进行说明,包括以下步骤:
S202,获取内存块的内存占用量。
其中,内存是计算机中重要的部件之一,也被称为内存储器和主存储器,是外存与CPU(Central Processing Unit,中央处理器)进行沟通的桥梁。内存的运行也决定了计算机设备的稳定运行。内存块即内存中的内存空间。其中,内存占用量是指内存块中当前的已被占用的容量。
计算机设备中所有程序的运行都是在内存中进行的,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机设备在运行中,操作***就会把需要运算的数据从内存调到CPU中进行运算,当运算完成后CPU再将结果传送出来,计算机设备在运行应用程序的过程中,计算机设备的操作***会将需要的数据写入内存。具体地,计算机设备中运行的应用程序向操作***申请映射文件的内存空间,将所需要的数据写到映射好的内存空间中,应用程序负责向内存中写入数据,由操作***完成内存到文件的回写,以达到永久存储的效果。
计算机设备向内存块中写入数据时,首先获取内存块的内存占用量,以判断内存块的容量是否能够保证数据写入成功。
S204,当内存块的内存占用量达到内存阈值时,对内存块进行数据重整,以确定内存块中的待回写数据。
其中,回写是指更新多维数据集单元值、成员或成员属性值。操作***和平台上的应用程序在运行的时候需要往磁盘写入临时数据。在回写状态下,数据在要被从内存的高速缓存中清除时才写到磁盘上。随着主存读取的数据增加,需要从高速缓存中向磁盘文件回写数据,并把运行过程中更新的数据写入高速缓存中。待回写数据是指内存块中需要回写到磁盘文件的这部分数据。
例如,当内存块中不足写入新的数据时,确定内存块的内存占用量达到内存阈值。计算机设备则对内存块进行数据重整,以确定内存块中的待回写数据,从而使得内存块中有足够的空间写入新的内存数据。
具体地,计算机设备获取内存块的内存占用量后,当识别到内存块的内存占用量达到内存阈值时,表示此时需要对内存块中的数据进行回写,以腾出内存块中充足的内存空间用于写入新的数据。其中,计算机设备对内存块进行数据重整,进而根据重整后的数据,确定内存块中的待回写数据。其中,待回写数据可以是内存块中重整后的所有内存数据,也可以是指定的部分内存数据,例如可以根据数据容量或存储时间点指定需要回写的部分内存数据。
在其中一个实施例中,计算机设备对内存块中的内存数据进行数据重整后,内存块的内存占用量仍达到了内存阈值,表示内存块的内存空间仍然不够用。计算机设备则将内存块的内存容量扩大一倍,直到内存块的内存空间足够写入新的数据。
S206,获取待回写数据对应的校验数据。
其中,数据校验是为保证数据的完整性进行的一种验证操作。通常用一种指定的算法对原始数据计算出的一个校验值,接收方采用同样的算法计算一次校验值,如果两次计算得到的检验值相同,则表示数据是完整的。例如,数据校验可以包括奇偶校验、CRC(Cyclic Redundancy Check)循环冗余校验、MD5校验以及数据签名等校验方式。
待回写数据对应的校验数据则表示对待回写数据进行数据校验处理后,所获得的校验数据。其中,待回写数据中每一项待回写数据均分别包括对应的一项校验数据,以分别对每一项具体的数据进行数据完整性校验。
其中,待回写数据对应的校验数据,可以仅包括待回写数据的校验码。在另一种实施方式中,校验数据还可以待回写数据的内存大小和校验码。
具体地,计算机设备通过对待回写数据进行数据校验计算,从而可以获得待回写数据对应的校验码,并将计算获得的校验码作为待回写数据的校验数据。由此在后续对该部分待回写数据进行读取时,能够有效地对待回写数据进行数据完整性校验。
S208,将校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将待回写数据回写至目标文件;其中,文件头中的校验数据,用于在读取目标文件中数据时进行数据完整性校验。
其中,目标文件是指计算机设备中的磁盘文件,是组织、存储和命名文件数据的数据存储结构。在计算机***中存在一个相应的文件***,文件***是在硬盘上存储信息的格式,规定了计算机设备对文件进行操作处理的各种标准和机制。磁盘文件中的存储信息不会受断电等因素的影响。
磁盘中的文件通常以文件的形式进行存储,磁盘文件中通常包括文件头和块表结构。其中,块表结构中的数据总数由文件头中的数据指定,文件头中的数据定义了磁盘区块的对齐值,用于映射数据在文件中的存储位置,每一个区块从对齐值的倍数的偏移位置开始存放。
其中,用于将内存数据与文件数据进行同步的***函数,是指可以调用该函数实现磁盘文件内容与共享内存区中的内容一致,即实现内存中的内存数据与磁盘文件中的文件数据的同步操作。例如,该***函数可以为刷新变化函数,即msync()函数。
具体地,计算机设备获得待回写数据的校验数据后,首先将待回写数据对应的校验数据写入磁盘中目标文件的文件头。当校验数据成功写入目标文件的文件头后,计算机设备则立即调用用于将内存数据与文件数据进行同步的***函数,通过该***函数将内存块中的待回写数据同步至磁盘的目标文件中,从而能够即时有效地将待回写数据回写至目标文件。
进一步地,计算机设备将内存块中的待回写数据回写至磁盘的目标文件后,文件头中的校验数据用于在读取目标文件中数据时进行数据完整性校验。在具体地,计算机设备再次访问这部分数据时,首先读取文件头中这部分待访问数据对应的校验数据,通过对校验数据进行解析获得校验结果,校验结果能够判断需要获取的待访问数据的完整性。当确定待访问数据的校验结果为数据完整时,再从文件中读取相应的待访问数据,从而保证数据的完整性。
上述数据存储方法中,当计算机设备的应用程序需要向内存中写入数据时,获取内存块的内存占用量;当内存块的内存占用量达到内存阈值时,则对内存块进行数据重整,以确定内存块中的待回写数据并确定待回写数据对应的校验数据。计算机设备进一步将校验数据写入目标文件的文件头,用于在读取目标文件中数据时进行数据完整性校验,以保证数据的完整性;计算机设备并即时调用用于将内存数据与文件数据进行同步的***函数,将待回写数据回写至目标文件,从而能够即时有效地将待回写数据写入文件中,由此提高了写入文件中的回写数据的完整性,进而能够有效降低数据在回写过程中的损坏率和丢失率。
在一个实施例中,获取内存块的内存占用量,包括:当应用程序向内存块写入数据时,获取应用程序触发的数据写入请求;数据写入请求用于请求基于内存映射文件向内存块中写入数据;根据数据写入请求,解析内存映射文件,获得内存块的内存占用量。
其中,内存映射文件,是指由一个文件到一块内存的映射,使得应用程序处理文件如同访问内存一样。计算机设备可以按照预设规则预先构建内存映射文件。内存映射文件由操作***的内存管理程序负责,因此应用程序只需要将内容写入内存,交由操作***来完成内存到文件的回写操作,不会造成程序退出可能导致的数据丢失。
操作***提供了允许应用程序把文件映射到一个进程的函数。内存映射文件与虚拟内存类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前需要首先对文件进行映射。具体可以通过内存映射函数,预先构建内存映射文件。例如可以采用mmap()函数,通过mmap()函数将文件数据映射到内存中,mmap()***调用函数使得进程之间通过映射同一个普通文件实现共享内存。
应用程序在运行时,向操作***申请映射文件的内存空间,由操作***分配给应用程序。操作***分配的内存空间可以由内存块组成,每一内存块可以采用内存起始地址+内存偏移量的方式表示,进程向内存映射文件写入的共享数据可以占用一个内存块,也可以占用若干个内存块。
当计算机设备中运行的应用程序向内存块写入数据时,应用程序向内存发起数据写入请求。计算机设备此时则检测内存块的内存占用量,以确定是否需要进行数据回写处理。具体地,计算机设备对内存映射文件进行解析,获得文件与内存的映射关系,以确定内存块中进行映射的数据,例如各个进程在内存块中读取的共享数据,从而可以确定当前内存块中数据的内存占用量。
本实施例中,通过在应用程序向内存块写入数据时,判断是否进行数据回写处理,由此能够及时地对内存中的数据进行回写。而不是完全由操作***决定何时回写数据,若由操作***决定何时回写,可能会导致数据回写不及时。通过即时调用用于将内存数据与文件数据进行同步的***函数,从而能够即时有效地将待回写数据写入文件中,由此能够有效降低文件数据在回写过程中的损坏率和丢失率。
在一个实施例中,内存块中的内存数据包括键值对,键值对包括关键字和对应的值;对内存块进行数据重整,以确定内存块中的待回写数据,包括:基于内存块中键值对的关键字,对内存块中的键值对进行去重处理,获得内存块中的有效数据;将有效数据确定为内存块中的待回写数据。
其中,键值对存储是数据库较为简单的组织形式,即key-value键值对。key是关键字,value是值,亦称为键-键值对。其中,键即关键字,指存储的数据值的编号;对应的值,指要存放的数据。将数据按照键值对进行存储,可以通过访问指定的键,进行读取、存储以及更新对应的值。
计算机设备对内存块中的内存数据进行数据重整时,根据内存数据的键值对进行数据重整。具体地,计算机设备根据内存块中每个键值对的关键字,确定关键字对应的值是否存在重复或冗余的值。若存在重复或冗余的值,则按照关键字对相应的关键字以及对应的值进行去重处理。对内存块中的键值对进行去重处理后,从而得到有效的键值对数据,计算机设备则将有效数据确定为内存块中的待回写数据,以对这部分数据进行回写操作。
本实施例中,通过对内存块中的内存数据进行重整处理,能够有效地清理内存块中的无效数据,以精准地对有效数据进行回写处理,保证了内存块中待回写数据的有效性和准确性。
在一个实施例中,基于内存块中键值对的关键字,对内存块中的键值对进行去重处理,获得内存块中的有效数据,包括:获取内存块中内存数据的操作记录;根据操作记录,从内存数据中筛选出内存块中键值对的关键字所对应的值在经过操作后的最新值;将关键字和对应的最新值确定为内存块中的有效数据。
其中,操作记录是指对内存块中的内存数据的操作痕迹,操作记录可以包括新增、删除、修改、查找数据等操作方式的记录数据。
具体地,计算机设备对内存块中的内存数据进行数据重整的过程中,可以获取内存块中内存数据的操作记录。操作记录反应了应用程序在运行过程中,用户对访问的内存数据进行了哪些操作处理。计算机设备通过根据操作记录,可以识别出内存数据中的有效数据。由于操作记录反映了内存数据的所有记录,这些操作后的内存数据中可能存在重复或冗余的数据。计算机设备则根据操作记录,从内存数据中筛选出内存块中键值对的关键字所对应的值在经过操作后的最新值,并将关键字和对应的最新值确定为内存块中的有效数据,由此能够有效地过滤掉内存块中重复或冗余的数据。
如图3所示,为一个实施例中对内存块中存储键值的示意图。参照图3,key1和value1即为一个键值对,key2与value2、key1与value11、以及key1与value12,均分别为响应的键值对数据。其中,关键字key1对应了三条键值对数据,value12为关键字key1经过操作后对应的最新值,因此,在数据重整后,仅保留key1与value12这个最新的关键字和对应的最新值,并将该键值对确定为有效数据。
例如,在更新数据时,如果采用向内存块中***新数据的方式时,对于同一个键而言,在内存中可能存在有若干个键值,而只有在内存中最末尾的键值才是最新有效的,因此,在执行读取操作时,仅将最后操作的键值作为有效数据。即在读取数据时,针对任一键,如果在内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
计算机设备在应用程序的***或者更新操作完成后,将每个key最后写入的value作为有效value,然后将所有有效的key-value键值对写回到磁盘文件。由此能够有效去掉无效的key-value键值对数据,从而可以在内存块中腾出相应的内存空间。
本实施例中,通过对内存块中的内存数据进行重整处理,将关键字和对应的最新值确定为内存块中的有效数据,由此能够有效地过滤掉内存块中重复或冗余的数据,从而能够进一步精准地对有效数据进行回写处理。
在一个实施例中,获取待回写数据对应的校验数据,包括:确定待回写数据对应的内存占用数值;对待回写数据进行编码,获得待回写数据对应的校验码;基于内存占用数值和校验码,生成待回写数据对应的校验数据。
其中,内存占用数值是指每一项数据的内存大小,即数据的大小,也就是数据所占用的字节数。
计算机设备对内存块中的待回写数据进行回写时,需要计算出待回写数据对应的内存占用数值。计算机设备还进一步对待回写数据进行编码,以计算出待回写数据对应的校验码。具体地,计算机设备可以采用CRC32循环冗余校验方式,对待回写数据进行编码,计算得到对应的CRC32校验值,并将CRC32校验值作为待回写数据对应的校验码。
计算机设备计算出待回写数据对应的内存占用数据和校验码后,将内存占用数值和校验码共同作为待回写数据对应的校验数据,从而生成待回写数据对应的校验数据。
本实施例中,通过将内存占用数值和校验码确定为待回写数据对应的校验数据,以将待回写数据对应的校验数据写入目标文件的文件头中,由此能够有效地映射待回写数据在目标文件中的存储位置,从而能够有效保障数据成功回写至目标文件中。
在一个实施例中,将校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将待回写数据回写至目标文件,包括:将校验数据成功写入目标文件的文件头后,即时调用用于将内存数据与文件数据进行同步的***函数;基于内存块中的待回写数据,确定***函数对应的函数参数;通过***函数和对应的函数参数,对内存块中的待回写数据进行同步操作,以将待回写数据回写至目标文件。
其中,用于将内存数据与文件数据进行同步的***函数,还包括相应的函数参数。该***函数对应的函数参数可以预先配置,也可以在调用时根据待回写数据的属性进行配置,以使得该***函数能够被有效地调用,并精准地实现内存数据与文件数据的同步操作。例如,函数参数可以包括内存映射时返回的内存区域、内存映射时所指定的长度、内存和磁盘的同步方式等参数。
计算机设备获取待回写数据对应的校验数据后,首先将待回写数据对应的校验数据写入目标文件的文件头中,用于验证数据的完整性,以保证写入文件的数据的完整性和有效性。
当待回写数据对应的校验数据成功写入目标文件的文件头后,计算机设备则立即调用用于将内存数据与文件数据进行同步的***函数,并根据待回写数据确定该***函数对应的函数参数。其中,函数参数可以有操作***根据待回写数据的属性信息自动配置。计算机设备进而通过调用该***函数以及对应的函数参数,将内存块中的待回写数据同步至目标文件中,从而实现内存数据与文件数据的同步操作,由此能够即时有效地将将待回写数据回写至目标文件中。
本实施例中,通过确定内存块中的待回写数据,并将待回写数据的校验数据写入目标文件的文件头后,立即调用用于将内存数据与文件数据进行同步的***函数,将待回写数据同步至目标文件中,由此能够及时有效地将待回写数据回写至目标文件中,有效提高了写入文件中的回写数据的完整性,从而有效降低了文件数据的损坏率。
在一个实施例中,通过***函数和对应的函数参数,对内存块中的待回写数据进行同步操作,以将待回写数据回写至目标文件,包括:基于内存映射文件,确定内存块中的待回写数据的数据序列和映射区域;通过***函数和对应的函数参数,将待回写数据按照数据序列,同步至目标文件中与映射区域对应的存储位置。
其中,数据序列是指内存块中内存数据的对应内存位置的顺序,数据序列具体可以是对内存块中的内存数据进行数据重整之后的序列。映射区域是指文件数据与内存数据的映射位置区域,指磁盘上文件的位置与进程逻辑地址空间中一块相同区域之间一一对应。在构建内存映射文件时,建立并初始化了相关的数据结构以及映射区域。
在内存映射文件和进程中还可以分别存储一个内存重整序列号,内存重整序列号单调递增,内存映射文件中存储的内存重整序列号可以为第一内存重整序列号,进程中缓存的内存重整序列号可以为第二内存重整序列号。对内存块中的数据进行重整之后,就将内存重整序列号递增。这样,各个进程通过比较第一内存重整序列号和第二内存重整序列号即可确定是否有其他进程触发了内存重整。
在其中一个实施例中,当进程发现内存被重整了,即可触发本进程的数据同步操作。具体地,各进程可以比较缓存的第二内存重整序列号和第一内存重整序列号,如果第二内存重整序列号与第一内存重整序列号不同,则将内存映射文件中存储的全部共享数据重新加载至缓存中。
计算机设备通过用于将内存数据与文件数据进行同步的***函数对待回写数据进行同步操作时,根据内存映射文件确定待回写数据的数据序列和映射区域。进而按照数据序列,将待回写数据同步至目标文件中与映射区域对应的存储位置。
本实施例中,通过用于将内存数据与文件数据进行同步的***函数,按照数据序列将待回写数据同步至目标文件中与映射区域对应的存储位置,由此能够准确有效地将待回写数据从内存区域回写至相应的文件区域。
在一个实施例中,如图4所示,提供了另一种数据存储方法,具体包括以下步骤:
S402,当应用程序从目标文件读取数据时,获取应用程序触发的数据读取请求。
S404,根据数据读取请求,基于内存映射文件将目标文件中与数据读取请求对应的文件数据缓存至内存块。
S406,获取内存块的内存占用量。
S408,当内存块的内存占用量达到内存阈值时,对内存块进行数据重整,以确定内存块中的待回写数据。
S410,获取待回写数据对应的校验数据。
S412,将校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将待回写数据回写至目标文件;其中,文件头中的校验数据,用于在读取目标文件中数据时进行数据完整性校验。
其中,数据读取请求是指计算机设备运行应用程序时,应用程序通过操作***向磁盘文件中请求读取数据,所触发的读请求。
应用程序访问文件数据时,计算机设备的操作***基于应用程序触发的数据读取请求,首先将待访问数据从文件***结构中映射出来,根据待访问数据的字节偏移量,将待访问数据从磁盘调入内存。
具体地,计算机设备的操作***根据数据读取请求确定待访问数据的字节偏移量、数据长度和数据位置等数据属性信息,通过内存映射文件可以查找到待访问数据在磁盘文件中对应的物理地址。操作***则向磁盘发送指令,从磁盘中读出相应的待访问数据,进而根据数据属性信息将待访问数据映射至相应的内存块中相应的内存区域,从而将待访问数据缓存至内存中。
应用程序访问数据后,或者向内存中写入数据之后,当计算机设备的进程再次向内存中写入数据时,获取内存块的内存占用量。当内存块的内存占用量达到内存阈值时,对内存块进行数据重整,以确定内存块中的待回写数据,进而对内存块中的待回写数据进行回写。
本实施例中,应用程序在运行中访问数据时,操作***首先将待访问数据从磁盘缓存至内存中,使得应用程序直接从内存中读取相应的待访问数据,由此能够有效提高数据的访问效率。
在一个实施例中,根据数据读取请求,基于内存映射文件将目标文件中与数据读取请求对应的文件数据缓存至内存块,通过键值对存储组件,获得内存映射文件的写锁;基于内存映射文件的写锁,向内存块中写入文件数据,并在文件数据写入结束时释放写锁。
其中,键值对存储组件是一种关于存储键值对的数据存储组件,例如可以为MMKV组件,可实现同时访问多个进程。
文件锁是一种实现多进程访问同步限制的技术,分为共享锁(亦称为读锁)和互斥锁(亦称为写锁)。当一个进程对一个文件的某个区域加互斥锁后,其他进程必须等待这个进程解锁,才能获得这个文件区域的访问权限;当一个进程对一个文件的某个区域加共享锁后,其他进程可以获得这个区域的共享锁,但不能获得互斥锁。
计算机设备的操作***将文件数据映射至内存,以向内存块中写入数据时,通过键值对存储组件向内存块中写入数据。
具体地,应用程序在运行过程中,向内存映射文件对应的内存块写入数据时,向操作***申请映射文件的内存空间,由操作***分配给应用程序。应用程序内的一个进程在向内存映射文件中写入数据之前,需要先向操作***申请内存映射文件的写锁,即对内存映射文件加写锁,操作***在接收到进程的请求之后,可以将该进程申请的操作区域对应的内存块标识为写入操作,如果在该进程写入数据期间,其他进程向操作***针对相同区域申请读锁或者写锁时,操作***将拒绝该申请,直至上一进程释放该区域的写锁。也就是说,某进程获得了内存映射文件中某区域的写锁后,其他进程需要等待这个进程解锁,才能获得相应区域的访问权限,即可以获得该区域的读锁或者写锁。
进程在获得了内存映射文件某一操作区域的写锁之后,可以向内存映射文件写入共享数据。如果进程获得内存映射文件某一操作区域的写锁失败,则说明其他进程获得了该区域的写锁或者读锁,该进程则需要等待其他进程释放了该区域的写锁后再向***申请获得该区域的写锁。进程在完成向内存映射文件某一区域的数据写入操作之后,则释放对应的写锁,以便于其他进程可以访问该区域。
在向内存映射文件中写入共享数据时,可以按照写入共享数据的先后顺序,依次将共享数据***到内存映射文件中。即将新增的数据按照内存偏移量递增的顺序依次写入到内存中。
本实施例中,通过键值对存储组件,基于内存映射文件以及文件锁向内存块中写入文件数据,从而能够高效地写入数据至内存中。
在一个实施例中,键值对存储组件为基于内存映射的跨进程存储组件,用于同时访问所运行的各进程对应的键值对,以对所访问的键值对进行读取处理。
其中,键值对存储组件还可以为基于内存映射的跨进程存储组件,例如可以为MMKV组件,MMKV组件是基于mmap内存映射的key-value组件。这个存储组件可以多个进程同时访问,一个进程产生的数据更新能够对多个进程同时生效。由此能够同时访问所运行的各进程对应的键值对,以对所访问的键值对进行读取处理。
本实施例中,采用基于内存映射的跨进程存储组件进行数据读取,能够支持多进程的数据访问操作,有效提高了数据的读取效率。
在一个实施例中,在将待回写数据回写至目标文件之后,上述数据存储方法还包括:当应用程序再次从目标文件读取数据时,获取应用程序触发的数据读取请求;根据数据读取请求确定待访问数据,并从目标文件的文件头中获取待访问数据对应的校验数据;基于校验数据,对待访问数据进行数据完整性校验;当数据完整性校验通过后,将目标文件中的待访问数据缓存至内存块,并从内存块中读取待访问数据。
其中,校验数据用于对再次访问对应的数据时,进行数据完整性校验,以验证这部分数据的完整性和有效性。
内存块中的内存数据回写至磁盘文件后,应用程序再次访问该数据时,操作***仍然首先将待访问的数据从磁盘中调入内存,以将待访问数据缓存至内存中。应用程序则从内存中读取相应的待访问数据。
具体地,计算机设备的操作***从磁盘的目标文件中读取待访问数据时,应用程序触发的数据读取请求,并根据数据读取请求确定待访问数据后,计算机设备中的操作***首先获取从目标文件的文件头中获取待访问数据对应的校验数据。计算机设备进而根据校验数据对待访问数据进行数据完整性校,以判断待访问的数据是否完整。当数据完整性校验通过后,表示这部分待访问的数据是完整和准确的。
计算机设备进而将目标文件中的待访问数据缓存至内存块,由此,应用程序在读取待访问数据时,能够直接从内存块中快速地读取所需的待访问数据。
本实施例中,通过将待回写数据对应的校验数据写入目标文件的文件头,以使得计算机设备再次访问该数据时,能够有效地进行数据完整性校验,由此能够有效地保证数据的完整性。
在一个实施例中,如图5所示,为一个实施例中读取数据的步骤的流程示意图,具体包括以下步骤:
S502,当应用程序再次从目标文件读取数据时,获取应用程序触发的数据读取请求。
S504,根据数据读取请求确定待访问数据,并从目标文件的文件头中获取待访问数据对应的校验数据。
S506,基于校验数据,对待访问数据进行数据完整性校验。
S508,当数据完整性校验通过后,通过数据存储组件,读取目标文件中待访问数据对应的键值对。
S510,按照内存块的内存序列,将待访问数据对应的键值对缓存至内存块的哈希表中。
S512,基于数据读取请求,从内存块的哈希表中读取与待访问数据对应的键值对。
其中,内存序列是内存空间中数据的组织方式,即数据写入内存时所创建的数据序列。
计算机设备中的应用程序进程在访问数据时,首先根据内存映射文件对应的映射关系确定目标文件中对应的待访问数据,根据校验数据对待访问数据进行数据完整性校。校验通过后,计算机设备则通过搭建的数据存储组件读取目标文件中待访问数据对应的键值对,并将目标文件中的待访问数据缓存至内存块。其中,计算机设备的操作***将待访问数据缓存至内存时,根据内存块的当前存储状况创建待访问数据在内存中的内存序列,进而按照内存块的内存序列,将待访问数据对应的键值对缓存至内存块的哈希表中。
进一步地,对于应用程序触发的数据读取请求,应用程序可直接从内存块的哈希表中读取与待访问数据对应的键值对。由于内存中的数据访问速度高于磁盘文件,由此应用程序运行时能够快速有效地从内存中读取数据。
例如,计算机设备中的应用程序进程在启动后第一次读取数据时,首先将需要访问的整个文件数据mmap到内存,即将文件数据映射至内存。然后按照文件数据的校验数据,即内存大小、CRC32校验码,进行数据完整性校验。若校验通过,则按内存顺序读取文件数据对应的每个key-value键值对,并缓存到内存的哈希表中。
应用程序后续访问每个key-value数据的时候,直接从哈希表中找到对应的key-value键值对。其中,在内存块中缓存的数据回写至磁盘文件之前,若应用程序再次访问相应的key-value数据时,仍然可以直接从哈希表中找到对应的key-value键值对,以读取所需的数据。
本实施例中,通过首先对待访问数据的校验数据进行验证后,缓存至内存的哈希表中,由此使得应用程序在读取数据时,直接从内存块的哈希表中访问所需的数据,从而能够快读有效地获取所需的完整的数据。
在一个具体的实施例中,如图6所示,提供了一种具体的数据存储方法,包括以下步骤:
S602,当应用程序向内存块写入数据时,获取应用程序触发的数据写入请求;数据写入请求用于请求基于内存映射文件向内存块中写入数据。
S604,根据数据写入请求,解析内存映射文件,获得内存块的内存占用量。
S606,当内存块的内存占用量达到内存阈值时,基于获取内存块中内存数据的操作记录;内存块中的内存数据包括键值对,键值对包括关键字和对应的值。
S608,根据操作记录,从内存数据中筛选出内存块中键值对的关键字所对应的值在经过操作后的最新值。
S610,将关键字和对应的最新值确定为内存块中的有效数据。
S612,确定待回写数据对应的内存占用数值。
S614,对待回写数据进行编码,获得待回写数据对应的校验码。
S616,基于内存占用数值和校验码,生成待回写数据对应的校验数据。
S618,将校验数据成功写入目标文件的文件头后,即时调用用于将内存数据与文件数据进行同步的***函数;其中,文件头中的校验数据,用于在读取目标文件中数据时进行数据完整性校验。
S620,基于内存块中的待回写数据,确定***函数对应的函数参数。
S622,基于内存映射文件,确定内存块中的待回写数据的数据序列和映射区域。
S624,通过***函数和对应的函数参数,将待回写数据按照数据序列,同步至目标文件中与映射区域对应的存储位置。
本实施例中,当计算机设备的应用程序需要向内存中写入数据时,获取内存块的内存占用量;当内存块的内存占用量达到内存阈值时,通过对内存块进行数据重整,以确定内存块中的待回写数据并确定待回写数据对应的校验数据。计算机设备进一步将校验数据写入目标文件的文件头,并通过即时调用用于将内存数据与文件数据进行同步的***函数,将待回写数据同步至目标文件,从而能够即时有效地将待回写数据写入文件中,由此提高了写入文件中的回写数据的完整性,进而能够有效降低文件的损坏率。
本申请还提供一种应用场景,该应用场景应用上述的数据存储方法。具体地,该数据存储方法在该应用场景的应用如下:
计算机设备中安装有Android操作***和Android应用程序,Android应用程序通过Android操作***运行相应的进程,以进行数据访问,实现数据的写入或读取。
Android应用程序向内存中写入数据时,向Android操作***申请映射文件的内存空间,由Android操作***分配给应用程序,Android应用程序内的所有进程共享Android操作***分配的内存空间,各个进程均可以向Android操作***分配内存空间中写入数据或者从该内存空间中读取数据,实现了对多进程数据访问的支持。
进一步地,Android应用程序向内存中写入数据的过程中,还获取内存块的内存占用量;当内存块的内存占用量达到内存阈值时,计算机设备的Android操作***则对内存块进行数据重整,以确定内存块中的待回写数据,并获取所述待回写数据对应的校验数据。Android操作***进而将校验数据写入目标文件的文件头,文件头中的校验数据用于在读取目标文件中数据时进行数据完整性校验。Android操作***并立即调用用于将内存数据与文件数据进行同步的***函数,以将待回写数据即时回写至目标文件,由此能够有效地保证数据即时地且完整地回写到了目标文件中,有效提高了写入文件中的回写数据的完整性,进而能够有效降低数据在回写过程中的损坏率。
本申请还另外提供一种应用场景,该应用场景应用上述的数据存储方法。具体地,该数据存储方法在该应用场景的应用如下:
计算机设备中安装有iOS操作***和iOS应用程序,iOS应用程序通过iOS操作***运行相应的进程,以进行数据访问,实现数据的写入或读取。
iOS应用程序向内存中写入数据时,向iOS操作***申请映射文件的内存空间,由iOS操作***分配给应用程序,iOS应用程序内的所有进程共享iOS操作***分配的内存空间,各个进程均可以向iOS操作***分配内存空间中写入数据或者从该内存空间中读取数据,实现了对多进程数据访问的支持。
进一步地,iOS应用程序向内存中写入数据的过程中,还获取内存块的内存占用量;当内存块的内存占用量达到内存阈值时,计算机设备的iOS操作***则对内存块进行数据重整,以确定内存块中的待回写数据,并获取所述待回写数据对应的校验数据。iOS操作***进而将校验数据写入目标文件的文件头,文件头中的校验数据用于在读取目标文件中数据时进行数据完整性校验。iOS操作***并立即调用用于将内存数据与文件数据进行同步的***函数,以将待回写数据即时回写至目标文件,由此能够有效地保证数据即时地且完整地回写到了目标文件中,有效提高了写入文件中的回写数据的完整性,进而能够有效降低数据在回写过程中的损坏率。
应该理解的是,虽然图2、4、5、6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、4、5、6中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种数据存储装置700,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:数据获取模块702、数据重整模块704和数据回写模块706,其中:
数据获取模块702,用于获取内存块的内存占用量;
数据重整模块704,用于当内存块的内存占用量达到内存阈值时,对内存块进行数据重整,以确定内存块中的待回写数据;
数据获取模块702还用于获取待回写数据对应的校验数据;
数据回写模块706,用于将校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将待回写数据回写至目标文件;其中,文件头中的校验数据,用于在读取目标文件中数据时进行数据完整性校验。
在一个实施例中,数据获取模块702还用于当应用程序向内存块写入数据时,获取应用程序触发的数据写入请求;数据写入请求用于请求基于内存映射文件向内存块中写入数据;根据数据写入请求,解析内存映射文件,获得内存块的内存占用量。
在一个实施例中,内存块中的内存数据包括键值对,键值对包括关键字和对应的值;数据重整模块704还用于基于内存块中键值对的关键字,对内存块中的键值对进行去重处理,获得内存块中的有效数据;将有效数据确定为内存块中的待回写数据。
在一个实施例中,数据重整模块706还用于获取内存块中内存数据的操作记录;根据操作记录,从内存数据中筛选出内存块中键值对的关键字所对应的值在经过操作后的最新值;将关键字和对应的最新值确定为内存块中的有效数据。
在一个实施例中,数据获取模块702还用于确定待回写数据对应的内存占用数值;对待回写数据进行编码,获得待回写数据对应的校验码;基于内存占用数值和校验码,生成待回写数据对应的校验数据。
在一个实施例中,数据回写模块706还用于将校验数据成功写入目标文件的文件头后,即时调用用于将内存数据与文件数据进行同步的***函数;基于内存块中的待回写数据,确定***函数对应的函数参数;通过***函数和对应的函数参数,对内存块中的待回写数据进行同步操作,以将待回写数据回写至目标文件。
在一个实施例中,数据回写模块706还用于基于内存映射文件,确定内存块中的待回写数据的数据序列和映射区域;通过***函数和对应的函数参数,将待回写数据按照数据序列,同步至目标文件中与映射区域对应的存储位置。
在一个实施例中,上述数据存储装置还包括数据缓存模块,用于当应用程序从目标文件读取数据时,获取应用程序触发的数据读取请求;根据数据读取请求,基于内存映射文件将目标文件中与数据读取请求对应的文件数据缓存至内存块。
在一个实施例中,如图8所示,上述数据存储装置700还包括数据写入模块701,用于通过键值对存储组件,获得内存映射文件的写锁;基于内存映射文件的写锁,向内存块中写入文件数据,并在文件数据写入结束时释放写锁。
在一个实施例中,键值对存储组件为基于内存映射的跨进程存储组件,用于同时访问所运行的各进程对应的键值对,以对所访问的键值对进行读取处理。
在一个实施例中,如图9所示,上述数据存储装置700还包括数据读取模块708,用于当应用程序再次从目标文件读取数据时,获取应用程序触发的数据读取请求;根据数据读取请求确定待访问数据,并从目标文件的文件头中获取待访问数据对应的校验数据;基于校验数据,对待访问数据进行数据完整性校验;当数据完整性校验通过后,将目标文件中的待访问数据缓存至内存块,并从内存块中读取待访问数据。
在一个实施例中,数据读取模块708还用于,通过数据存储组件,读取目标文件中待访问数据对应的键值对;按照内存块的内存序列,将待访问数据对应的键值对缓存至内存块的哈希表中;基于数据读取请求,从内存块的哈希表中读取与待访问数据对应的键值对。
关于数据存储装置的具体限定可以参见上文中对于数据存储方法的限定,在此不再赘述。上述数据存储装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图10所示。该计算机设备包括通过***总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种数据存储方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据存储方法,其特征在于,所述方法包括:
获取内存块的内存占用量;
当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;
获取所述待回写数据对应的校验数据;
将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;
其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。
2.根据权利要求1所述的方法,其特征在于,所述获取内存块的内存占用量,包括:
当应用程序向内存块写入数据时,获取所述应用程序触发的数据写入请求;所述数据写入请求用于请求基于内存映射文件向所述内存块中写入数据;
根据所述数据写入请求,解析所述内存映射文件,获得所述内存块的内存占用量。
3.根据权利要求1所述的方法,其特征在于,所述内存块中的内存数据包括键值对,所述键值对包括关键字和对应的值;
所述对所述内存块进行数据重整,以确定所述内存块中的待回写数据包括:
基于所述内存块中键值对的关键字,对所述内存块中的键值对进行去重处理,获得所述内存块中的有效数据;
将所述有效数据确定为所述内存块中的待回写数据。
4.根据权利要求3所述的方法,其特征在于,所述基于所述内存块中键值对的关键字,对所述内存块中的键值对进行去重处理,获得所述内存块中的有效数据,包括:
获取所述内存块中内存数据的操作记录;
根据所述操作记录,从所述内存数据中筛选出所述内存块中键值对的关键字所对应的值在经过操作后的最新值;
将所述关键字和对应的最新值确定为所述内存块中的有效数据。
5.根据权利要求1所述的方法,其特征在于,所述获取所述待回写数据对应的校验数据,包括:
确定所述待回写数据对应的内存占用数值;
对所述待回写数据进行编码,获得所述待回写数据对应的校验码;
基于所述内存占用数值和所述校验码,生成所述待回写数据对应的校验数据。
6.根据权利要求1所述的方法,其特征在于,所述将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件,包括:
将所述校验数据成功写入目标文件的文件头后,即时调用用于将内存数据与文件数据进行同步的***函数;
基于所述内存块中的待回写数据,确定所述***函数对应的函数参数;
通过所述***函数和对应的函数参数,对所述内存块中的待回写数据进行同步操作,以将所述待回写数据回写至所述目标文件。
7.根据权利要求6所述的方法,其特征在于,所述通过所述***函数和对应的函数参数,对所述内存块中的待回写数据进行同步操作,以将所述待回写数据回写至所述目标文件,包括:
基于内存映射文件,确定所述内存块中的待回写数据的数据序列和映射区域;
通过所述***函数和对应的函数参数,将所述待回写数据按照所述数据序列,同步至所述目标文件中与所述映射区域对应的存储位置。
8.根据权利要求1所述的方法,其特征在于,在所述将所述待回写数据回写至所述目标文件之前,所述方法还包括:
当应用程序从目标文件读取数据时,获取所述应用程序触发的数据读取请求;
根据所述数据读取请求,基于内存映射文件将所述目标文件中与所述数据读取请求对应的文件数据缓存至所述内存块。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过键值对存储组件,获得所述内存映射文件的写锁;
基于所述内存映射文件的写锁,向所述内存块中写入文件数据,并在所述文件数据写入结束时释放所述写锁。
10.根据权利要求9所述的方法,其特征在于,所述键值对存储组件为基于内存映射的跨进程存储组件,用于同时访问所运行的各进程对应的键值对,以对所访问的键值对进行读取处理。
11.根据权利要求1至10任意一项所述的方法,其特征在于,在所述将所述待回写数据回写至所述目标文件之后,所述方法还包括:
当应用程序再次从目标文件读取数据时,获取所述应用程序触发的数据读取请求;
根据所述数据读取请求确定待访问数据,并从所述目标文件的文件头中获取待访问数据对应的校验数据;
基于所述校验数据,对所述待访问数据进行数据完整性校验;
当所述数据完整性校验通过后,将所述目标文件中的待访问数据缓存至所述内存块,并从所述内存块中读取所述待访问数据。
12.根据权利要求11所述的方法,其特征在于,所述将所述目标文件中的待访问数据缓存至所述内存块,并从所述内存块中读取所述待访问数据,包括:
通过数据存储组件,读取所述目标文件中待访问数据对应的键值对;
按照所述内存块的内存序列,将所述待访问数据对应的键值对缓存至所述内存块的哈希表中;
基于所述数据读取请求,从所述内存块的哈希表中读取与所述待访问数据对应的键值对。
13.一种数据存储装置,其特征在于,所述装置包括:
数据获取模块,用于获取内存块的内存占用量;
数据重整模块,用于当所述内存块的内存占用量达到内存阈值时,对所述内存块进行数据重整,以确定所述内存块中的待回写数据;
所述数据获取模块还用于获取所述待回写数据对应的校验数据;
数据回写模块,用于将所述校验数据写入目标文件的文件头,并即时调用用于将内存数据与文件数据进行同步的***函数,将所述待回写数据回写至所述目标文件;其中,所述文件头中的校验数据,用于在读取所述目标文件中数据时进行数据完整性校验。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至12中任一项所述的方法的步骤。
15.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010676941.2A CN113934362A (zh) | 2020-07-14 | 2020-07-14 | 数据存储方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010676941.2A CN113934362A (zh) | 2020-07-14 | 2020-07-14 | 数据存储方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113934362A true CN113934362A (zh) | 2022-01-14 |
Family
ID=79273837
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010676941.2A Pending CN113934362A (zh) | 2020-07-14 | 2020-07-14 | 数据存储方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113934362A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023232079A1 (zh) * | 2022-05-31 | 2023-12-07 | 上海寒武纪信息科技有限公司 | 数据存储、访问、运算方法及相关产品 |
-
2020
- 2020-07-14 CN CN202010676941.2A patent/CN113934362A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023232079A1 (zh) * | 2022-05-31 | 2023-12-07 | 上海寒武纪信息科技有限公司 | 数据存储、访问、运算方法及相关产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10983955B2 (en) | Data unit cloning in memory-based file systems | |
CN108459826B (zh) | 一种处理io请求的方法及装置 | |
US9164676B2 (en) | Storing multi-stream non-linear access patterns in a flash based file-system | |
US10891074B2 (en) | Key-value storage device supporting snapshot function and operating method thereof | |
CN113220242B (zh) | 存储管理方法、设备和计算机可读介质 | |
CN115129257A (zh) | 数据读写方法、电子设备及计算机可读存储介质 | |
US9588884B2 (en) | Systems and methods for in-place reorganization of device storage | |
US20240086113A1 (en) | Synchronous write method and device, storage system and electronic device | |
CN112817962B (zh) | 基于对象存储的数据存储方法、装置和计算机设备 | |
CN113934362A (zh) | 数据存储方法、装置、计算机设备和存储介质 | |
CN111158606B (zh) | 存储方法、装置、计算机设备和存储介质 | |
US9645946B2 (en) | Encryption for solid state drives (SSDs) | |
CN113312205B (zh) | 数据校验方法、装置、存储介质和计算机设备 | |
CN107257281B (zh) | Nor flash存储密钥记录的方法、装置及计算机可读存储介质 | |
CN106250473A (zh) | 遥感影像云存储方法 | |
CN114792016A (zh) | 一种处理方法及电子设备 | |
CN109542872A (zh) | 数据读取方法、装置、计算机设备和存储介质 | |
WO2021218502A1 (zh) | 一种页交换的方法、存储***和电子设备 | |
US11513951B2 (en) | System and method for improving write performance for log structured storage systems | |
CN113467698A (zh) | 基于文件***的写方法、装置、计算机设备和存储介质 | |
US10374637B1 (en) | System and method for unbalanced load handling with distributed erasure coding | |
CN112015672A (zh) | 一种存储***中数据处理方法、装置、设备及存储介质 | |
CN113590309B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN112181291B (zh) | 数据回写方法、装置、电子设备及机器可读存储介质 | |
CN110888823B (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 |