CN106959819B - 数据存储方法、装置和系统以及便携式电子设备 - Google Patents

数据存储方法、装置和系统以及便携式电子设备 Download PDF

Info

Publication number
CN106959819B
CN106959819B CN201610016472.5A CN201610016472A CN106959819B CN 106959819 B CN106959819 B CN 106959819B CN 201610016472 A CN201610016472 A CN 201610016472A CN 106959819 B CN106959819 B CN 106959819B
Authority
CN
China
Prior art keywords
data
file
dirty
queue
dirty 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.)
Active
Application number
CN201610016472.5A
Other languages
English (en)
Other versions
CN106959819A (zh
Inventor
梁捷
张宜丰
黄钦泉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Guangzhou Dongjing Computer Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Dongjing Computer Technology Co Ltd filed Critical Guangzhou Dongjing Computer Technology Co Ltd
Priority to CN201610016472.5A priority Critical patent/CN106959819B/zh
Publication of CN106959819A publication Critical patent/CN106959819A/zh
Application granted granted Critical
Publication of CN106959819B publication Critical patent/CN106959819B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Abstract

本发明公开了一种数据存储方法、装置和系统以及便携式电子设备。该方法包括:创建预定大小的脏数据记录文件;确定待写入队列的队首数据在数据文件中的目标存储位置;在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据;以及更新所述脏数据记录文件。利用本发明,解决了因磁盘空间不足而导致数据文件和脏数据记录文件写入失败的问题,由此避免了出现脏数据不一致,从而降低了写文件失败率。

Description

数据存储方法、装置和系统以及便携式电子设备
技术领域
本发明总体上涉及数据存储技术领域,特别是涉及一种分段写入的数据存储方法、装置和系统以及便携式电子设备。
背景技术
目前最常见的文件下载方式是并发多段及断点续传,即下载时将文件分成多段数据,每段数据分别以一个独立的线程下载,且同时运行多个下载线程。当某个时间点下载任务暂停,此时下载的位置就是断点,当此未完成的下载任务再次开始时,会从此断点继续传送。并发多段及断点续传能够避免重复下载,充分利用网络带宽,由此提高下载速度。
然而,随着诸如智能手机的便携式移动设备的普及,给传统的并发多段方案带来了新的挑战。这是因为,并发多段下载方案需要跳转式地写文件,文件越大,通常需要跳转的距离越大(例如,在均分算法的情况下)。而相比于网速的快速提升,目前的便携式移动设备上的存储介质(例如,安全数字存储卡,即SD卡)读写速度慢,而且部分文件系统(例如,文件配置表系统,即FAT文件系统)不能快读创建大文件,即不支持快读跳转到指定的位置进行读写。结果是,缓存中的下载数据不能及时写入存储介质中,也不能从网络端下载新数据,从而造成下载卡顿的现象。
为了提高下载写文件性能,避免大距离跳转写数据到文件,现有技术中提出了使用类似于磁盘整理的脏数据位置调整算法进行数据存储。脏数据是指不在匹配的位置写入文件的数据。这种方案在数据存储过程中均衡地增加数据文件的大小由此减少跳转距离,将数据文件中的脏数据读出到内存中,使用适当的内存消耗换取写文件速度的提升。具体地,参照图1简要描述该方案。
图1所示的数据存储方法100中,数据下载时首先获取待存储数据块,然后判断存储介质上是否有足够的存储空间(步骤S110)。如果存储空间不足,则暂停下载任务(步骤S120)。如果存储空间足够,则执行步骤S130将要写入的数据块放到内存中的待写入队列中。接下来处理该待写入队列的队首数据:判断队首数据在数据文件中的目标存储位置是否被脏数据占用(步骤S140)。如果该目标存储位置没有被脏数据占用,则执行步骤S150将该队首数据直接写入该目标存储位置。如果该目标存储位置被脏数据占用,则执行步骤S160将占用该目标存储位置的脏数据作为待存储数据读出到内存中的待写入队列,例如添加到待写入队列的队尾。此时,该目标存储位置为空,然后执行步骤S150将队首数据写入目标存储位置。接下来判断待写入队列是否为空(步骤S170),如果该写入队列中已经没有待存储数据块,则执行步骤S180,将数据文件中的脏数据记录写入脏数据记录文件。如果该待写入队列中还有要待存储数据块,则继续处理该待写入队列的队首数据,即,继续执行步骤S140,直到待写入队列为空。待写入队列中的待存储数据块全部写入到数据文件之后,再将脏数据记录写入脏数据记录文件,这样完成了数据存储。
图2示意性地示出了图1中描述的数据存储方法的一个实例。参考图2,已经创建了包括四个存储位置的数据文件,其中第一个和第三个存储位置被脏数据p和q占用,第二个和第四个位置空闲。待写入队列包括待存储数据块m和n。脏数据记录文件包括脏数据p和q的记录。第一至第四存储位置分别是数据块m、n、p和q的目标存储位置。首先处理数据块m,m在数据文件中的目标存储位置被脏数据p占用,因此将脏数据p读出到待写入队列的队尾,然后将待存储数据块m写入数据文件的第一个存储位置。此时,待写入队列包括待存储数据块n和p。按照同样的方法,将待存储数据块n和p依次写入数据文件中的对应目标存储位置,参见图2。然后,更新脏数据记录文件,删除脏数据p和q的记录。
上述方法在数据存储时写两个文件,即,数据文件和脏数据记录文件。只有在数据文件中的脏数据与脏数据记录文件中的脏数据记录完全匹配(下文中简称脏数据一致,若两者不一致则称脏数据不一致)时,才能正确解析数据文件的结构。而脏数据不一致时,会导致数据文件结构信息错乱,从而数据存储完成后无法有效打开。在文件下载过程中,由于外部原因导致磁盘空间变化、写入位置跳跃导致实际消耗空间大于数据本身以及处理脏数据节点等原因,写入数据文件和写入脏数据记录文件有可能因为磁盘空间不足而写入失败。将数据放到待写入队列前的空间检查并不能保证避免这种写入失败。写入失败会导致脏数据不一致,尽管用户腾出足够空间后可以继续下载,但下载完的文件不完整而无法打开,大大降低了下载效率。
在图1和图2中所示的数据存储方法100中,脏数据被不断地读出到内存并添加到待写入队列。在这种状态下,脏数据在脏数据记录文件中存在,而在数据文件中不存在。此时,如果发生磁盘空间不足,则脏数据无法写回数据文件,将导致脏数据记录文件与数据文件中的脏数据不一致。另一方面,数据文件中的脏数据发生变化后,需要及时把脏数据记录写入记录文件。如果脏数据记录文件过大,也会导致出现磁盘空间不足的情况使得脏数据记录无法写入,从而造成脏数据不一致。
因而,需要一种能够避免因磁盘空间不足而导致脏数据不一致的数据存储方法与装置。
发明内容
本发明的一个目的在于有效避免数据下载过程中因磁盘空间不足而导致脏数据不一致的情况发生,保证下载的数据文件能够有效打开。
为此,本发明的数据存储方法、装置和系统,通过在磁盘空间创建预定大小的脏数据记录文件且在整个下载过程中保持其大小不变,解决脏数据记录文件下载过程中需要增长的问题,由此避免脏数据记录文件写入失败。进一步,本发明通过脏数据递归优先写入,解决脏数据无法写回数据文件的问题,由此避免脏数据只存在内存中的不稳定状态。即使磁盘空间满导致数据文件写入失败时,只需将新的脏数据记录写回脏数据记录文件,就可以避免出现脏数据不一致。
根据本发明的一个方面,提供了一种数据存储方法。该数据存储方法包括以下步骤:创建预定大小的脏数据记录文件;确定待写入队列的队首数据在数据文件中的目标存储位置;在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据;以及更新所述脏数据记录文件。利用本方法,使得数据文件中的脏数据与脏数据记录文件中的脏数据记录始终保持一致,降低了写文件失败率。
在一个实施例中,所述数据存储方法还包括步骤:在确定所述目标存储位置未被脏数据占用的情况下,基于所述队首数据在所述目标存储位置进行写入。
在进一步的实施例中,所述基于所述队首数据在所述目标存储位置进行写入的步骤包括:判断所述队首数据是否为脏数据记录;若判定所述队首数据不是脏数据记录,则将所述队首数据写入到所述数据文件中的所述目标存储位置;以及若判定所述队首数据是脏数据记录,则从所述数据文件中读出与所述脏数据记录相对应的脏数据,并将该脏数据写入到所述数据文件中的所述目标存储位置。
在一个实施例中,所述队首数据的目标存储位置是所述数据文件中与所述队首数据的存储位置标识相对应的存储位置,或者是所述数据文件中根据移动位置限制而指定的临时存储位置。
在一个实施例中,所述更新所述脏数据记录文件的步骤是在所述数据文件中写入了脏数据的情况下执行的。
在进一步的实施例中,所述更新所述脏数据记录文件的步骤包括:判断是否基于所述队首数据在所述目标存储位置成功地进行了写入;以及若判定在所述目标存储位置成功地进行了写入,则在所述队首数据是脏数据记录的情况下以及/或者在所述队首数据的目标存储位置是指定的临时存储位置的情况下,更新所述脏数据记录文件。
在一个实施例中,所述数据存储方法还包括如下步骤:检查对所述数据文件的读写处理是否成功,以检测是否存在存储空间不足的情况;和在检测到对所述数据文件的读写处理不成功的情况下,暂停对该数据文件的数据存储。由此,通过检查读写文件的结果并确定是否磁盘空间已满,不但可以及时中断后续的写入尝试,同时还可以省去数据放到待写入队列前的空间预检查,减少了下载过程中不必要的资源消耗。
在一个实施例中,所述脏数据记录文件的预定大小被设置为大于或等于数据存储过程中所需的用于存储脏数据记录的最高存储空间容量。在进一步的实施例中,所述脏数据记录文件的预定大小与待存储的数据的大小相关联。
根据本发明的另一个方面,提供了一种数据存储装置。该数据存储装置包括:创建模块,用于创建预定大小的脏数据记录文件;确定模块,用于确定待写入队列的队首数据在数据文件中的目标存储位置;插入模块,用于在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据;以及更新模块,用于更新由所述创建模块创建的所述脏数据记录文件。
在一个实施例中,所述数据存储装置还包括写入模块,用于在确定所述目标存储位置未被脏数据占用的情况下,基于所述队首数据在所述目标存储位置进行写入。
在进一步的实施例中,所述写入模块包括:第一判断单元,用于判断所述队首数据是否为脏数据记录;第一写入单元,用于当所述第一判断单元判定所述队首数据不是脏数据记录时,将所述队首数据写入到所述数据文件中的所述目标存储位置;以及第二写入单元,用于当所述第一判断单元判定所述队首数据是脏数据记录时,从所述数据文件中读出与所述脏数据记录相对应的脏数据,并将该脏数据写入到所述数据文件中的所述目标存储位置。
在一个实施例中,所述队首数据的目标存储位置是所述数据文件中与所述队首数据的存储位置标识相对应的存储位置,或者是所述数据文件中根据移动位置限制而指定的临时存储位置。
在一个实施例中,所述更新模块在所述数据文件中写入了脏数据的情况下更新所述脏数据记录文件。
在进一步的实施例中,所述更新模块还包括:第二判断单元,用于判断是否基于所述队首数据在所述目标存储位置成功地进行了写入;以及更新单元,用于当所述第二判断单元判定在所述目标存储位置成功地进行了写入,则在所述队首数据是脏数据记录的情况下以及/或者在所述队首数据的目标存储位置是指定的临时存储位置的情况下,更新所述脏数据记录文件。
在一个实施例中,所述数据存储装置还包括:检查模块,用于检查对所述数据文件的读写处理是否成功,以检测是否存在存储空间不足的情况;暂停模块,用于在所述检查模块检测到对所述数据文件的读写处理不成功的情况下,暂停对该数据文件的数据存储。
在一个实施例中,所述脏数据记录文件的预定大小被设置为大于或等于数据存储过程中所需的用于存储脏数据记录的最高存储空间容量。在进一步的实施例中,所述脏数据记录文件的预定大小与待存储的数据的大小相关联。
根据本发明的又一个方面,还提供了一种数据存储系统。该数据存储系统包括处理器和与该处理器相连的存储器。所述处理器配置为:创建预定大小的脏数据记录文件;确定待写入队列的队首数据在数据文件中的目标存储位置;在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据;以及更新所述脏数据记录文件。所述数据文件和所述脏数据记录文件被配置为存储在所述存储器中。
根据本发明的还一个方面,提供了一种包括根据本发明上述方面所述的数据存储系统的便携式电子设备。
利用本发明的数据存储方法、装置和系统,解决了因磁盘空间不足而导致数据文件和脏数据记录文件写入失败的问题,由此避免了出现脏数据不一致,从而降低了写文件失败率。进一步,本发明用实际写文件结果检查取代磁盘空间预检查,实现了更准确高效的空间检查,节省了下载过程的资源消耗。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了现有技术中一种数据存储方法的流程图。
图2示意性地示出了图1所示数据存储方法的一个实例。
图3示出了根据本发明一实施例的数据存储方法的总流程图。
图4示出了根据本发明实施例的基于队首数据在目标存储位置进行写入并更新脏数据记录文件的处理的流程图。
图5示意性地示出了图3所示数据存储方法的一个实例。
图6示出了根据本发明一实施例的数据存储装置的功能框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
如前所述,为了有效避免数据下载过程中脏数据不一致的情况发生,保证存储之后的数据文件能够有效打开,本发明通过脏数据递归优先写入以及脏数据记录文件磁盘空间预分配且持续持有的方案,来分别解决数据文件写入失败和脏数据记录文件写入失败的问题。可以知道,本发明的使用范围并不仅限于上述介绍的现有技术中的数据存储方法,其可以广泛应用于涉及脏数据位置调整的数据存储方法。进一步,本发明的核心技术方案不限于数据下载情形,而是可以应用于任何涉及分段随机写文件操作的情形。
下面将参照图3至图6来具体地描述本发明的实施例。图3示出了根据本发明一实施例的数据存储方法200的总体流程图。在开始下载数据之前,首先,在磁盘空间中创建预定大小的脏数据记录文件(步骤S210)。在一个实施例中,脏数据记录文件的预定大小被设置为大于或等于数据存储过程中所需的用于存储脏数据记录的最高存储空间容量。即,在下载数据进行存储的过程中,不需要增加脏数据记录文件的大小。从另一个角度来说,脏数据记录文件的大小在整个下载和存储数据的过程中保持不变,由此确保磁盘空间不足不会影响脏数据记录文件写入。
在一个实施例中,可以根据待下载并存储的数据的大小来设置脏数据记录文件的预定大小。作为一种具体实现,脏数据记录文件的预定大小可以与待存储的数据大小非线性相关。例如,当下载4G大小的数据时,创建20K大小的脏数据记录文件。在一个实施例中,在下载过程中更新脏数据记录文件时,可以根据当前脏数据记录的实际大小,覆盖更新脏数据记录文件的部分内容。例如,假设脏数据记录的实际大小为2K,则直接覆盖更新脏数据记录文件前2K的内容,而脏数据记录文件大小始终保持20K。
在开始下载数据时,获取待存储的数据块,并将其压入待写入队列。接下来确定待写入队列的队首数据在数据文件中的目标存储位置(步骤S230)。例如,可以提取该队首数据的存储位置标识,该存储位置标识标明每个数据块在原文件中的对应位置。
接下来,判断数据文件中队首数据的目标存储位置是否被脏数据占用(步骤S250)。如果判定该目标存储位置已被脏数据占用,则执行步骤S270,即,将与该脏数据对应的脏数据记录插入到待写入队列并作为新的队首数据。需要指出的是,与现有技术的数据存储方法100(参见图1)不同的是,本发明中此处并不是将脏数据本身插入到待写入队列,而仅将与脏数据相对应的脏数据记录读出到内存。此时,待写入队列的队首数据是相应的脏数据记录,而非脏数据本身。而且,脏数据记录被插入到待写入队列的队首,优先被处理。由此,避免了脏数据只存在内存中的不稳定状态。
在步骤S270之后,数据存储方法200返回到步骤S230以确定该新的队首数据的目标存储位置,以及步骤S250来判断新队首数据的目标存储位置是否被另一脏数据占用。需要说明的是,在一个实施例中,队首数据的目标存储位置可以是数据文件中与该队首数据的存储位置标识相对应的存储位置,也可以是数据文件中根据移动位置限制而指定的临时存储位置。例如,如果与待处理的脏数据的存储位置标识相对应的存储位置距离该脏数据的当前存储位置超过移动位置限制,则可以将当前队首数据的目标存储位置设置为移动位置限制内的某个位置。在一个实施例中,移动位置限制与卡顿时间限值(例如,1秒)和/或数据文件的扩展速度相关联。
循环执行步骤S230、S250和S270,直到在步骤S250判定待写入文件的队首数据在数据文件中的目标存储位置未被脏数据占用为止。如图3所示,然后流程进行到步骤S280,基于队首数据在目标存储位置进行写入,然后在数据文件中写入了脏数据的情况下更新脏数据记录文件(步骤S290)。至此,数据存储方法200结束。
如前所述,图3所示的数据存储方法200,通过脏数据递归优先写入以及脏数据记录文件磁盘空间预分配且持续持有的方案,使得数据文件中的脏数据与脏数据记录文件中的脏数据记录始终保持一致,保证下载的数据文件能够有效打开,降低了下载失败率。
下面,参照图4来描述图3中写入步骤S280和更新步骤S290的一种具体实施方式300。处理300从步骤S281开始,即,判断队首数据是否为脏数据记录。如果判定队首数据不是脏数据记录,则将该队首数据写入到数据文件中的目标存储位置(步骤S282)。而如果判定队首数据是脏数据记录,则流程进行到步骤S283,即,将数据文件中与该脏数据记录对应的脏数据读出到内存。然后,可以将读出的脏数据写入到数据文件中的目标存储位置(步骤S282)。
为了防止磁盘空间不足(例如,SD卡被移除)导致出现脏数据不一致,优选地,在步骤S283读取对应的脏数据之后,执行判断该脏数据是否读出成功的步骤(S284),如图4所示。在判定脏数据读出成功的情况下,执行步骤S282,将脏数据写入到数据文件中的目标存储位置。如果判定脏数据读出失败,则强制结束对数据文件的当前写入操作。
优选地,在步骤S282对数据文件进行写入之后,判断对数据文件的写入是否成功(步骤S291)。如果判定写入失败,则强制结束对数据文件的当前写入操作。如果步骤S291判定写入成功,则可以检查待写入队列是否为空(步骤S292)。如果待写入队列中仍有未写入数据文件的数据块,则继续处理该待写入队列的队首数据,即,返回到图3中的步骤S230,直至待写入队列为空。在待写入队列为空时,开始更新脏数据记录文件的操作。具体地,如图4所示,判断队首数据的目标存储位置是否与其存储位置标识相对应,即,判断该目标存储位置是否是根据移动位置限制而指定的临时存储位置(步骤S293)。若判定是临时存储位置,意味着产生了新的脏数据记录节点,由此更新脏数据记录文件(步骤S295)。若在步骤S293处判定目标存储位置不是临时存储位置,在队首数据是脏数据记录的情况下(步骤S294中的“是”分支),依然会出现需要删除脏数据记录节点的情形,由此更新脏数据记录文件(步骤S295)。
在待存储数据块全部写入数据文件之后更新脏数据记录文件,保证脏数据记录文件与数据文件中的脏数据一致。就算下载过程中发生磁盘空间不足,也只需要及时将脏数据记录写回脏数据记录文件就可以保持脏数据一致。在解决了磁盘空间不足的问题之后,将脏数据记录中的记录读入到待写入队列中,即可继续顺利进行数据下载。
在一个实施例中,在步骤S295之后,如图4所示,检查对数据文件的读写处理是否成功(步骤S296),以检测是否存在存储空间不足的情况。在读写失败的情况下,可以根据返回的错误码来确定失败的原因,由此可以检测是否出现了磁盘空间不足。如果判定对数据文件的读写处理失败,则暂停对数据文件的数据存储(步骤S297)。这样,可以及时中断后续的写入尝试。而且与现有技术相比,省去数据放到待写入队列前的空间预检查,减少了下载过程中不必要的资源消耗。
下面仍以图2中给出的实例来描述本发明的脏数据递归优先存储处理。参见图5,数据文件的四个存储位置中的第一个和第三个依然被脏数据p和q占用,第二和第四存储位置空闲。待写入队列包括待存储数据块m和n。第一至第四存储位置分别是数据块m、n、p和q的目标存储位置。首先,处理待写入队列的队首数据,即待存储数据块m。此时数据块m在数据文件中的目标存储位置(第一存储位置)被脏数据p占用,因此将与脏数据p对应的脏数据记录p’插入到待写入队列的队首并作为新的队首数据。此时,待写入队列包括三个元素,即(p’,m,n)。
接下来继续处理待写入队列的队首数据,即脏数据记录p’。与脏数据记录p’指向的脏数据p相对应的目标存储位置为第三存储位置。而此时第三存储位置被脏数据q占用。因此,将与脏数据q对应的脏数据记录q’插入到待写入队列作为新的队首数据。现在的待写入队列包括四个元素,即(q’,p’,m,n)。对队首数据q’进行处理,与q’指向的脏数据q相对应的目标存储位置为第四存储位置,该位置空闲,因此先从数据文件中将脏数据q读出并将其写入到第四存储位置。接下去,类似地将脏数据p从第一存储位置读出并写入到第三存储位置。然后再将待存储数据块m和n依次写入数据文件的对应目标存储位置。可见,利用所例示的脏数据递归优先写入方案,能够保证所有脏数据都被写入数据文件,避免出现脏数据不一致的情况。
图6示出了根据本发明一实施例的数据存储装置400的功能框图。用于有效防止脏数据不一致的数据存储装置400的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图6中所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
参照图6,为了有效防止脏数据不一致,数据存储装置400被配置为包括创建模块410、确定模块420、插入模块430、脏数据占用判断模块440、写入模块450和更新模块460。
在开始下载数据之前,创建模块410可以创建预定大小的脏数据记录文件。在一个实施例中,脏数据记录文件的预定大小被设置为大于或等于数据存储过程中所需的用于存储脏数据记录的最高存储空间容量。即,在下载数据进行存储的过程中,不需要增加脏数据记录文件的大小。从另一个角度来说,脏数据记录文件的大小在整个下载和存储数据的过程中保持不变,由此确保磁盘空间不足不会影响脏数据记录文件写入。在一个实施例中,可以根据待下载并存储的数据的大小来设置脏数据记录文件的预定大小。例如,脏数据记录文件的预定大小可以与待存储的数据大小非线性相关。在一个实施例中,在下载过程中更新脏数据记录文件时,可以根据当前脏数据记录的实际大小,覆盖更新脏数据记录文件的部分内容。
确定模块420被配置为确定待写入队列的队首数据在数据文件中的目标存储位置。例如,可以提取该队首数据的存储位置标识,该存储位置标识标明每个数据块在原文件中的对应位置。
需要说明的是,在一个实施例中,队首数据的目标存储位置可以是数据文件中与该队首数据的存储位置标识相对应的存储位置,也可以是数据文件中根据移动位置限制而指定的临时存储位置。例如,如果与待处理的脏数据的存储位置标识相对应的存储位置距离该脏数据的当前存储位置超过移动位置限制,则可以将当前队首数据的目标存储位置设置为移动位置限制内的某个位置。在一个实施例中,移动位置限制与卡顿时间限值(例如,1秒)和/或数据文件的扩展速度相关联。
当确定模块420已经确定了队首数据在数据文件中的目标存储位置之后,脏数据占用判断模块440判断该目标存储位置是否已被脏数据占用。插入模块430被配置为当脏数据占用判断模块440判定该目标存储位置已被脏数据占用时,将与该脏数据相对应的脏数据记录插入到待写入队列并作为新的队首数据。需要指出的是,本发明中此处并不是将脏数据本身插入到待写入队列,而仅将与脏数据相对应的脏数据记录读出到内存。此时,待写入队列的队首数据是相应的脏数据记录,而非脏数据本身。而且,脏数据记录被插入到待写入队列的队首,优先被处理。由此,避免了脏数据只存在内存中的不稳定状态。
写入模块450被配置为当脏数据占用判断模块440判定目标存储位置未被脏数据占用时,基于队首数据在该目标存储位置进行写入。更新模块460被配置为在数据文件中写入了脏数据的情况下,更新由创建模块410创建的脏数据记录文件。这样,通过脏数据递归优先写入以及脏数据记录文件磁盘空间预分配且持续持有的方案,使得数据文件中的脏数据与脏数据记录文件中的脏数据记录始终保持一致,保证下载的数据文件能够有效打开,降低了下载失败率。
在一个实施例中,写入模块450可以被配置为包括第一写入单元451、第一判断单元452和第二写入单元453。第一判断单元452被配置为判断队首数据是否为脏数据记录。第一写入单元451被配置为当第一判断单元452判定队首数据不是脏数据记录时,将该队首数据写入到数据文件中的目标存储位置。第二写入单元453被配置为当第一判断单元452判定队首数据是脏数据记录时,从数据文件中读出与该脏数据记录相对应的脏数据,并将该脏数据写入到数据文件中的目标存储位置。
在另一个实施例中,更新模块460被配置为包括第二判断单元454和更新单元455。第二判断单元454被配置为判断是否基于队首数据在目标存储位置成功地进行了写入。更新单元455被配置为当第二判断单元454判定在目标存储位置成功地进行了写入,则在队首数据是脏数据记录的情况下以及/或者在队首数据的目标存储位置是指定的临时存储位置的情况下,更新脏数据记录文件。在数据文件中写入了脏数据的情况下更新脏数据记录文件,确保此时脏数据记录文件中有该脏数据的对应记录,防止出现脏数据不一致的情况。就算下载过程中发生磁盘空间不足,也只需要及时将脏数据记录写回脏数据记录文件就可以保持脏数据一致。在解决了磁盘空间不足的问题之后,将脏数据记录中的记录读入到待写入队列中,即可继续顺利进行数据下载。
在本发明的一个实施例中,上述数据存储装置400还可以包括检查模块470和暂停模块480。检查模块470被配置为检查对数据文件的读写处理是否成功,以检测是否存在存储空间不足的情况。暂停模块480被配置为当检查模块470判定在检测到对数据文件的读写处理不成功的情况下,暂停对该数据文件的数据存储。这样,可以及时中断后续的写入尝试。而且与现有技术相比,省去数据放到待写入队列前的空间预检查,减少了下载过程中不必要的资源消耗。
本发明用于有效避免脏数据不一致的技术还可以实现为一种配置为包括处理器和存储器的数据存储系统。处理器可以被配置为执行本发明上述的数据存储处理。存储器被配置为与处理器相连接,且存储数据文件和脏数据记录文件。本发明还可以实现为包括上述数据存储系统的便携式电子设备,例如智能手机、平板电脑、上网机以及便携式穿戴设备等。
综上所述,本发明通过脏数据递归优先写入以及脏数据记录文件磁盘空间预分配且持续持有的方案,解决了因磁盘空间不足而导致数据文件和脏数据记录文件写入失败的问题,由此避免了出现脏数据不一致,从而降低了写文件失败率。进一步,本发明用实际写文件结果检查取代磁盘空间预检查,实现了更准确高效的空间检查,节省了下载过程的资源消耗。
此外,根据本发明的方法还可以实现为一种计算机程序,该计算机程序包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。或者,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的上述方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (16)

1.一种数据存储方法,包括以下步骤:
创建预定大小的脏数据记录文件;
确定待写入队列的队首数据在数据文件中的目标存储位置;
在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据,其中,所述脏数据是不在匹配的位置写入文件的数据;
在确定所述目标存储位置未被脏数据占用的情况下,基于所述队首数据在所述目标存储位置进行写入;以及
更新所述脏数据记录文件,
其中,所述基于所述队首数据在所述目标存储位置进行写入的步骤包括:
判断所述队首数据是否为脏数据记录;
若判定所述队首数据不是脏数据记录,则将所述队首数据写入到所述数据文件中的所述目标存储位置;以及
若判定所述队首数据是脏数据记录,则从所述数据文件中读出与所述脏数据记录相对应的脏数据,并将该脏数据写入到所述数据文件中的所述目标存储位置。
2.根据权利要求1所述的数据存储方法,其中,所述队首数据的目标存储位置是所述数据文件中与所述队首数据的存储位置标识相对应的存储位置,或者是所述数据文件中根据移动位置限制而指定的临时存储位置。
3.根据权利要求2所述的数据存储方法,其中,所述更新所述脏数据记录文件的步骤是在所述数据文件中写入了脏数据的情况下执行的。
4.根据权利要求3所述的数据存储方法,其中,所述在所述数据文件中写入了脏数据的情况下更新所述脏数据记录文件的步骤包括:
判断是否基于所述队首数据在所述目标存储位置成功地进行了写入;以及
若判定在所述目标存储位置成功地进行了写入,则在所述队首数据是脏数据记录的情况下以及/或者在所述队首数据的目标存储位置是指定的临时存储位置的情况下,更新所述脏数据记录文件。
5.根据权利要求1至4中任一项所述的数据存储方法,还包括如下步骤:
检查对所述数据文件的读写处理是否成功,以检测是否存在存储空间不足的情况;和
在检测到对所述数据文件的读写处理不成功的情况下,暂停对该数据文件的数据存储。
6.根据权利要求1至4中任一项所述的数据存储方法,其中,所述脏数据记录文件的预定大小被设置为大于或等于数据存储过程中所需的用于存储脏数据记录的最高存储空间容量。
7.根据权利要求6所述的数据存储方法,其中,所述脏数据记录文件的预定大小与待存储的数据的大小相关联。
8.一种数据存储装置,包括:
创建模块,用于创建预定大小的脏数据记录文件;
确定模块,用于确定待写入队列的队首数据在数据文件中的目标存储位置;
插入模块,用于在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据,其中,所述脏数据是不在匹配的位置写入文件的数据;
写入模块,用于在确定所述目标存储位置未被脏数据占用的情况下,基于所述队首数据在所述目标存储位置进行写入;以及
更新模块,用于更新由所述创建模块创建的所述脏数据记录文件,
其中,所述写入模块包括:
第一判断单元,用于判断所述队首数据是否为脏数据记录;
第一写入单元,用于当所述第一判断单元判定所述队首数据不是脏数据记录时,将所述队首数据写入到所述数据文件中的所述目标存储位置;以及
第二写入单元,用于当所述第一判断单元判定所述队首数据是脏数据记录时,从所述数据文件中读出与所述脏数据记录相对应的脏数据,并将该脏数据写入到所述数据文件中的所述目标存储位置。
9.根据权利要求8所述的数据存储装置,其中,所述队首数据的目标存储位置是所述数据文件中与所述队首数据的存储位置标识相对应的存储位置,或者是所述数据文件中根据移动位置限制而指定的临时存储位置。
10.根据权利要求9所述的数据存储装置,其中,所述更新模块在所述数据文件中写入了脏数据的情况下更新所述脏数据记录文件。
11.根据权利要求10所述的数据存储装置,其中,所述更新模块还包括:
第二判断单元,用于判断是否基于所述队首数据在所述目标存储位置成功地进行了写入;以及
更新单元,用于当所述第二判断单元判定在所述目标存储位置成功地进行了写入,则在所述队首数据是脏数据记录的情况下以及/或者在所述队首数据的目标存储位置是指定的临时存储位置的情况下,更新所述脏数据记录文件。
12.根据权利要求8至11中任一项所述的数据存储装置,还包括:
检查模块,用于检查对所述数据文件的读写处理是否成功,以检测是否存在存储空间不足的情况;和
暂停模块,用于在所述检查模块检测到对所述数据文件的读写处理不成功的情况下,暂停对该数据文件的数据存储。
13.根据权利要求8至11中任一项所述的数据存储装置,其中,所述脏数据记录文件的预定大小被设置为大于或等于数据存储过程中所需的用于存储脏数据记录的最高存储空间容量。
14.根据权利要求13所述的数据存储装置,其中,所述脏数据记录文件的预定大小与待存储的数据的大小相关联。
15.一种数据存储系统,包括:
处理器;和
存储器,该存储器与所述处理器相连接,配置为存储数据文件和脏数据记录文件,
该处理器配置为:
创建预定大小的脏数据记录文件;
确定待写入队列的队首数据在数据文件中的目标存储位置;
在确定所述目标存储位置已被脏数据占用的情况下,将与该脏数据相对应的脏数据记录插入到所述待写入队列并作为新的队首数据,其中,所述脏数据是不在匹配的位置写入文件的数据;
在确定所述目标存储位置未被脏数据占用的情况下,基于所述队首数据在所述目标存储位置进行写入;以及
更新所述脏数据记录文件,
其中,所述基于所述队首数据在所述目标存储位置进行写入的步骤包括:
判断所述队首数据是否为脏数据记录;
若判定所述队首数据不是脏数据记录,则将所述队首数据写入到所述数据文件中的所述目标存储位置;以及
若判定所述队首数据是脏数据记录,则从所述数据文件中读出与所述脏数据记录相对应的脏数据,并将该脏数据写入到所述数据文件中的所述目标存储位置。
16.一种便携式电子设备,包括根据权利要求15所述的数据存储系统。
CN201610016472.5A 2016-01-08 2016-01-08 数据存储方法、装置和系统以及便携式电子设备 Active CN106959819B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610016472.5A CN106959819B (zh) 2016-01-08 2016-01-08 数据存储方法、装置和系统以及便携式电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610016472.5A CN106959819B (zh) 2016-01-08 2016-01-08 数据存储方法、装置和系统以及便携式电子设备

Publications (2)

Publication Number Publication Date
CN106959819A CN106959819A (zh) 2017-07-18
CN106959819B true CN106959819B (zh) 2019-12-20

Family

ID=59481220

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610016472.5A Active CN106959819B (zh) 2016-01-08 2016-01-08 数据存储方法、装置和系统以及便携式电子设备

Country Status (1)

Country Link
CN (1) CN106959819B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110308861B (zh) * 2018-03-20 2023-07-21 浙江宇视科技有限公司 存储数据保存方法、装置、电子设备和可读存储介质
CN111064785B (zh) * 2019-12-16 2021-12-14 腾讯科技(深圳)有限公司 资源包下载方法、装置和系统
CN114024979A (zh) * 2021-10-25 2022-02-08 深圳市高德信通信股份有限公司 一种分布式边缘计算数据存储系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101093466A (zh) * 2007-08-10 2007-12-26 杭州华三通信技术有限公司 通过缓存写数据的方法和缓存系统及装置
CN101216806A (zh) * 2008-01-17 2008-07-09 北京中星微电子有限公司 一种数据更新的方法和装置
CN105094711A (zh) * 2015-09-22 2015-11-25 浪潮(北京)电子信息产业有限公司 一种实现写时复制文件系统的方法及装置
CN105095106A (zh) * 2014-04-30 2015-11-25 广州市动景计算机科技有限公司 数据块存储方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4165747B2 (ja) * 2003-03-20 2008-10-15 株式会社日立製作所 記憶システム、制御装置及び制御装置のプログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101093466A (zh) * 2007-08-10 2007-12-26 杭州华三通信技术有限公司 通过缓存写数据的方法和缓存系统及装置
CN101216806A (zh) * 2008-01-17 2008-07-09 北京中星微电子有限公司 一种数据更新的方法和装置
CN105095106A (zh) * 2014-04-30 2015-11-25 广州市动景计算机科技有限公司 数据块存储方法及装置
CN105094711A (zh) * 2015-09-22 2015-11-25 浪潮(北京)电子信息产业有限公司 一种实现写时复制文件系统的方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
递归在数据结构中的应用;袁亚丽 殷凤琴;《河北北方学院学报(自然科学版)》;20060713;第21卷(第5期);第69-71页 *
递归策略求解数据结构中归并排序算法;陈寿文;《蚌埠学院学报》;20130606;第1卷(第6期);第24-27页 *

Also Published As

Publication number Publication date
CN106959819A (zh) 2017-07-18

Similar Documents

Publication Publication Date Title
CN106959819B (zh) 数据存储方法、装置和系统以及便携式电子设备
CN111868705A (zh) 记录装置、读取装置、记录方法、记录程序、读取方法、读取程序及磁带
CN109558456A (zh) 一种文件迁移方法、装置、设备及可读存储介质
CN112473144A (zh) 游戏资源数据的处理方法及装置
CN103986779A (zh) 一种应用数据传输方法、装置及终端设备
CN113467719B (zh) 数据写入方法及装置
CN108334383B (zh) 一种信息处理方法及电子设备
CN113608695A (zh) 一种数据处理方法、系统、设备以及介质
CN105760114B (zh) 一种并行文件系统资源管理方法、装置和系统
CN110955388A (zh) 一种存储服务器及其数据存储方法、装置和存储介质
CN110007853A (zh) 一种Nandflash命令处理方法、装置、终端及存储介质
US7127478B1 (en) Data base for persistent data
CN112286448B (zh) 对象访问方法、装置、电子设备及机器可读存储介质
US20220365677A1 (en) Storage management device, storage management method, and program
JP3882461B2 (ja) 記憶装置システム及びそのバックアップ取得方法
CN113127438B (zh) 用于存储数据的方法、装置、服务器和介质
US10776261B2 (en) Storage apparatus managing system and storage apparatus managing method for increasing data reading speed
CN111414337B (zh) 一种文件读取方法、装置、计算设备及存储介质
US7243113B2 (en) Information management system, information management method, and storage medium for managing execution records
JP2003150321A (ja) 仮想記憶デバイス管理装置、仮想記憶デバイス管理方法、仮想記憶デバイス管理プログラム及び仮想記憶デバイスが記録されたコンピュータ読み取り可能な記録媒体
KR100615694B1 (ko) 복수개의 기능블럭을 제어하는 제어시스템
CN113792074B (zh) 一种数据处理方法及装置
CN111666339B (zh) 一种多线程数据同步方法
CN110941511B (zh) 一种快照合并方法、装置、设备及存储介质
CN111563006B (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
TR01 Transfer of patent right

Effective date of registration: 20200709

Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: Alibaba (China) Co.,Ltd.

Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping B radio square 14 storey tower

Patentee before: GUANGZHOU UCWEB COMPUTER TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right