数据文件写入方法及系统、数据文件读取方法及系统技术方案

技术编号:9718535 阅读:126 留言:0更新日期:2014-02-27 05:11
本发明专利技术公开了一种数据文件写入方法以及系统、数据文件读取方法及系统,数据文件写入方法用于将待写数据写入数据文件中,其包括:取得一条或多条待写数据;设置第一字符串;将每条待写数据作为一个单元,并在每个单元中加入第一字符串,且第一字符串位于每个单元的前端,用于标识每个单元;将每个单元写入数据文件中。通过本发明专利技术,在数据文件出现部分数据损坏的情况下,仍可以查找数据文件中未损坏的数据进行读取。

【技术实现步骤摘要】
数据文件写入方法及系统、数据文件读取方法及系统
本专利技术涉及计算机数据处理领域,具体涉及一种数据文件写入方法及系统、数据文件读取方法及系统。
技术介绍
在计算机系统中,例如存储系统,经常出现多个进程读写数据文件的场景。例如一个进程按照一定协议格式将数据写到一个文件中,然后另一个进程读取这个文件,并按这个协议格式解析这个文件的内容。在绝大部分情况下,这样做没有问题。但如果计算机意外宕机,导致进程在写某个数据时,只写了一半而终止,就会导致数据文件损坏,读取进程按照之前约定的协议进行解析其内容就会出现问题,从而导致后面所有的数据都无法读取。例如,在一个消息队列系统中,有这样一个异步发送消息的功能。消息生产者(producer)发送消息时,调用异步发送接口来发送,异步发送接口直接将消息写到本地文件中,形成消息文件。同时,消息生产者所在的机器会启动一个守护进程,实时读取这个消息文件,将里面的内容转发给服务端(broker),架构图如图1所示。消息生产者写消息文件格式为:依次将每条消息追加到文件尾部,每条消息包含4个字节的消息长度,后面跟上消息内容(消息内容的长度与4个字长的消息长度一致)。当消息生产者发送了 3条消息后,消息文件格式如图2所示,3条消息中的内容分别为长度68字节的消息内容1、长度20字节的消息内容2和长度53字节的消息内容3。如果在消息生产者发送第三条消息时,消息内容3只写了一半,机器就突然宕机,那么数据写入就不完整。当机 器启动后,如果消息生产者继续发送消息,那么发送完第四条消息后,消息文件的格式如图3所示。因为消息内容3不完整,当写入第四条消息后,另外的进程读取这个文件内容然后进行解析时,会误将第四条消息的一部分当作第三条消息的内容,然后第四条消息的4个字节的头部(消息长度)也会不准确,也进而导致后面的内容都将无法正确解析。为防止出现前文所说的问题,有一种解决办法是增加一个索引文件,索引文件中指明每条消息的在消息文件中的起始位置,以及消息长度。每次消息生产者发送消息时,先从索引文件中查询当前消息应该写入的位置,然后更新消息文件,最后再更新索引文件。相应地,读进程每次从读取消息时,先查询索引文件中的消息位置以及长度,然后再定位到消息文件相应的位置进行查询。如果在更新消息文件时突然宕机,那么索引文件就不会得到更新,从而这条消息对读取进程是不可见的,也就不会引起消息文件的错乱了。采用索引文件的方案存在的缺陷在于:1、增加了复杂性。因为读、写进程都需要同时涉及两个文件的操作,这样比较麻烦。写进程每次要先读索引文件,再写数据文件,再继续更新索引文件……;读进程需要先读索引文件,然后读数据文件,再继续读取索引文件......。2、降低了性能。因为同时操作两个文件,这样对性能有一定损失。一是读写的内容比以前多了,二是涉及到多个文件的读写时,就不是严格的顺序读写磁盘,对性能也有一定影响。所以,本专利技术需要解决的技术问题在于,当数据文件的部分数据损坏后,如何完成对整个文件的未损坏数据的正确读取,且读写数据文件的过程不涉及到数据文件外的其他文件,以减少不必要的复杂度和性能损耗。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的数据文件写入方法及系统、数据文件读取方法及系统。依据本专利技术的一个方面,提供了一种数据文件写入方法,用于将待写数据写入数据文件中,其包括:取得一条或多条待写数据;设置第一字符串;将每条待写数据作为一个单元,并在每个单元中加入第一字符串,且第一字符串位于每个单元的前端,用于标识每个单元;将每个单元写入数据文件中。可选地,设置第一字符串的步骤包括:从一条或多条待写数据中提取出多个字符组成第一字符串。可选地,多个字符为一条或多条待写数据中出现概率最低的多个字符。可选地,在将每个单元写入数据文件中的步骤之前,还包括:设置一个或多个第二字符串,以分别表示一条或多条待写数据的长度;在每个单元中加入一个第二字符串,且第二字符串连接在每个单元中的第一字符串与待写数据之间,用于表示每个单元中的待写数据的长度。根据本专利技术的另一方面,提供了一种数据文件写入系统,用于将待写数据写入数据文件中,其包括:待写数据取得模块,用于取得一条或多条待写数据;第一字符串设置模块,用于设置第一字符串;第一字符串加入模块,用于将每条待写数据作为一个单元,并在每个单元中加入第一字符串,且第一字符串位于每个单元的前端,用于标识每个单元;单元写入模块,将每个单元写入数据文件中。可选地,第一字符串设置模块从一条或多条待写数据中提取出多个字符组成第一字符串。可选地,多个字符为一条或多条待写数据中出现概率最低的多个字符。可选地,在将每个单元写入数据文件中的步骤之前,还包括:第二字符串设置模块,用于设置一个或多个第二字符串,以分别表示一条或多条待写数据的长度;第二字符串加入模块,用于在每个单元中加入一个第二字符串,且第二字符串连接在每个单元中的第一字符串与待写数据之间,用于表示每个单元中的待写数据的长度。根据本专利技术的数据文件写入方法和系统,在数据文件写入过程中可以将每条待写数据与一个第一字符串结合作为一个单元,该第一字符串处于单元的前端,起到标识每个单元的作用,以保证在数据文件读取过程中,即使该数据文件中的部分单元损坏,仍可通过查找第一字符串的方式找到其他单元,如果该单元未损坏,则可正确读取其中的数据,由此解决了在不涉及其他文件的基础上,如何读取数据文件中的未损坏数据的技术问题,相对传统的方案,只涉及到一个文件的写入,写入的内容变少,且单个文件的写入更容易,有利于写入性能的提高,相对增加一个索引文件,增加第一字符串就相对容易很多,也减少了出错的可能。依据本专利技术的另一方面,提供了一种数据文件读取方法,用于从数据文件中读取待读数据,数据文件包括一个或多个单元,每个单元前端都具有第一字符串,每个单元中还具有一条待读数据,该方法包括:在数据文件中查找第一字符串,如果查找到一个或多个第一字符串,则表示查找到一个或多个第一字符串所在的单元;按预定规则,读取单元中的待读数据。可选地,在数据文件中查找第一字符串的步骤包括:在数据文件中从前向后查找第一字符串,每找到一个第一字符串,则在其所在单元中的待读数据读取完成后,从待读数据向后继续查找下一条第一字符串。可选地,在数据文件中查找第一字符串的步骤包括:读取数据文件的初始多个字符,初始多个字符与第一字符串的长度相同;将初始多个字符与第一字符串进行比较;如果二者匹配,则确定初始多个字符为第一字符串;如果二者不匹配,则从初始多个字符向后,查找出第一组与第一字符串匹配的字符,作为第一字符串。可选地,在数据文件中查找第一字符串的步骤还包括:在一条待读数据读取完成后,读取连接在其后的连续多个字符,连续多个字符与第一字符串的长度相同;将连续多个字符与第一字符串进行比较;如果二者匹配,则确定连续多个字符为第一字符串;如果二者不匹配,则从连续多个字符向后,查找出第一组与第一字符串匹配的字符,作为第一字符串O可选地,按预定规则,读取单元中的待读数据的步骤包括:按预定长度,读取连接在单元的第一字符串之后的多个字符作为第二字符串;根据第二字符串,确定单元中待读数据的数据长度;本文档来自技高网
...

