CN115562587A - 应用于存储介质的数据存储方法、装置、设备及存储介质 - Google Patents
应用于存储介质的数据存储方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115562587A CN115562587A CN202211264341.0A CN202211264341A CN115562587A CN 115562587 A CN115562587 A CN 115562587A CN 202211264341 A CN202211264341 A CN 202211264341A CN 115562587 A CN115562587 A CN 115562587A
- Authority
- CN
- China
- Prior art keywords
- data
- stored
- storage space
- storage
- area storage
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- 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
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- 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/0629—Configuration or reconfiguration of storage systems
-
- 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
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种应用于存储介质的数据存储方法、装置、设备及存储介质,可以应用于计算机数据存储技术领域。存储介质中包括索引区存储空间和数据区存储空间;该方法包括:获取待存储数据,其中,待存储数据具有固定的二进制长度;响应于确定数据区存储空间中未存储数据,将数据区存储空间的开始地址确定为目标写入地址;响应于确定数据区存储空间中已存储有至少一个已存储数据,确定已存储至数据区存储空间中的最后一个已存储数据对应的目标结束地址;将目标结束地址的下一地址确定为目标写入地址;将待存储数据存储至目标写入地址对应的数据区存储空间;以及在索引区存储空间中记录写入标记。
Description
技术领域
本公开涉及计算机数据存储技术领域,尤其涉及一种应用于存储介质的数据存储方法、装置、设备及存储介质。
背景技术
嵌入式领域的各设备,通常需要存储一段时间内的数据。嵌入式设备通常对价格非常敏感,因此通常都会选用相对便宜的中央处理器。此类中央处理器往往资源和性能非常有限,无法支撑大型文件系统的运行。此外,存储所用的各种flash(闪存)及其他存储设备,内存越大,价格会越高。
发明人在实现本公开构思的过程中发现,价格低廉、资源和性能有限的嵌入式设备难以支持大规模数据量的存储。
发明内容
鉴于上述问题,本公开提供了一种应用于存储介质的数据存储方法、装置、电子设备、存储介质和程序产品。
本公开一方面提供了一种应用于存储介质的数据存储方法,其中,所述存储介质中包括索引区存储空间和数据区存储空间;所述方法包括:获取待存储数据,其中,所述待存储数据具有固定的二进制长度;响应于确定所述数据区存储空间中未存储数据,将所述数据区存储空间的开始地址确定为目标写入地址;响应于确定所述数据区存储空间中已存储有至少一个已存储数据,确定已存储至所述数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至所述数据区存储空间中的第一个已存储数据对应的开始地址等于所述数据区存储空间的开始地址,已存储至所述数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:所述前一个已存储数据对应的结束地址的下一地址等于所述后一个已存储数据对应的开始地址;将所述目标结束地址的下一地址确定为所述目标写入地址;将所述待存储数据存储至所述目标写入地址对应的数据区存储空间;以及在所述索引区存储空间中记录写入标记,其中,所述写入标记表征将与所述写入标记相对应的要存储数据存储至所述数据区存储空间的过程为存储成功或存储失败,所述要存储数据表征所述待存储数据、所述已存储数据和未存储数据其中任意之一。
本公开另一方面提供了一种应用于存储介质的数据存储装置,其中,所述存储介质中包括索引区存储空间和数据区存储空间;所述装置包括:获取模块,用于获取待存储数据,其中,所述待存储数据具有固定的二进制长度;第一确定模块,用于响应于确定所述数据区存储空间中未存储数据,将所述数据区存储空间的开始地址确定为目标写入地址;第二确定模块,用于响应于确定所述数据区存储空间中已存储有至少一个已存储数据,确定已存储至所述数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至所述数据区存储空间中的第一个已存储数据对应的开始地址等于所述数据区存储空间的开始地址,已存储至所述数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:所述前一个已存储数据对应的结束地址的下一地址等于所述后一个已存储数据对应的开始地址;第三确定模块,用于将所述目标结束地址的下一地址确定为所述目标写入地址;第一存储模块,用于将所述待存储数据存储至所述目标写入地址对应的数据区存储空间;以及记录模块,用于在所述索引区存储空间中记录写入标记,其中,所述写入标记表征将与所述写入标记相对应的要存储数据存储至所述数据区存储空间的过程为存储成功或存储失败,所述要存储数据表征所述待存储数据、所述已存储数据和未存储数据其中任意之一。
本公开的另一方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行本公开所述的应用于存储介质的数据存储方法。
本公开的另一方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行本公开所述的应用于存储介质的数据存储方法。
根据本公开提供的应用于存储介质的数据存储方法、装置、电子设备、存储介质和程序产品,通过在存储介质中设置索引区存储空间和数据区存储空间,并设置已存储至所述数据区存储空间中的第一个已存储数据对应的开始地址等于数据区存储空间的开始地址,已存储至数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:前一个已存储数据对应的结束地址的下一地址等于后一个已存储数据对应的开始地址,以及在索引区存储空间中记录表征将要存储数据存储至数据区存储空间的过程为存储成功或存储失败的写入标记。由于数据区存储空间存储数据时首尾相连,提高了存储密度,从而可降低存储设备的成本。通过结合写入标记确定相对应的要存储数据,至少部分的缓解了资源和性能有限的嵌入式设备难以支持大规模数据量的存储的技术问题,实现了用少量代码及资源就可实现数据高密度存储的技术效果。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的应用于存储介质的数据存储方法的应用场景图;
图2示意性示出了根据本公开实施例的应用于存储介质的数据存储方法的流程图;
图3示意性示出了根据本公开实施例的索引去存储空间的示意图;
图4示意性示出了根据本公开实施例的初始化的流程图;
图5示意性示出了根据本公开实施例的写数据的流程图;
图6示意性示出了根据本公开实施例的读数据的流程图;
图7示意性示出了根据本公开实施例的应用于存储介质的数据存储装置的结构框图;以及
图8示意性示出了根据本公开实施例的适于实现应用于存储介质的数据存储方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种应用于存储介质的数据存储方法、装置、电子设备、存储介质和程序产品。其中,存储介质中包括索引区存储空间和数据区存储空间;方法包括:获取待存储数据,其中,待存储数据具有固定的二进制长度;响应于确定数据区存储空间中未存储数据,将数据区存储空间的开始地址确定为目标写入地址;响应于确定数据区存储空间中已存储有至少一个已存储数据,确定已存储至数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至数据区存储空间中的第一个已存储数据对应的开始地址等于数据区存储空间的开始地址,已存储至数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:前一个已存储数据对应的结束地址的下一地址等于后一个已存储数据对应的开始地址;将目标结束地址的下一地址确定为目标写入地址;将待存储数据存储至目标写入地址对应的数据区存储空间;以及在索引区存储空间中记录写入标记,其中,写入标记表征将与写入标记相对应的要存储数据存储至数据区存储空间的过程为存储成功或存储失败,要存储数据表征待存储数据、已存储数据和未存储数据其中任意之一。
图1示意性示出了根据本公开实施例的应用于存储介质的数据存储方法的应用场景图。
如图1所示,根据该实施例的应用场景可以包括存储介质100。存储介质100中可以包括索引区存储空间110和数据区存储空间120。
索引区存储空间110可以用于存储写入标记。例如,可以用]bit值(1或0)记录表征要存储数据被成功写入数据区存储空间的写入标记或者记录表征要存储数据被写入数据区存储空间失败的写入标记。在索引区存储空间110记录写入标记的算法可以表现为:每一bit对应一段存储数据,0和1(bit值)可以分别表示写入和未写入(具体0和1谁表示写入,需要根据存储介质定。如使用flash存储,其初始化后值全为1,则用1表示未写入;如用eeprom时,初始化后值为0或1均可,则谁表示写入都可以)。即一个字节可标识8段数据的存储情况,2k字节可标识2*1024*8=16384段数据的存储情况。相邻的两个bit分别标识相邻的两段数据的写入情况。
数据区存储空间120用于高密度存储要存储数据,在数据区存储空间120中存储要存储数据的规则可以包括:下一条数据的起始地址,紧挨着上一条数据的结束地址。
需要说明的是,索引区存储空间110和数据区存储空间120各自的数目可以包括一个或多个。正在存储介质100中包括多个索引区存储空间110和多个数据区存储空间120的情况下,不同的数据区存储空间可以分别对应不同的索引区存储空间,不同的数据区存储空间可以相互独立,用于存储不同类别的数据。
存储介质100可以包括如下中的至少一种:软盘、光盘、DVD(Digital VersatileDisc,数字多功能光盘)、硬盘、闪存、U盘、CF卡(Compact Flash,用于便携式电子设备的数据存储设备)、SD卡(Secure Digital Memory Card,基于半导体快闪记忆器的记忆设备)、MMC卡(Multimedia Card,多媒体卡)、SM卡(Smart Media,微储存卡)、Memory Stick(记忆棒)、Cache(高速缓冲存储器)、Flash(闪存)、EPROM(Erasable Programmable Read OnlyMemory,可擦除可编程只读寄存器)、PROM(Programmable Read-Only Memory,可编程只读存储器)、SRAM(StaticRandom-AccessMemory,静态随机存取存储器)、DRAM(DynamicRandom Access Memory,动态随机存取存储器)、SDRAM(Synchronous Dynamic RandomAccess Memory,同步动态随机存储器)等,且可不限于此。
需要说明的是,本公开实施例所提供的应用于存储介质的数据存储方法一般可以由存储介质100执行。相应地,本公开实施例所提供的应用于存储介质的数据存储装置一般可以设置于存储介质110中。本公开实施例所提供的应用于存储介质的数据存储方法也可以由不同于存储介质100且能够与存储介质100通信的设备或设备集群执行。相应地,本公开实施例所提供的应用于存储介质的数据存储装置也可以设置于不同于存储介质100且能够与存储介质100通信的设备或设备集群中。
应该理解,图1中的存储介质的数目仅仅是示意性的。根据实现需要,可以具有任意数目的存储介质。
以下将基于图1描述的场景,通过图2~图6对公开实施例的应用于存储介质的数据存储方法进行详细描述。
图2示意性示出了根据本公开实施例的应用于存储介质的数据存储方法的流程图。
如图2所示,该实施例的应用于存储介质的数据存储方法包括操作S210~S260。
在操作S210,获取待存储数据,其中,待存储数据具有固定的二进制长度。
根据本公开的实施例,待存储数据可以包括各类数据采集设备、传感器等采集到的需要被存储的数据。要存储至同一数据区存储空间中的待存储数据的二进制长度相同,存储至不同数据区存储空间中的待存储数据的二进制长度可以不同。
在操作S220,响应于确定数据区存储空间中未存储数据,将数据区存储空间的开始地址确定为目标写入地址。
根据本公开的实施例,目标写入地址可以表征待存储数据的存储地址。在确定数据区存储空间中尚未存储数据,即数据区存储空间尚未开始使用的情况下,可以首先从数据存储空间的起始位置进行数据存储。然后,顺序存储后续待存储数据。
在操作S230,响应于确定数据区存储空间中已存储有至少一个已存储数据,确定已存储至数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至数据区存储空间中的第一个已存储数据对应的开始地址等于数据区存储空间的开始地址,已存储至数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:前一个已存储数据对应的结束地址的下一地址等于后一个已存储数据对应的开始地址。
在操作S240,将目标结束地址的下一地址确定为目标写入地址。
在操作S250,将待存储数据存储至目标写入地址对应的数据区存储空间。
根据本公开的实施例,在确定数据区存储空间中已存储有数据,即数据区存储空间已开始使用的情况下,对于新的待存储数据,可在已存储数据之后继续顺序存储。顺序存储的过程需遵循两相邻要存储数据之间首尾相连的数据存储规则,使得前一个已存储数据对应的结束地址的下一地址等于后一个已存储数据对应的开始地址。
在操作S260,在索引区存储空间中记录写入标记,其中,写入标记表征将与写入标记相对应的要存储数据存储至数据区存储空间的过程为存储成功或存储失败,要存储数据表征待存储数据、已存储数据和未存储数据其中任意之一。
根据本公开的实施例,未存储数据可以表征未成功存储至数据区存储空间的数据。每个要存储数据可以在索引区存储空间中对应一个写入标记,表征该要存储数据存储成功或存储失败。例如,已存储至数据区存储空间中的每个已存储数据在索引区存储空间中对应的写入标记为表征存储成功的写入标记。索引区存储空间中表征存储失败的写入标记对应的要存储数据可以包括未存储数据和待存储数据等尚未成功存储至数据区存储空间中的数据。在将待存储数据成功存储至数据区存储空间之后,可以更新该待存储数据在索引区存储空间中对应的写入标记至表征存储成功的写入标记。
根据本公开的实施例,向索引区存储空间中记录写入标记的方式可以包括:从索引区存储空间中用于记录写入标记的空间的开始位置顺序存储写入标记。向索引区存储空间中记录写入标记的方式也可以包括:根据预定义记录规则,在索引区存储空间中记录写入标记,只要能够保证根据每一个写入标记均能定位到与该写入标记对应的要存储数据即可。
通过本公开的上述实施例,通过在存储介质中设置索引区存储空间和数据区存储空间,并设置已存储至所述数据区存储空间中的第一个已存储数据对应的开始地址等于数据区存储空间的开始地址,已存储至数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:前一个已存储数据对应的结束地址的下一地址等于后一个已存储数据对应的开始地址,以及在索引区存储空间中记录表征将要存储数据存储至数据区存储空间的过程为存储成功或存储失败的写入标记。由于数据区存储空间存储数据时首尾相连,提高了存储密度,从而可降低存储设备的成本。通过结合写入标记确定相对应的要存储数据,至少部分的缓解了资源和性能有限的嵌入式设备难以支持大规模数据量的存储的技术问题,实现了用少量代码及资源就可实现数据高密度存储的技术效果。
根据本公开的实施例,待存储数据可以包括周期性存储数据和非周期性存储数据。周期性存储数据可以表征在不同时刻下以相同的时间间隔周期性生成和存储的数据。非周期性存储数据可以表征在不同的时刻随机生成和存储的数据。
根据本公开的实施例,针对周期性存储数据和非周期性存储数据分别构造了适用于其各自的数据存储方式。以下结合具体实施对周期性存储数据和非周期性存储数据各自对应的数据存储方法分别做详细介绍。
根据本公开的实施例,在待存储数据为周期性存储数据的情况下。上述操作S260可以包括:响应于确定数据区存储空间中未存储数据,在索引区存储空间的预定存储空间中存储待存储数据对应的数据生成时间,其中,预定存储空间包括以索引区存储空间的开始地址为开始地址、具有预定空间长度的存储空间。将预定存储空间对应的结束地址的下一地址确定为写入标记的标记地址。
根据本公开的实施例,在确定数据区存储空间中未存储数据的情况下,可以确定待存储数据为存储至数据区存储空间的第一条数据。此时,可以在索引区存储空间的开始位置额外预留4到8字节(可不限于此)的地址空间,用于存储第一条数据所对应的数据存储时间。
通过本公开的上述实施例,通过在索引区存储空间中记录存储至数据区存储空间的第一条数据对应的数据存储时间,对于周期性存储数据的后续存储过程而言,结合前述首尾相连的存储规则,可以容易的确定每条待存储数据对应的存储位置,并可便于后续读写操作。
根据本公开的实施例,在待存储数据为周期性存储数据的情况下。上述操作S260还可以包括:响应于确定将周期性存储数据存储至数据区存储空间的过程存储成功,在索引区存储空间中记录表征存储成功的写入标记。响应于确定将周期性存储数据存储至数据区存储空间的过程存储失败,在索引区存储空间中记录表征存储失败的写入标记。
例如,用0表示对应段待存储数据未写入,用1表示对应段待存储数据写入,要求每一分钟存一条数据。第一分钟时写入了数据,则最低bit置1,然后设备关机整五分钟,随后开机,之后两分钟均正常存入数据,则此时该byte的值为0xC1(11000001),即第一分钟和第七、八分钟写入了数据,对应bit为1,中间五分钟未写入数据,对应bit为0。
根据本公开的实施例,基于前述数据存储规则,上述第一分钟至第八分钟生成的周期性要存储数据在数据区存储空间中对应的存储结构可以表现为:第七分钟生成的要存储数据的起始地址为第一分钟生成的要存储数据的结束地址的下一字节,第八分钟生成的要存储数据的起始地址为第七分钟生成的要存储数据的结束地址的下一byte,中间不会因为缺数据而产生空隙。
通过本公开的上述实施例,在周期性存储数据的数据存储过程中,可以针对每个要存储数据记录对应的写入标记,从而可以确定每个周期生成的数据的存储结果,如在使用期间关机或其他原因,导致中间有数据未存,可通过索引区存储空间中记录的写入标记发现,并可便于读取相应周期生成的数据。
根据本公开的实施例,索引区存储空间可以包括N个索引块存储空间,每个索引块存储空间中可以包括第二备份区存储子空间。上述操作S260可以包括:响应于接收到要记录写入标记的指令,在索引区存储空间中顺序记录写入标记。响应于确定第n个索引块存储空间中存满写入标记,获取第1至n个索引块存储空间中包括的表征存储成功的目标写入标记的总数目。在第n个索引块存储空间对应的第二备份区存储子空间中记录表征第n个索引块存储空间中存满写入标记的存满标记以及记录总数目,其中,1≤n≤N,N为正整数。
根据本公开的实施例,顺序记录写入标记的过程可以表征为:针对第n个索引块存储空间,从第n个索引块存储空间的用于记录写入标记的存储空间中的起始bit开始,顺序记录写入标记,直至记录到第n个索引块存储空间的终止bit,完成对在该第n个索引块存储空间中记录写入标记的操作。针对第一个索引块存储空间至第n个索引块存储空间,依次执行前述操作。
根据本公开的实施例,索引块存储空间中可以预留第二备份区存储子空间。该第二备份区存储子空间可以用于在相应索引块存储空间存满写入标记的情况下,记录该索引块存储空间的统计信息。统计信息可以包括存满标记以及表征存储成功的目标写入标记的总数目。例如,每个索引块存储空间中可以都使用3个字节来存储该索引块存储空间的统计信息,该3个字节可以包括1字节的索引块存储空间是否存满标记,和2字节的索引块存储空间共有多少写入标记。
通过本公开的上述实施例,通过将索引区存储空间分块,可以有效提高检索效率。
根据本公开的实施例,在待存储数据为非周期性存储数据的情况下,上述操作S250可以包括:按照上述数据存储规则,从数据区存储空间的起始位置开始,顺序存储待存储数据,直至数据存储完成或者数据区存储空间存满数据。
根据本公开的实施例,在待存储数据为非周期性存储数据的情况下,可以将数据区存储空间划分为M个数据块存储空间,每个数据块存储空间中可以包括第一备份区存储子空间。上述操作S250可以包括:响应于确定待存储数据为存储至第m个数据块存储空间中的第一个要存储数据,在第m个数据块存储空间对应的第一备份区存储子空间中记录待存储数据对应的数据生成时间,作为第m个数据块存储空间对应的存储起始时间。和/或,响应于确定待存储数据为存储至第m个数据块存储空间中的最后一个要存储数据,在第m个数据块存储空间对应的第一备份区存储子空间中记录待存储数据对应的数据生成时间,作为第m个数据块存储空间对应的存储终止时间,其中,1≤m≤M,M为正整数。
根据本公开的实施例,在待存储数据为非周期性存储数据的情况下,可以对数据区存储空间进行合理的分块,并预留空间(即第一备份存储空间)存储单块内最早数据和最晚数据对应的数据生成时间。需要说明的是,在待存储数据为非周期性存储数据的情况下,可以对数据区存储空间分块或不分块,可根据实际情况确定。
通过本公开的上述实施例,通过将数据区存储空间分块,在后期需用时间检索的情况下,可根据每个数据块存储空间对应的第一备份区存储空间中存储的本数据块存储空间存储的数据对应的最早时间和最晚实际,进行检索,可有效提高检索效率。
根据本公开的实施例,在待存储数据为非周期性存储数据的情况下,上述操作S260可以包括:响应于确定将非周期性存储数据存储至数据区存储空间的过程存储成功,在索引区存储空间中顺序记录表征存储成功的写入标记。
例如,用0表示对应段待存储数据未写入,用1表示对应段待存储数据写入。随机生成待存储数据,第一分钟时写入了数据,则最低bit置1,然后设备关机整五分钟,随后开机,之后两分钟均正常存入数据,则此时该byte的值为0x07(00000111),即第一分钟和第七、八分钟写入了数据。写入标记的记录过程包括:从低位到高位,每写入一次高bit置1一次。
根据本公开的实施例,基于前述数据存储规则,上述第一分钟至第八分钟生成的非周期性要存储数据在数据区存储空间中对应的存储结构可以表现为:三条数据均首尾相连,即第七分钟数据的起始地址为第一分钟数据结束地址的下一byte,第八分钟数据的起始地址为第七分钟数据结束地址的下一byte,中间不会因为缺数据而产生空隙。
根据本公开的实施例,在待存储数据包括周期性存储数据和非周期性数据其中至少之一的情况下,均可以对索引区存储空间执行分块操作,并可执行前述对应于在索引块存储空间中记录写入标记的过程。
通过本公开的上述实施例,通过对数据区存储空间和索引区存储空间进行合理的分块,可以进一步提高检索效率。
根据本公开的实施例,在使用期间关机或其他原因,导致中间有数据未存,且不能获取到该未存的中间数据的情况下,可以忽略此段时间,并基于下一条数据还紧挨着上一条数据的结尾进行存储,达到高密度存储的目的。
根据本公开的实施例,在使用期间关机或其他原因,导致中间有数据未存的情况下,且能够获取到该未存的中间数据的情况下,可以根据需求,补全缺的中间数据。
根据本公开的实施例,上述补全中间数据的过程可以包括:响应于在当前时刻检测到存在表征存储失败的目标写入标记对应的未存储数据,在将当前时刻生成的待存储数据存储入数据区存储空间之前,将未存储数据存储入数据区存储空间。将目标写入标记更新为表征存储成功的写入标记。
通过本公开的上述实施例,可以结合索引区存储空间中记录的写入标记,对存储失败的未存储数据进行补充存储,有利于提高数据存储的完整性。
基于上述数据存储方法,可以实现一种对嵌入式设备性能和资源要求低,且能实现高密度存储、读写速度快的文件系统算法。针对上述提供的基于二进制定长存储的文件系统算法,以下结合具体实施例对该方法做进一步详细说明。
本公开所实现的文件系统算法,可以首先根据实际情况,确认以下几项内容:
①存储数据单元的定长,记为data_len。此算法要求每次存储的数据单元都占用相同大小的内存。
②需要同时存在于内存中的数据单元最大条数,记为max_num_data。
此算法分为索引区和数据区,其中索引区的大小可以根据实际情况(业务需求和内存实际大小),按照“需要同时存在于内存中的数据单元最大条数”的值,来确定索引区所需内存空间。
③数据单元存储周期(非周期性存储时无需此参数),记为cycle_storage。
然后,可以根据max_num_data和data_len的数值,设计索引区存储空间和数据区存储空间:
在设计索引区存储空间时,可以根据max_num_data的数值,并考虑一定的冗余,给索引区的地址空间。若是周期性存储数据,可以额外预留4到8字节的地址空间,用于存储第一条已存储数据所对应的数据生成时间,记为first_ptk_time。在将索引区存储空间分块的情况下,可以额外预留空间,以在单块存满后,记录该块的统计信息。
在设计数据区存储空间时,可以根据data_len和max_num_data的数值,给数据区分配充足的地址空间。在数据区存储空间中,要存储数据均以长度data_len进行读写,且每条数据首尾相连,不会产生间隙。在将数据区存储空间分块的情况下,可以额外预留空间,用于存储单块内最早数据和最晚数据对应的时间。
以下结合具体实施例对上述设计索引区存储空间和数据区存储空间的过程进行详细说明。
实施例一
存在一台数据采集传输设备(简称“数采仪”),可以同时采集五个传感器数值。要求数采仪每一分钟存储一下各传感器的平均值,最长需要存储五年的数据。假设数采仪所使用的存储设备为64M字节的NandFlash(共512块,每块64页,每页2048+64字节)。
需要说明的是,由于NandFlash在使用时,一般会有坏块以及有磨损平衡设计等,故在程序设计时,会有逻辑块号和物理块号的映射设计,应用使用编号不变的逻辑块号,驱动负责将逻辑块号“翻译”为真实的物理块号,再进行读写。本公开实施例中使用的全部是逻辑块号。且NandFlash只能从1写为0,而不能从0写为1。在使用NandFlash作为存储介质时,使用0表示写入,1表示未写入。
在进行内存设计时,根据前述描述,要求1分钟存一条,一天就需要存1440条,一年就是525600条,五年至少是2628000条,即max_num_data=2628000条。NandFlash每块共2048×64=131072字节,故每块可存131072×8=1048576个标记,即五年的数据至少需要2628000÷1048576≈2.5块用来存储标记。有五个传感器,每个都用一个单精度浮点数(4字节)来存储,故一包数据共占用5*4=20字节,即data_len=20,故每块能存131072÷20≈6553条数据,即共需要2628000÷6553≈402块存储数据。因此可以设计NandFlash中的第1块至第3块作为索引区存储空间,以及设计NandFlash中的第4块至第405块作为数据区存储空间,余下的块用于替换坏块。
图3示意性示出了根据本公开实施例的索引去存储空间的示意图。
如图3所示,示意性示出了分块的索引区存储空间的前两个索引块存储空间(第0块、第1块)的示意图,每块包括64页,每页包括2048字节的标记区和64字节的space区(即备份区存储空间)。针对索引区存储空间中的详细设置可以包括:第0块的前四个字节存储写入第一包数据所对应的UNIX时间戳,余下的除space区外的内存空间,均用于存储写入标记,1表示未写入,0表示写入。即第0块的第0页可以存储(2048-4)×8=16352条数据的写入标记,第0块的第2页至第64页以及其余块的各页均可存储2048×8=16384条数据的写入标记。每页后面的64字节的space区,前几个字节通常会用于存储坏块标记、使用标记、逻辑块号、校验值等,本实施例中可以在该space区内空闲位置,使用1个字节来存储本页写入标记是否已写满,再用2个字节存储标记写满后,本页存储的标记中有多少个0。
实施例二
存在一台普通的测温设备,仅采集温度。要求每十分钟存储一下十分钟内的平均值,至少需要存储近一个月的数据。假设数据采集传输设备所使用的存储设备为32K字节的铁电。
需要说明的是,将铁电所有位初始化后为0。在使用铁电作为存储介质时,使用0表示未写入,1表示写入。
在进行内存设计时,根据前面的描述,要求10分钟存一条,一天就需要存144条,一个月最多就是4464条,即max_num_data=4464条。每条都用一个单精度浮点数来存储,故一包数据共占用4字节,即data_len=4,故一个月的数据共占用4464×4=17856字节,即17.5K字节。而4464条数据,共需4464÷8=558字节的索引区存储空间。因此,可以设计前1K字节空间作为索引区存储空间,余下的内存空间作为数据区存储空间。
针对索引区存储空间中的详细设置可以包括:索引区存储空间中的前四个字节可以存储写入第一包数据所对应的UNIX时间戳,后面每128字节可以作为一个标记块,类似于NandFlash的页,1K字节除去前四个字节,共可分为7个标记块,还余124字节,使用7×3=21个字节分别标记每个标记块的使用情况,标记方式同实施例一一样,使用1个字节来存储本页写入标记是否已写满,再用两个字节存储标记写满后,本页存储的标记中有多少个1。
实施例三
存在一台数据采集传输设备(简称“数采仪”),可以同时采集五个传感器数值。要求当其中一个数值超过阈值时数采仪记录一下此刻各传感器的瞬时值,至少记录200万条,即max_num_data=200万条。假设数据采集传输设备所使用的存储设备为64M字节的NandFlash(共512块,每块64页,每页2048+64字节)。
在进行内存设计时,根据前述描述,有五个传感器,每个都用一个单精度浮点数来存储,故一包数据共占用5*4=20字节,即data_len=20,故每块能存2048×64÷20=6553条数据。NandFlash每块共2048×64=131072字节,故每块可存131072×8=1048576个标记,即可对应1048576×20÷131072=160块的数据区存储空间,4块对应160*4=640块数据区存储空间。因此使用第1块至第4块作为索引区存储空间,第5块至第460块(共456块)作为数据区存储空间,余下的块用于替换坏块。数据区共可存456×6553=2,988,168条数据。
针对索引区存储空间中的详细设置,与实施例一中的设置方式一致,在此不再赘述。
通过如上实施例一至三,举例说明了在确定max_num_data之后,对应于不同种类的存储介质设计索引区存储空间和非索引区存储空间的方式。在设计完成之后,即可基于上述数据存储方法,执行数据存储过程。
根据本公开的实施例,数据存储过程可包括:初始化、写数据、读数据。
需要说明的是,每次设备上电后,均需要先执行初始化操作。以下基于实施例一,结合图4~图6,对上述初始化、写数据、读数据的过程分别进行详细描述。
图4示意性示出了根据本公开实施例的初始化的流程图。
如图4所述,初始化过程包括操作S401~S418。
在操作S401,读取索引区的UNIX时间戳,存入变量first_ptk_time中。
在操作S402,判断时间戳是否有效?若是,则执行操作S404~所06;若否,则执行操作S403。
在操作S403,变量设为如下值:is_initial=false,offset_w_data=0,offset_w_flag=0。
在操作S404,is_initial=true。
在操作S405,通过公式:[(当前时间-first_ptk_time)/cycle_storage]得到下一包数据与第一包数据的间隔包数,记为offset_w_flag,即得到下一包数据对应的标记存储位置。
在操作S406,判断offset_w_flag是否在索引区有效范围内?若是,则执行操作S407~S408;若否,则执行操作S409。
在操作S407,初始化变量total_flags=16352,total_w_flags=0。
在操作S408,判断total_flags是否小于offset_w_flag?若是,则执行操作S413;若否,则执行操作S410~S412。
在操作S409,offset_w_flag与offset_w_data均设置为最大值。
在操作S410,统计本页0的数量,记为total_zero_page。
在操作S411,total_w_flags+=total_zero_page。
在操作S412,offset_w_data=total_w_flags*data_len。
在操作S413,判断读取space区的存满标记是否为0x01?若是,则执行操作S417~S418;若否,则执行操作S414~S416以及S418。
在操作S414,统计本页0的数量,记为total_zero_page。
在操作S415,total_w_flags+=total_zero_page。
在操作S416,设置space区域的存满标记为0x01,设置当前0的总个数为total_w_flags。
在操作S417,读取space区存储的当前0的总数量,并赋值给total_w_flags。
在操作S418,total_flags+=16384。
根据本公开的实施例,初始化过程中可以主要完成如下操作:确定下次标记(offset_w_flag)和数据(offset_w_data)的写入地址,和补全断电期间索引区内缺的3个字节的统计信息(1字节的前块索引区域是否存满标记,和2字节的前块索引区域内共有多少写入标记)。若发现储存设备还未使用(如铁电介质的索引区存储空间的前四个字节为0x00000000,NandFlash的索引区存储空间的前四个字节为0xFFFFFFFF),则确定时间戳无效,标记变量is_initial为false,表示初次使用;否则确定时间戳有效,标记变量is_initial为true,表示非初次使用。至此,初始化工作完成。
图5示意性示出了根据本公开实施例的写数据的流程图。
如图5所述,初始化过程包括操作S501~S509。
在操作S501,判断offset_w_flag是否在索引区有效范围内?若是,则执行操作S502~S503;若否,则结束流程。
在操作S502,将offset_w_flag所标识的位置置0。
在操作S503,判断offset_w_flag标识的位置是否为本页的最后一位?若是,则执行操作S504~S508;若否,则执行操作S506~S508。
在操作S504,统计本页0的数量并设置space区域的存满标记和当前0的总个数。
在操作S505,offset_w_flag自增。
在操作S506,将数据写到offset_w_data所对应的地址。
在操作S507,offset_w_data+=data_len。
在操作S508,判断is_initial是否为true?若是,则结束流程;若否,则执行操作S509。
在操作S509,在索引区写入Unix时间戳,设置is_initial=true。
根据本公开的实施例,写入数据时,可以直接将数据写入到offset_w_data指向的地址,并向offset_w_flag指向的地址写写入标记,同时更新这两个地址为下一次的写入地址。若为周期性存储数据,且is_initial为false,则还需在索引区写入首条数据对应的时间first_ptk_time。若此时前块索引区已写满,则还需额外对该索引块进行统计,即设置写满标记并将统计到的写入标记的数量写入。若为非周期性存储,若此时写入数据为块首,则在对应区域存入本块最早数据对应的时间;若为块尾,则在对应区域存入本块最早数据对应的时间。
图6示意性示出了根据本公开实施例的读数据的流程图。
如图6所述,初始化过程包括操作S601~S608。
在操作S601,判断offset_w_flag是否在索引区有效范围内?若是,则执行操作S602;若否,则结束流程。
在操作S602,判断offset_w_flag是否为一页的结尾?若是,则执行操作S603和S607~S608;若否,则执行操作S604~S608。
在操作S603,读取本页space去的存储的0的总个数,并赋值给total_w_flags。
在操作S604,读取上一页space区的存储的0的总个数,并赋值给total_w_flags。
在操作S605,统计本页offset_w_flag之前0的总个数,并赋值给total_zero_page。
在操作S606,total_w_flags+=total_zero_page。
在操作S607,计算所读数据的存储地址offset_r_data=total_w_flags*data_len。
在操作S608,读出数据。
根据本公开的实施例,读取数据时,若为周期性存储数据,可以通过所读数据与first_ptk_time的时差,结合cycle_storage计算得到此条数据对应的写入标记位置,并读取标记。若不存在则结束读取。若存在则计算此标记前面一共有多少写入标记,从而得到数据地址。然后,从数据区对应位置读取数据。若为非周期性存储数据,则直接读取数据区每块存储数据对应的最早、最晚时间,从而定位所读数据的所在块,然后分别读取块内每条数据,找到所需读取的数据。
需要说明的是,如上述图4~图6所示的流程可使用其他各类存储介质,只需在实际操作时根据介质中索引区存储空间和数据区存储空间的细节设置,修改必要的参数值即可。
需要说明的是,本公开提供的应用于存储介质的数据存储方法,可以应用于任何需要存储数据的领域,可使用不同编程语言,使用各种存储介质,应用到各种场景。
通过本公开的上述实施例,本公开所提供的数据存储方法,无需复杂的代码,仅需几个关键变量就可实现。索引区存储空间占用空间极小,大部分存储空间都可用在存储数据上,且为高密度存储,无空间浪费。对中央处理器的RAM和ROM要求都很低,可有效降低嵌入式设备成本及存储难度。
基于上述应用于存储介质的数据存储方法,本公开还提供了一种应用于存储介质的数据存储装置。以下将结合图7对该装置进行详细描述。
图7示意性示出了根据本公开实施例的应用于存储介质的数据存储装置的结构框图。其中,存储介质中包括索引区存储空间和数据区存储空间。
如图7所示,应用于存储介质的数据存储装置700包括获取模块710、第一确定模块720、第二确定模块730、第三确定模块740、第一存储模块750和记录模块760。
获取模块710,用于获取待存储数据,其中,待存储数据具有固定的二进制长度。
第一确定模块720,用于响应于确定数据区存储空间中未存储数据,将数据区存储空间的开始地址确定为目标写入地址。
第二确定模块730,用于响应于确定数据区存储空间中已存储有至少一个已存储数据,确定已存储至数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至数据区存储空间中的第一个已存储数据对应的开始地址等于数据区存储空间的开始地址,已存储至数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:前一个已存储数据对应的结束地址的下一地址等于后一个已存储数据对应的开始地址。
第三确定模块740,用于将目标结束地址的下一地址确定为目标写入地址。
第一存储模块750,用于将待存储数据存储至目标写入地址对应的数据区存储空间。
记录模块760,用于在索引区存储空间中记录写入标记,其中,写入标记表征将与写入标记相对应的要存储数据存储至数据区存储空间的过程为存储成功或存储失败,要存储数据表征待存储数据、已存储数据和未存储数据其中任意之一。
根据本公开的实施例,待存储数据包括非周期性存储数据,数据区存储空间包括M个数据块存储空间,每个数据块存储空间中包括第一备份区存储子空间;第一存储模块包括第一记录单元和/或第二记录单元。
第一记录单元,用于响应于确定待存储数据为存储至第m个数据块存储空间中的第一个要存储数据,在第m个数据块存储空间对应的第一备份区存储子空间中记录待存储数据对应的数据生成时间,作为第m个数据块存储空间对应的存储起始时间。
第二记录单元,用于响应于确定待存储数据为存储至第m个数据块存储空间中的最后一个要存储数据,在第m个数据块存储空间对应的第一备份区存储子空间中记录待存储数据对应的数据生成时间,作为第m个数据块存储空间对应的存储终止时间,其中,1≤m≤M,M为正整数。
根据本公开的实施例,待存储数据包括非周期性存储数据;记录模块包括第三记录单元。
第三记录单元,用于响应于确定将非周期性存储数据存储至数据区存储空间的过程存储成功,在索引区存储空间中顺序记录表征存储成功的写入标记。
根据本公开的实施例,待存储数据包括周期性存储数据;记录模块包括存储单元和确定单元。
存储单元,用于响应于确定数据区存储空间中未存储数据,在索引区存储空间的预定存储空间中存储待存储数据对应的数据生成时间,其中,预定存储空间包括以索引区存储空间的开始地址为开始地址、具有预定空间长度的存储空间。
确定单元,用于将预定存储空间对应的结束地址的下一地址确定为写入标记的标记地址。
根据本公开的实施例,待存储数据包括周期性存储数据;记录模块包括第四记录单元和第五记录单元。
第四记录单元,用于响应于确定将周期性存储数据存储至数据区存储空间的过程存储成功,在索引区存储空间中记录表征存储成功的写入标记。
第五记录单元,用于响应于确定将周期性存储数据存储至数据区存储空间的过程存储失败,在索引区存储空间中记录表征存储失败的写入标记。
根据本公开的实施例,索引区存储空间包括N个索引块存储空间,每个索引块存储空间中包括第二备份区存储子空间;记录模块包括第六记录单元、获取单元和第七记录单元。
第六记录单元,用于响应于接收到要记录写入标记的指令,在索引区存储空间中顺序记录写入标记。
获取单元,用于响应于确定第n个索引块存储空间中存满写入标记,获取第1至n个索引块存储空间中包括的表征存储成功的目标写入标记的总数目。
第七记录单元,用于在第n个索引块存储空间对应的第二备份区存储子空间中记录表征第n个索引块存储空间中存满写入标记的存满标记以及记录总数目,其中,1≤n≤N,N为正整数。
根据本公开的实施例,应用于存储介质的数据存储装置还包括第二存储模块和更新模块。
第二存储模块,用于响应于在当前时刻检测到存在表征存储失败的目标写入标记对应的未存储数据,在将当前时刻生成的待存储数据存储入数据区存储空间之前,将未存储数据存储入数据区存储空间。
更新模块,用于将目标写入标记更新为表征存储成功的写入标记。
根据本公开的实施例,获取模块710、第一确定模块720、第二确定模块730、第三确定模块740、第一存储模块750和记录模块760中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,获取模块710、第一确定模块720、第二确定模块730、第三确定模块740、第一存储模块750和记录模块760中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获取模块710、第一确定模块720、第二确定模块730、第三确定模块740、第一存储模块750和记录模块760中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图8示意性示出了根据本公开实施例的适于实现应用于存储介质的数据存储方法的电子设备的方框图。
如图8所示,根据本公开实施例的电子设备800包括处理器801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 803中,存储有电子设备800操作所需的各种程序和数据。处理器801、ROM802以及RAM 803通过总线804彼此相连。处理器801通过执行ROM 802和/或RAM 803中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 802和RAM 803以外的一个或多个存储器中。处理器801也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备800还可以包括输入/输出(I/O)接口805,输入/输出(I/O)接口805也连接至总线804。电子设备800还可以包括连接至I/O接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 802和/或RAM 803和/或ROM 802和RAM 803以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的物品推荐方法。
在该计算机程序被处理器801执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分809被下载和安装,和/或从可拆卸介质811被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (10)
1.一种应用于存储介质的数据存储方法,其中,所述存储介质中包括索引区存储空间和数据区存储空间;所述方法包括:
获取待存储数据,其中,所述待存储数据具有固定的二进制长度;
响应于确定所述数据区存储空间中未存储数据,将所述数据区存储空间的开始地址确定为目标写入地址;
响应于确定所述数据区存储空间中已存储有至少一个已存储数据,确定已存储至所述数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至所述数据区存储空间中的第一个已存储数据对应的开始地址等于所述数据区存储空间的开始地址,已存储至所述数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:所述前一个已存储数据对应的结束地址的下一地址等于所述后一个已存储数据对应的开始地址;
将所述目标结束地址的下一地址确定为所述目标写入地址;
将所述待存储数据存储至所述目标写入地址对应的数据区存储空间;以及
在所述索引区存储空间中记录写入标记,其中,所述写入标记表征将与所述写入标记相对应的要存储数据存储至所述数据区存储空间的过程为存储成功或存储失败,所述要存储数据表征所述待存储数据、所述已存储数据和未存储数据其中任意之一。
2.根据权利要求1所述的方法,其中,所述待存储数据包括非周期性存储数据,所述数据区存储空间包括M个数据块存储空间,每个所述数据块存储空间中包括第一备份区存储子空间;所述将所述待存储数据存储至所述目标写入地址对应的数据区存储空间包括:
响应于确定所述待存储数据为存储至第m个数据块存储空间中的第一个要存储数据,在所述第m个数据块存储空间对应的第一备份区存储子空间中记录所述待存储数据对应的数据生成时间,作为所述第m个数据块存储空间对应的存储起始时间;和/或
响应于确定所述待存储数据为存储至第m个数据块存储空间中的最后一个要存储数据,在所述第m个数据块存储空间对应的第一备份区存储子空间中记录所述待存储数据对应的数据生成时间,作为所述第m个数据块存储空间对应的存储终止时间,其中,1≤m≤M,M为正整数。
3.根据权利要求1所述的方法,其中,所述待存储数据包括非周期性存储数据;所述在所述索引区存储空间中记录写入标记包括:
响应于确定将所述非周期性存储数据存储至所述数据区存储空间的过程存储成功,在所述索引区存储空间中顺序记录表征存储成功的写入标记。
4.根据权利要求1所述的方法,其中,所述待存储数据包括周期性存储数据;所述在所述索引区存储空间中记录写入标记包括:
响应于确定所述数据区存储空间中未存储数据,在所述索引区存储空间的预定存储空间中存储所述待存储数据对应的数据生成时间,其中,所述预定存储空间包括以所述索引区存储空间的开始地址为开始地址、具有预定空间长度的存储空间;以及
将所述预定存储空间对应的结束地址的下一地址确定为所述写入标记的标记地址。
5.根据权利要求1所述的方法,其中,所述待存储数据包括周期性存储数据;所述在所述索引区存储空间中记录写入标记包括:
响应于确定将所述周期性存储数据存储至所述数据区存储空间的过程存储成功,在所述索引区存储空间中记录表征存储成功的写入标记;以及
响应于确定将所述周期性存储数据存储至所述数据区存储空间的过程存储失败,在所述索引区存储空间中记录表征存储失败的写入标记。
6.根据权利要求1所述的方法,其中,所述索引区存储空间包括N个索引块存储空间,每个所述索引块存储空间中包括第二备份区存储子空间;所述在所述索引区存储空间中记录写入标记包括:
响应于接收到要记录写入标记的指令,在所述索引区存储空间中顺序记录所述写入标记;
响应于确定第n个索引块存储空间中存满所述写入标记,获取第1至n个索引块存储空间中包括的表征存储成功的目标写入标记的总数目;以及
在所述第n个索引块存储空间对应的第二备份区存储子空间中记录表征所述第n个索引块存储空间中存满所述写入标记的存满标记以及记录所述总数目,其中,1≤n≤N,N为正整数。
7.根据权利要求1所述的方法,还包括:
响应于在当前时刻检测到存在表征存储失败的目标写入标记对应的未存储数据,在将所述当前时刻生成的待存储数据存储入所述数据区存储空间之前,将所述未存储数据存储入所述数据区存储空间;以及
将所述目标写入标记更新为表征存储成功的写入标记。
8.一种应用于存储介质的数据存储装置,其中,所述存储介质中包括索引区存储空间和数据区存储空间;所述装置包括:
获取模块,用于获取待存储数据,其中,所述待存储数据具有固定的二进制长度;
第一确定模块,用于响应于确定所述数据区存储空间中未存储数据,将所述数据区存储空间的开始地址确定为目标写入地址;
第二确定模块,用于响应于确定所述数据区存储空间中已存储有至少一个已存储数据,确定已存储至所述数据区存储空间中的最后一个已存储数据对应的目标结束地址,其中,已存储至所述数据区存储空间中的第一个已存储数据对应的开始地址等于所述数据区存储空间的开始地址,已存储至所述数据区存储空间中的任意相邻的前一个已存储数据和后一个已存储数据满足:所述前一个已存储数据对应的结束地址的下一地址等于所述后一个已存储数据对应的开始地址;
第三确定模块,用于将所述目标结束地址的下一地址确定为所述目标写入地址;
第一存储模块,用于将所述待存储数据存储至所述目标写入地址对应的数据区存储空间;以及
记录模块,用于在所述索引区存储空间中记录写入标记,其中,所述写入标记表征将与所述写入标记相对应的要存储数据存储至所述数据区存储空间的过程为存储成功或存储失败,所述要存储数据表征所述待存储数据、所述已存储数据和未存储数据其中任意之一。
9.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211264341.0A CN115562587A (zh) | 2022-10-12 | 2022-10-12 | 应用于存储介质的数据存储方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211264341.0A CN115562587A (zh) | 2022-10-12 | 2022-10-12 | 应用于存储介质的数据存储方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115562587A true CN115562587A (zh) | 2023-01-03 |
Family
ID=84746095
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211264341.0A Pending CN115562587A (zh) | 2022-10-12 | 2022-10-12 | 应用于存储介质的数据存储方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115562587A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116339646A (zh) * | 2023-05-30 | 2023-06-27 | 西安中飞航空测试技术发展有限公司 | 飞行试验数据存储方法、装置、设备及存储介质 |
CN116719480A (zh) * | 2023-08-04 | 2023-09-08 | 青岛鼎信通讯股份有限公司 | 一种基于数据孪生的电能表数据存储方法、装置及介质 |
CN118573674A (zh) * | 2024-08-01 | 2024-08-30 | 恒生电子股份有限公司 | 数据访问处理方法、装置、设备、存储介质及程序产品 |
-
2022
- 2022-10-12 CN CN202211264341.0A patent/CN115562587A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116339646A (zh) * | 2023-05-30 | 2023-06-27 | 西安中飞航空测试技术发展有限公司 | 飞行试验数据存储方法、装置、设备及存储介质 |
CN116339646B (zh) * | 2023-05-30 | 2023-08-11 | 西安中飞航空测试技术发展有限公司 | 飞行试验数据存储方法、装置、设备及存储介质 |
CN116719480A (zh) * | 2023-08-04 | 2023-09-08 | 青岛鼎信通讯股份有限公司 | 一种基于数据孪生的电能表数据存储方法、装置及介质 |
CN116719480B (zh) * | 2023-08-04 | 2023-11-14 | 青岛鼎信通讯股份有限公司 | 一种基于数据孪生的电能表数据存储方法、装置及介质 |
CN118573674A (zh) * | 2024-08-01 | 2024-08-30 | 恒生电子股份有限公司 | 数据访问处理方法、装置、设备、存储介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115562587A (zh) | 应用于存储介质的数据存储方法、装置、设备及存储介质 | |
CN102508784B (zh) | 视频监控设备中闪存卡的数据存储方法及其系统 | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
US8549271B1 (en) | Method, system, and computer readable medium for updating and utilizing the contents of a non-essential region of a memory device | |
KR101933766B1 (ko) | 플래시 메모리 플러싱을 개선하는 방법 및 시스템 | |
US20140372675A1 (en) | Information processing apparatus, control circuit, and control method | |
CN103279406B (zh) | 一种内存的隔离方法和装置 | |
CN110765076B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
JP6242930B2 (ja) | センサデータ管理装置、センサデータ管理方法およびプログラム | |
JP2016540297A (ja) | Nandメモリデバイス内に記憶されたデータのフェールセーフリフレッシュ | |
CN112835528B (zh) | 脏页刷新方法和装置、电子设备和存储介质 | |
EP4209887A1 (en) | Method for memory management, and apparatus for same | |
US9069807B2 (en) | Method and system for implementing an array using different data structures | |
CN112783711A (zh) | NodeJS上程序内存分析的方法、存储介质 | |
CN110795031A (zh) | 一种基于全闪存储的数据重删方法、装置和系统 | |
US20100287331A1 (en) | Electronic device and method for recording power-on time thereof | |
CN115080680B (zh) | 用于高精地图的激光点云数据处理方法、装置及设备 | |
CN115630100A (zh) | 单元和多元时序数据的混合处理方法、装置及计算机设备 | |
CN114138184A (zh) | 一种数据重删的下刷方法、装置、设备和介质 | |
CN112882659A (zh) | 一种信息获得方法、装置、电子设备及存储介质 | |
KR100932096B1 (ko) | 낸드 플래시 메모리의 데이터 저장방법 | |
CN112988038A (zh) | 非易失性存储器的数据写入方法、终端和可读存储介质 | |
US20200057570A1 (en) | Method and flash memory controller capable of avoiding inefficient memory block swap or inefficient garbage collection | |
US7457919B2 (en) | Method for memory page management | |
CN112988037A (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 |