【技术保护点】
一种数据文件写入方法,用于将待写数据写入数据文件中,其包括:取得一条或多条待写数据;设置第一字符串;将每条待写数据作为一个单元,并在每个单元中加入所述第一字符串,且所述第一字符串位于所述每个单元的前端,用于标识所述每个单元;将所述每个单元写入所述数据文件中。

【技术特征摘要】
1.一种数据文件写入方法,用于将待写数据写入数据文件中,其包括: 取得一条或多条待写数据; 设置第一字符串; 将每条待写数据作为一个单元,并在每个单元中加入所述第一字符串,且所述第一字符串位于所述每个单元的前端,用于标识所述每个单元; 将所述每个单元写入所述数据文件中。2.根据权利要求1所述的数据文件写入方法,其中,所述设置第一字符串的步骤包括: 从所述一条或多条待写数据中提取出多个字符组成所述第一字符串。3.根据权利要求2所述的数据文件写入方法,其中, 所述多个字符为所述一条或多条待写数据中出现概率最低的多个字符。4.一种数据文件写入系统,用于将待写数据写入数据文件中,其包括: 待写数据取得模块,用于取得一条或多条待写数据; 第一字符串设置模块,用于设置第一字符串; 第一字符串加入模块,用于将每条待写数据作为一个单元,并在每个单元中加入所述第一字符串,且所述第一字符串位于所述每个单元的前端,用于标识所述每个单元; 单元写入模块,将所述每个单元写入所述数据文件中。5.根据权利要求4所述的数据文件写入系统,其中, 所述第一字符串设置模块从所述一条或多条待写数据中提取出多个字符组成所述第一字符串。6.根据权利要求5所述的数据文件写入系统,其中, 所述多个字符为所述一条或多条待写数据中出现概率最低的多个字符。7.一种数据文件读取方法,用于...

【专利技术属性】
技术研发人员:代兵朱超王超
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1