CN111061434A - 基因压缩多流数据并行写入及读取方法、***及介质 - Google Patents
基因压缩多流数据并行写入及读取方法、***及介质 Download PDFInfo
- Publication number
- CN111061434A CN111061434A CN201911303221.5A CN201911303221A CN111061434A CN 111061434 A CN111061434 A CN 111061434A CN 201911303221 A CN201911303221 A CN 201911303221A CN 111061434 A CN111061434 A CN 111061434A
- Authority
- CN
- China
- Prior art keywords
- block
- data
- stream
- write
- file
- 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
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/061—Improving I/O performance
-
- 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
-
- 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/0644—Management of space entities, e.g. partitions, extents, pools
-
- 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)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明公开了一种基因压缩多流数据并行写入方法,包括以下步骤:1)接收写入请求后,创建基因数据存储文件,所述基因数据存储文件包括文件头和文件体,所述文件头保存有文件类型标识符和文件版本号,在文件体创建根控制块和子控制块,分别在根控制块和/或子控制块下创建字节流,所述字节流与待接收的基因压缩多流数据的数据流一一对应;2)接收基因压缩多流数据,并将数据流写入对应字节流的写缓存,若任意一条字节流的写缓存达到预设阈值则生成写入任务并放入队列,且通过读写线程异步执行队列中的写入任务将写缓存数据写入基因数据存储文件。本发明在保证了对基因压缩多流数据读写高性能的同时,也支持多条顺序的数据流的随机读取。
Description
技术领域
本发明涉及一种基因组数据的存储及处理方法,尤其涉及一种基因压缩多流数据并行写入及读取方法、***及介质。
背景技术
自2010年以来,随着新一代测序技术的发展,更大数量级的基因组数据产出日渐增加,从GB、TB级到PB、EB级。例如,Illumina公司最新的推出的HISEQ X10测序仪3天内测序约1.8TB的测序数据。大规模的基因组数据的分析和管理正在成为推动生命科学创新的重要源泉。由于基因测序规模庞大,其传输与存储都需要消耗大量的时间与经济成本,制约了生物大数据发展。
GTZ压缩器是Genetalks公司的GTX Lab实验室开发的通用数据压缩打包软件,用于对任意基因测序数据的目录进行高压缩率的快速打包形成一个压缩数据文件,以方便存储档与远程传输、校验。对于X10测序仪的FASTQ文件数据,GTZ压缩器在压缩过程中会把根据索引行、序列行、质量行、+号行自身数据的特性分别采用压缩算法进行压缩会并行产生多条压缩后的数据流,形成基因压缩多流数据。但是通常对基因压缩多流数据的读写操作,只能按顺序串行的方式逐一进行,存在读写操作效率低下的问题。并且,传统的压缩文件格式(例如,gzip,zip格式等),并不支持对其存储内容的随机读取,这也是影响基因行业相关分析流程的性能瓶颈。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种基因压缩多流数据并行写入及读取方法、***及介质。本发明在保证了对基因压缩多流数据读写高性能的同时,也针对基因压缩多流数据内容的处理,提供了足够的灵活性。
为解决上述技术问题,本发明提出的技术方案为:
一种基因压缩多流数据并行写入方法,包括以下步骤:
1)接收写入请求后,创建基因数据存储文件,所述基因数据存储文件包括文件头和文件体,所述文件头保存有文件类型标识符和文件版本号,在文件体创建根控制块和子控制块,分别在根控制块和/或子控制块下创建字节流,所述字节流与待接收的基因压缩多流数据的数据流一一对应;
2)接收基因压缩多流数据,并将数据流写入对应字节流的写缓存,若任意一条字节流的写缓存达到预设阈值则生成写入任务并放入队列,且通过读写线程异步执行队列中的写入任务将写缓存数据写入基因数据存储文件。
进一步的,所述基因数据存储文件包括用于存储根控制块、子控制块以及字节流的数据的块文件、用于作为写缓存中预设阈值的最大块写入大小。
进一步的,所述根控制块、子控制块分别包括用于保存结构信息的块流,所述字节流包括用于存储数据的数据块流、用于存储数据块流起始地址的原信息块流,所述结构信息包括所有子控制块块流的地址、子控制块的内容标识、所有字节流原信息块流的地址,所述根控制块、子控制块的块流、字节流的原信息块流和数据块流分别存储于块文件中,所述块文件还包括用于进行异步读写操作的读写线程池。
进一步的,所述块流、原信息块流和数据块流分别包括二进制块和用于读取块文件中二进制块的块文件指针,所述二进制块包括用于保存数据的数据区、用于指示数据区长度的数据大小以及用于指示下一个二进制块的下一个二进制块地址。
进一步的,步骤2)中生成写入任务并放入队列具体是指生成写入任务放入读写线程池的队列中,通过读写线程池中的读写线程以块文件为单位执行队列中的写入任务将写缓存数据写入基因数据存储文件。
进一步的,所述执行队列中的写入任务将写缓存数据写入基因数据存储文件具体步骤包括:
2a)选取读写线程池的队列前端的写入任务作为当前写入任务;
2b)将当前写入任务中的数据组成当前二进制块,设置当前二进制块的下一个二进制块地址为0,当前二进制块的数据区为当前写入任务中的数据,当前二进制块的数据大小为当前二进制块的数据区长度;
2c)在块文件中设置偏移指针,移动偏移指针到最后,将偏移值作为当前二进制块的起始地址;
2d)查找当前写入任务对应的字节流的数据块流,将数据块流的尾部二进制块的下一个二进制块地址修改为当前数据块的起始地址;
2e)将当前二进制块按照起始地址写入块文件中;
2f)判断读写线程池中的写入任务是否读取完毕,是则结束并退出,否则返回步骤2a)。
本发明还提供一种基因压缩多流数据并行读取方法,包括以下步骤:
S1)获取基因数据存储文件,判断文件类型标识符和文件版本号是否正确,是则进入下一步,否则报错并退出;
S2)根据基因数据存储文件中根控制块、子控制块和字节流的信息创建所有控制块和字节流;
S3)根据控制块块流中的内容获取想要读取的字节流,根据字节流的原信息块流中的内容指定想要读取的数据,分别读取目标字节流的指定数据。
进一步的,步骤S3)包括以下步骤:
S3.1)查询所有控制块的块流中的结构信息,选择具有指定内容的控制块;
S3.2)针对所选取的控制块,查询对应字节流的原信息块流的内容,选择具有指定数据的字节流;
S3.3)调用读数据操作函数,分别读取所选取的字节流中的指定数据及数据长度。
本发明还提供一种基因压缩多流数据并行写入***,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行上述基因压缩多流数据并行写入方法的步骤,或被编程或配置以执行上述基因压缩多流数据并行读取方法的步骤,或被编程或配置以执行上述基因压缩多流数据并行写入方法及上述基因压缩多流数据并行读取方法的步骤。
本发明还提供一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行上述基因压缩多流数据并行写入方法的计算机程序,或存储有被编程或配置以执行上述基因压缩多流数据并行写入方法的计算机程序。
与现有技术相比,本发明的优点在于:
本发明能够实现针对基因测序文件的多流数据的并行读/写,从而将压缩过程中,并行产生的,有序的多个数据流同时汇入一个压缩数据文件。它具有读写操作效率高的优点,而且解压过程支持多条顺序的数据流的随机读取。
附图说明
图1为本发明实施例中将多流数据写入文件的原理示意图。
图2为本发明实施例中将多流数据写入文件的流程示意图。
图3为本发明实施例中基因数据存储文件(多流文件)的结构示意图。
图4为本发明实施例中块文件的结构示意图。
图5为本发明实施例中单向二进制块链表的结构示意图。
图6为本发明实施例中块流的结构示意图。
图7为本发明实施例中控制块的结构示意图。
图8为本发明实施例中字节流的结构示意图。
图9为本发明实施例中基因数据存储文件的文件头结构示意图。
图10为本发明实施例中根控制块的块流示意图。
图11为本发明实施例中子控制块的块流示意图。
图12为本发明实施例中从文件中读取多流数据的原理示意图。
图13为本发明实施例中从文件中读取多流数据的流程示意图。
图14为本发明实施例中读数据操作函数的执行步骤流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
本发明基因压缩多流数据并行写入及读取方法,包括将基因压缩多流数据并行写入以及基因压缩多流数据并行读取,由于其应用的角色有所不同,将多流数据写入文件应用的角色为压缩器,从文件中读取多流数据应用的角色为解压器。所以下文将对上述方法分别进行说明,但是毫无疑问,多流数据写入文件以及从文件中读取多流数据为针对同一个基因数据存储文件的时间点不同且应当具有单一性的数据处理方法。如图1所示,本实施例中的压缩器为GTZ压缩器,GTZ压缩器在fastq文件(例如A. fastq)压缩过程中会把根据索引行、序列行、质量行、+号行自身数据的特性分别采用压缩算法进行压缩会并行产生多条压缩后的数据流(即:基因压缩多流数据)。本实施例基因压缩多流数据并行写入及读取方法将多流数据写入文件即为用于将基因压缩多流数据生成基因数据存储文件(图1中简称为多流文件,存储文件名为A. fastq.gtz)。
本实施例基因压缩多流数据并行写入及读取方法的基因压缩多流数据并行写入过程如图1虚线框部分所示,如图2所示,本实施例基因压缩多流数据并行写入的实施步骤包括:
1)接收写入请求后,创建基因数据存储文件,所述基因数据存储文件包括文件头和文件体,所述文件头保存有文件类型标识符和文件版本号,在文件体创建根控制块和子控制块,分别在根控制块和/或子控制块下创建字节流,所述字节流与待接收的基因压缩多流数据的数据流一一对应;
2)接收基因压缩多流数据,并将数据流写入对应字节流的写缓存,若任意一条字节流的写缓存达到预设阈值则生成写入任务并放入队列,且通过读写线程异步执行队列中的写入任务将写缓存数据写入基因数据存储文件。
如图3所示,基因数据存储文件由块文件和根控制块,文件读写标记,最大块写入大小(写缓冲的预设阈值)组成,块文件负责文件的实际读写操作。
如图4所示,块文件由块流、文件读写锁、读写线程池、文件操作符组成。一个多流文件只有一个块文件。块流由一系列二进制块组成,这些二进制块组成一个单向二进制块链表。
如图5所示,二进制块由数据区大小、数据区、下一个二进制块的地址组成。数据大小是一个64位的无符号整形,指示数据区的长度,长度单位为字节。数据区为这个二进制块实际要保存的数据,以字节为单位。下一个二进制块的地址是一个64位的无符号整形,指示下一个二进制块所在的地址(地址为文件的偏移)。一个二进制块的下一个二进制块地址为0时表示这个二进制块为这个块流的尾二进制块。
如图6所示,块流由首二进制块起始地址、块文件指针、当前二进制块大小、当前二进制块地址组成。起始地址为首二进制块的地址,块文件指针指向多流文件的块文件,主要用于根据地址从文件中读取二进制块。当前二进制块大小指示当前指向的二进制块大小,当前二进制块地址指示当前指向的二进制块所在文件中的地址,这两个主要用于二进制块链表的遍历。
文件读写锁用于保护每次只有一个块流对文件操作符进行读写操作(多流文件在写入的时候主要是向多条字节流写入数据,但是字节流不会一有数据到来就会去写文件操作,当你向字节流中写入数据的时候,字节流会先写入到写缓冲中去,只有写缓冲的大小到达最大块写入大小时候或者程序本身主动调用flush函数去强制写的时候,才会把写缓冲的数据丢给字节流的数据块流去写入(字节流把数据丢给数据块流后会立即返回,又可以对字节流进行写数据),数据块流就会把这些数据组成一个二进制块,然后把这个二进制块写入到文件操作符所指向的文件中去,但为了保证二进制块是整块写入和地址的连续性,所以在同一时刻,只能有一个块流在进行二进制块读写操作。但对于上层来说确实是多流并行的写入,可以向多条字节流中并行写数据)。
读写线程池主要负责块流中二进制块的异步读写操作。由一个线程对象和读写任务队列组成,当块流中有二进制块要进行读写任务就把这个读写任务加入到这个线程池的读写任务队列中然后立即返回,读写线程池会从这个队列中取出读写任务,由线程对像去执行读写任务,如果读写任务队列中还有读写任务就继续从读写任务队列取出读写任务,如果读写任务队列中没有读写任务就等待块流加入读写任务到队列。
文件操作符为一个FILE*指针,读写线程池都是对这个文件操作符进行读写操作,用于保存和读取块流中的二进制块,也就是说多流文件的最小结构是由一系列二进制块结成。
根控制块是最上层的控制块,一个多流文件中只有一个根控制块。
如图7所示,控制块由父控制块指针、块流、结构信息、子控制块集合、子字节流集合、保护锁组成。其中:
父控制块指针指向当前控制块的父亲控制块。根控制块的父控制块指针为空。
块流用于保存结构信息字符串。
结构信息由json格式的数组方式记录当前控制块的所有的原信息。如当前控制块如当前控制块下挂有哪些子控制块集合,哪些子字节流集合。
子控制块集合是一个std::map<start_offset, control_block>结构,表示当前控制块下的所有的子控制块,其中address为子控制块中的块流所在地址。Control_block就是一个如图7所示控制块的结构类。
子字节流集合是一个std::map< start_offset, byte_stream>结构,表示当前控制块下的所有的子字节流,其中address为子控制块中的块流所在地址。byte_stream是一个如图8所示的字节流的结构。如图8所示,字节流由所属控制块、原信息块流、数据块流、写缓冲、读缓冲、二进制块预读链表组成。所属控制块: 一个控制块,指向字节流所在的控制块。原信息块流:一个块流,用于存储这个字节流的原信息,这个原信息由json的格式保存字符串保存在块流的数据区中。主要作用保存这个字节流数据块流的起始地址,还有保存用定义的一些信息,如记录这条流保存的数据是什么。数据块流:一个块流,用于存储这个字节流的数据。写缓冲:一个缓存区,用于缓冲向字节流写入的数据,当向字节流写入的数据时会先缓冲到这个缓存中,当达到最大块写入大小就会用二进制块写入到文件中。读缓冲:一个缓存区,用于缓冲字节流的读取的数据,从字节流中读出的但没有读完的数据和预读的数据先会缓冲到这个缓存。二进制块预计链表:用于预读数据块流中的二进制块,也就是先预先将数据块流的二进制链表结构用于数据的预读机制。
如图9所示,若根控制块下只包含一个子控制块,那么根控制块的块流就由下图10这两个二进制块组成,第一个二进制块为一个数据区长度为零的二进制块,第二个二进制块为一个储存了一个长度为29的json的字符串(记录根控制块下有一个子控制块,子控制块的块流的首二进制块地址为32(也就是十六进制的0x20)),第一个二进制块的下一个二进制块的地址指向第二个二进制的首地址0x30,而第二个二进制的下一个二进制块的地址指向0x00表示他是尾二进制块。也就是一个单向的二进制块链表。子控制块的块流由下图11面这个二进制块(0x00)组成。
保护锁用来对子控制块集合,子字节流集合,结构信息进行修改保护。
文件读写标记为一个布尔类型,用于控制多流文件的是否以只读方式打开多流文件。真为只读模式打开多流文件,假为读写模式打开多流文件。只读模式下不能新建控制块和字符流,只查找,读取控制块中原信息和字节流原信息和数据。
最大块写入大小为写缓存中预设阈值,当向字节流写入数据后,会对写缓冲中数据的大小和最大块写入大小进行比较,如果写缓冲中数据的大小大于等于最大块写入大小时,字节流会把写缓冲中的数据组织成一个二进制块交给数据块流进行写操作。最大块写入大小用于指示字节流的数据块流中写入二进制块的大小,设置最大块写入大小可以有效控制文件读写次数。
本实施例中,参见图9,创建基因数据存储文件后,将魔数(文件类型标识符,共4个字节)和多流文件版本号(4个字节)写入到创建的文件的头8个字节,然后写入根块流的首二进制块起始地址(地址都是8个字节),由于开始时这个根块流还没有创建,根块流的首二进制块起始地址为0。
根块流创建时,构造一个数据区长度为0的首个二进制块并立即写入到基因数据存储文件中,这个块流具有一个固定的记录首个二进制块的起始地址,把根块流的首二进制块起始地址修改为这个块流的起始地址。
本实施例中,创建子控制块的步骤如下:
A1)创建一个块流作为当前块流,将当前块流的二进制块保存在块文件中,将当前块流的首个二进制块的起始地址保存在上级控制块的块流中,上级控制块生成一组原信息,用于储存当前块流的首二进制块地址和表明当前创建是字节流还是控制块;原信息示例如下:
{“start_offset”:32,“type”:”block”}
Start_offset表示从文件开始偏移32字节为这个首进制块的地址。
Type 表示创建类型,stream表示字节流,block表示控制块。
具体的,控制块生成的这组原信息,也可以添加其它的标识,用于满足用户的随机精准读取,比如:
{“start_offset”:32,“type”:”block”, “content”:”base”}
Content表示存放的内容属性,base表示存储在这个控制块的内容是基因文件里的碱基序列行。
A2)将原信息写入上级控制块块流的二进制块中,根据当前块流创建子控制块,所述子控制块还包括父控制块指针,设置父控制块指针指向上级控制块,新的子控制块放入到上级控制块的子控制块集合中(也就是std::map< start_offset,, control_block >数据结构中)。
本实施例中,创建字节流的步骤如下:
B1)选取一个控制块作为当前控制块;
B2)创建原信息块流和数据块流,分别将原信息块流和数据块流保存在块文件中,将数据块流首个二进制块的起始地址保存在原信息块流中,具体的,字节流生成的原信息块流,添加其它的标识,用于满足用户的随机精准读取,比如:
{“start_offset”:32,“type”:”stream” ,“start_line”:”10000” ,“end_line”:”20000”}
Start_line表示字节流这个二进制块对应于原始文件的起始位置为10000行;
End_line 表示字节流这个二进制块对应于原始文件的结束位置为20000行;
B3)当前控制块生成一组原信息,用于储存当前块流的首二进制块地址和表明当前创建是字节流还是控制块;原信息示例如下:
{“start_offset”:32,“type”:”stream”}
Start_offset表示从文件开始偏移32字节为这个首个二进制块的地址;
Type 表示创建类型,stream表示字节流,block表示控制块;
B4)将原信息写入当前控制块块流的二进制块中,根据原信息块流和数据块流创建字节流,设置字节流的所属控制块指向当前控制块,新的字节流放入到控制块的子字节流集合中(也就是std::map< start_offset,, byte_stream>数据结构中)。
本实施例中,步骤2)中生成写入任务并放入队列具体是指生成写入任务放入读写线程池的队列中,通过读写线程池中的读写线程以块文件为单位执行队列中的写入任务将写缓存数据写入基因数据存储文件,具体步骤包括:
2.1)将数据流中的数据写入对应字节流的写缓存,将对应字节流作为当前字节流;
2.2)判断当前字节流写缓存中的数据大小是否等于最大块写入大小,是则进入下一步,否则跳转步骤2.4);
2.3)将当前字节流写缓存中的数据作为当前写入任务,将当前写入任务放入读写线程池的队列中,返回步骤2.1)
2.4)判断数据流中是否还有未写入当前字节流的数据,是则返回步骤2.1),否则将当前字节流写缓存中的数据作为当前写入任务,将当前写入任务放入读写线程池中并退出。
本实施例中,步骤2)中执行队列中的写入任务将写缓存数据写入基因数据存储文件具体步骤包括:
2a)选取读写线程池的队列前端的写入任务作为当前写入任务;
2b)将当前写入任务中的数据组成当前二进制块,设置当前二进制块的下一个二进制块地址为0,当前二进制块的数据区为当前写入任务中的数据,当前二进制块的数据大小为当前二进制块的数据区长度;
2c)在块文件中设置偏移指针,移动偏移指针到最后,将偏移值作为当前二进制块的起始地址;
2d)查找当前写入任务对应的字节流的数据块流,将数据块流的尾部二进制块的下一个二进制块地址修改为当前数据块的起始地址;
2e)将当前二进制块按照起始地址写入块文件中;
2f)判断读写线程池中的写入任务是否读取完毕,是则结束并退出,否则返回步骤2a)。
通过上述步骤,可以精准地将写缓存数据采用层次化的结构写入基因数据存储文件。具体的,层次化结构是指整个基因数据存储文件,它从最顶层的根控制块往下,逐级包含的子控制块和字节流。
本实施例中,写入任务中包含要写入的数据和一个回调函数,回调函数用于数据写入文件后,将写入的数据所在的二进制块,追加到这个字节流的数据块流的二进制块链表的尾部;所述通过读写线程异步执行读写队列中的写入任务,从而将写缓存数据采用层次化的结构写入基因数据存储文件的详细步骤包括:当写入任务被读写线程池执行到时就开始写流程,首先获取文件读写锁并锁住文件,将要写入的数据组成一个二进制块,二进制块的下一个二进制块的地址为0,二进制块的数据大小为要写入数据的大小,数据区为要写入的数据;(通过fseek函数)移动基因数据存储文件的偏移指针到最后,(通过ftell函数)获取基因数据存储文件的当前偏移就是这个二进制块的起始地址,调用回调函数将这个二进制块的起始地址,写入到字节流的数据块流的二进制块链表的尾二进制块的下一个二进制块地址,将二进制块写入到基因数据存储文件,这样这个二进制块就成为了字节流的数据块流的二进制块链表的尾二进制块,释放文件读写锁,写入任务执行完毕。
当所有压缩器没有数据可以写入时,就会调用多流文件的close函数,在close函数中就会遍历根控制块下的所有控制块和字节流,强制把所有字节流的写缓冲中数据以及原信息写入的文件中去。
从文件中读取多流数据即为从生成的基因数据存储文件中解压构建基因压缩多流数据,便于解压器对多条数据流进行解压。参见图12,在A.fastq.gtz文件解压过程中,多流文件处理程序(本实施例从文件中读取多流数据的方法对应的程序)会根据多流文件控制块和字节流中的原信息找到相应的压缩后字节流(索引行、序列行、质量行、+号行)交给相应的解压算法程序从中读取数据进行解压并重新组合成一个fastq文件(A.fastq)。
本实施例基因压缩多流数据并行写入及读取方法的基因压缩多流数据并行读取过程如图12虚线框部分所示,如图13所示,本实施例中基因压缩多流数据并行读取的实施步骤包括:
S1)获取基因数据存储文件,判断文件类型标识符和文件版本号是否正确,是则进入下一步,否则报错并退出;
S2)根据基因数据存储文件中根控制块、子控制块和字节流的信息创建所有控制块和字节流;
S3)根据控制块块流中的内容获取想要读取的字节流,根据字节流原信息块流中的内容指定想要读取的数据,分别读取每个字节流的指定数据。
本实施例中,步骤S2)具体包括以下步骤:
S2.1)从基因数据存储文件的文件体指定位置读取根块流首个二进制块的起始位置;
S2.2)定位到根块流首个二进制块并获取根块流,读取根控制块的原信息;
S2.3)根据原信息找到根控制块下所有子控制块的块流和字节流的原信息块流;
S2.4)遍历选取根控制块以外的一个控制块作为当前控制块,读取当前控制块的块流中所有原信息,根据原信息找到当前控制块下所有子控制块的块流和字节流的原信息块流;
S2.5)返回上一步直到得到所有控制块的块流和字节流的原信息块流。
本实施例中,步骤S3)包括以下步骤:
S3.1)查询所有控制块的块流中的结构信息,选择具有指定内容的控制块,例如只输出部分指定内容为base(碱基序列)的控制块;
S3.2)针对所选取的控制块,查询对应字节流的原信息块流的内容,选择具有指定数据的字节流,例如只输出存储有指定原始位置(例如对应原始文件10000行到20000行)的内容的字节流的数据;
S3.3)调用读数据操作函数,分别读取所选取的字节流中的指定数据及数据长度。
步骤S3)是并发的,且支持用户随机读取的相关原信息,可以存储于控制块的原信息块流里,也可以存储于字节流的原信息块流中。
通过对读数据操作函数的调用 ,解压器就可以从从字节流中的读缓冲读取数据进行解压还原。参见图14,读数据操作函数的调用执行过程包括:
步骤1、调用了get_buf函数读操作存入的,输入为要读取数据的长度,返回实际读取到的数据长度和读取到的数据和;
步骤2、判断字节流是否已经读到末尾,如果读到末尾则返回实际读到长度为0,内容为空,并将结果返回给get_buf函数的调用者;否则执行步骤3;
步骤3、判断是否为首次读取,如果是,则从字节流的数据块流中读取调用者指定大小的数据,并预读一部分二进制块数据到读缓冲中,将结果返回给get_buf函数的调用者;否则执行步骤4;
步骤4、判断要读取的内容是否在读缓冲中。如果是,则返回从读缓冲中取出所要读的数据和读到的数据长度,将结果返回给get_buf函数的调用者;否则执行步骤5;
步骤5、继续从字节流的数据块流中读取,并预读一部分二进制块数据到读缓冲中,返回取出所要的数据和读到的数据长度将结果返回给get_buf函数的调用者。
本实施例面向基因压缩多流数据的文件并行读写方法,设计了一个多流文件***(基因数据存储文件),用来支持多条顺序数据流的写入和读出。多流文件会在压缩过程中采用缓冲块异步写入的方式,高效的将这些数据流写到多流文件中。而在解压过程中,则通过预读和块读取技术,高效的读取这些顺序的数据流,从而提升解压速率。以及支持对压缩内容的随机读取,并支持目录结构压缩和解压,同步读写。
此外,本实施例还提供一种基因压缩多流数据并行写入***,包括计算机设备,该计算机设备被编程或配置以执行本实施例前述基因压缩多流数据并行写入方法的步骤,或被编程或配置以执行本实施例前述基因压缩多流数据并行读取方法的步骤,或被编程或配置以执行本实施例前述所述基因压缩多流数据并行写入方法及本实施例前述基因压缩多流数据并行读取方法的步骤。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行本实施例前述基因压缩多流数据并行写入方法的计算机程序,或存储有被编程或配置以执行本实施例前述基因压缩多流数据并行写入方法的计算机程序。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基因压缩多流数据并行写入方法,其特征在于,包括以下步骤:
1)接收写入请求后,创建基因数据存储文件,所述基因数据存储文件包括文件头和文件体,所述文件头保存有文件类型标识符和文件版本号,在文件体创建根控制块和子控制块,分别在根控制块和/或子控制块下创建字节流,所述字节流与待接收的基因压缩多流数据的数据流一一对应;
2)接收基因压缩多流数据,并将数据流写入对应字节流的写缓存,若任意一条字节流的写缓存达到预设阈值则生成写入任务并放入队列,且通过读写线程异步执行队列中的写入任务将写缓存数据写入基因数据存储文件。
2.根据权利要求1所述的基因压缩多流数据并行写入方法,其特征在于,所述基因数据存储文件包括用于存储根控制块、子控制块以及字节流的数据的块文件、用于作为写缓存中预设阈值的最大块写入大小。
3.根据权利要求2所述的基因压缩多流数据并行写入方法,其特征在于,所述根控制块、子控制块分别包括用于保存结构信息的块流,所述字节流包括用于存储数据的数据块流、用于存储数据块流起始地址的原信息块流,所述结构信息包括所有子控制块块流的地址、子控制块的内容标识、所有字节流原信息块流的地址,所述根控制块、子控制块的块流、字节流的原信息块流和数据块流分别存储于块文件中,所述块文件还包括用于进行异步读写操作的读写线程池。
4.根据权利要求3所述的基因压缩多流数据并行写入方法,其特征在于,所述块流、原信息块流和数据块流分别包括二进制块和用于读取块文件中二进制块的块文件指针,所述二进制块包括用于保存数据的数据区、用于指示数据区长度的数据大小以及用于指示下一个二进制块的下一个二进制块地址。
5.根据权利要求4所述的基因压缩多流数据并行写入方法,其特征在于,步骤2)中生成写入任务并放入队列具体是指生成写入任务放入读写线程池的队列中,通过读写线程池中的读写线程以块文件为单位执行队列中的写入任务将写缓存数据写入基因数据存储文件。
6.根据权利要求5所述的基因压缩多流数据并行写入方法,其特征在于,所述执行队列中的写入任务将写缓存数据写入基因数据存储文件具体步骤包括:
2a)选取读写线程池的队列前端的写入任务作为当前写入任务;
2b)将当前写入任务中的数据组成当前二进制块,设置当前二进制块的下一个二进制块地址为0,当前二进制块的数据区为当前写入任务中的数据,当前二进制块的数据大小为当前二进制块的数据区长度;
2c)在块文件中设置偏移指针,移动偏移指针到最后,将偏移值作为当前二进制块的起始地址;
2d)查找当前写入任务对应的字节流的数据块流,将数据块流的尾部二进制块的下一个二进制块地址修改为当前数据块的起始地址;
2e)将当前二进制块按照起始地址写入块文件中;
2f)判断读写线程池中的写入任务是否读取完毕,是则结束并退出,否则返回步骤2a)。
7.一种基因压缩多流数据并行读取方法,其特征在于,包括以下步骤:
S1)获取基因数据存储文件,判断文件类型标识符和文件版本号是否正确,是则进入下一步,否则报错并退出;
S2)根据基因数据存储文件中根控制块、子控制块和字节流的信息创建所有控制块和字节流;
S3)根据控制块块流中的内容获取想要读取的字节流,根据字节流的原信息块流中的内容指定想要读取的数据,分别读取目标字节流的指定数据。
8.根据权利要求7所述的基因压缩多流数据并行读取方法,其特征在于,步骤S3)包括以下步骤:
S3.1)查询所有控制块的块流中的结构信息,选择具有指定内容的控制块;
S3.2)针对所选取的控制块,查询对应字节流的原信息块流的内容,选择具有指定数据的字节流;
S3.3)调用读数据操作函数,分别读取所选取的字节流中的指定数据及数据长度。
9.一种基因压缩多流数据并行写入***,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1~6中任意一项所述基因压缩多流数据并行写入方法的步骤,或被编程或配置以执行权利要求7~8中任意一项所述基因压缩多流数据并行读取方法的步骤,或被编程或配置以执行权利要求1~6中任意一项所述基因压缩多流数据并行写入方法及权利要求7~8中任意一项所述基因压缩多流数据并行读取方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行权利要求1~6中任意一项所述基因压缩多流数据并行写入方法的计算机程序,或存储有被编程或配置以执行权利要求7~8中任意一项所述基因压缩多流数据并行写入方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911303221.5A CN111061434B (zh) | 2019-12-17 | 2019-12-17 | 基因压缩多流数据并行写入及读取方法、***及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911303221.5A CN111061434B (zh) | 2019-12-17 | 2019-12-17 | 基因压缩多流数据并行写入及读取方法、***及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061434A true CN111061434A (zh) | 2020-04-24 |
CN111061434B CN111061434B (zh) | 2021-10-01 |
Family
ID=70302126
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911303221.5A Active CN111061434B (zh) | 2019-12-17 | 2019-12-17 | 基因压缩多流数据并行写入及读取方法、***及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061434B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338583A (zh) * | 2020-05-19 | 2020-06-26 | 北京数字绿土科技有限公司 | 一种高频数据存储方法、结构、计算机 |
CN111767256A (zh) * | 2020-05-22 | 2020-10-13 | 北京和瑞精准医学检验实验室有限公司 | 一种从fastq文件分离出样本read数据的方法 |
CN111767255A (zh) * | 2020-05-22 | 2020-10-13 | 北京和瑞精准医学检验实验室有限公司 | 从fastq文件分离出样本read数据的优化方法 |
CN112328607A (zh) * | 2020-12-04 | 2021-02-05 | 四三九九网络股份有限公司 | 一种大体积json数据的异步压缩处理方法 |
CN113746827A (zh) * | 2021-08-31 | 2021-12-03 | 中国铁道科学研究院集团有限公司通信信号研究所 | 基于多带图灵机的实时数据链路字节流防错方法 |
CN114035746A (zh) * | 2021-10-28 | 2022-02-11 | 中国科学院声学研究所 | 一种高采样率数据实时采集存储方法及采集存储*** |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7627783B2 (en) * | 2005-04-14 | 2009-12-01 | International Business Machines Corporation | Template based parallel checkpointing in a massively parallel computer system |
CN102630007A (zh) * | 2012-03-31 | 2012-08-08 | 中船重工(武汉)凌久高科有限公司 | 一种处理tcp视频数据流的方法 |
CN103559020A (zh) * | 2013-11-07 | 2014-02-05 | 中国科学院软件研究所 | 一种dna读序数据fastq文件并行压缩和解压缩方法 |
CN104205756A (zh) * | 2012-01-19 | 2014-12-10 | 没有束缚软件有限公司 | 并发进程执行 |
CN104978151A (zh) * | 2015-06-19 | 2015-10-14 | 浪潮电子信息产业股份有限公司 | 基于应用感知的重复数据删除存储***中的数据重构方法 |
CN105391454A (zh) * | 2015-12-14 | 2016-03-09 | 季检 | 一种dna测序质量分数无损压缩方法 |
CN106096332A (zh) * | 2016-06-28 | 2016-11-09 | 深圳大学 | 面向存储的dna序列的并行快速匹配方法及其*** |
CN110196824A (zh) * | 2018-05-31 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 实现数据传输的方法及装置、电子设备 |
-
2019
- 2019-12-17 CN CN201911303221.5A patent/CN111061434B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7627783B2 (en) * | 2005-04-14 | 2009-12-01 | International Business Machines Corporation | Template based parallel checkpointing in a massively parallel computer system |
CN104205756A (zh) * | 2012-01-19 | 2014-12-10 | 没有束缚软件有限公司 | 并发进程执行 |
CN102630007A (zh) * | 2012-03-31 | 2012-08-08 | 中船重工(武汉)凌久高科有限公司 | 一种处理tcp视频数据流的方法 |
CN103559020A (zh) * | 2013-11-07 | 2014-02-05 | 中国科学院软件研究所 | 一种dna读序数据fastq文件并行压缩和解压缩方法 |
CN104978151A (zh) * | 2015-06-19 | 2015-10-14 | 浪潮电子信息产业股份有限公司 | 基于应用感知的重复数据删除存储***中的数据重构方法 |
CN105391454A (zh) * | 2015-12-14 | 2016-03-09 | 季检 | 一种dna测序质量分数无损压缩方法 |
CN106096332A (zh) * | 2016-06-28 | 2016-11-09 | 深圳大学 | 面向存储的dna序列的并行快速匹配方法及其*** |
CN110196824A (zh) * | 2018-05-31 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 实现数据传输的方法及装置、电子设备 |
Non-Patent Citations (2)
Title |
---|
ZHENG, JINGJING 等: "Parallel compression and decompression of DNA sequence reads in FASTQ format", 《INTERNATIONAL JOURNAL OF HYBRID INFORMATION TECHNOLOGY》 * |
何娜 等: "高通量DNA测序数据的多任务并行压缩算法", 《计算机应用研究》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338583A (zh) * | 2020-05-19 | 2020-06-26 | 北京数字绿土科技有限公司 | 一种高频数据存储方法、结构、计算机 |
CN111767256A (zh) * | 2020-05-22 | 2020-10-13 | 北京和瑞精准医学检验实验室有限公司 | 一种从fastq文件分离出样本read数据的方法 |
CN111767255A (zh) * | 2020-05-22 | 2020-10-13 | 北京和瑞精准医学检验实验室有限公司 | 从fastq文件分离出样本read数据的优化方法 |
CN111767255B (zh) * | 2020-05-22 | 2023-10-13 | 北京和瑞精湛医学检验实验室有限公司 | 从fastq文件分离出样本read数据的优化方法 |
CN111767256B (zh) * | 2020-05-22 | 2023-10-20 | 北京和瑞精湛医学检验实验室有限公司 | 一种从fastq文件分离出样本read数据的方法 |
CN112328607A (zh) * | 2020-12-04 | 2021-02-05 | 四三九九网络股份有限公司 | 一种大体积json数据的异步压缩处理方法 |
CN112328607B (zh) * | 2020-12-04 | 2023-04-07 | 四三九九网络股份有限公司 | 一种大体积json数据的异步压缩处理方法 |
CN113746827A (zh) * | 2021-08-31 | 2021-12-03 | 中国铁道科学研究院集团有限公司通信信号研究所 | 基于多带图灵机的实时数据链路字节流防错方法 |
CN113746827B (zh) * | 2021-08-31 | 2023-02-10 | 中国铁道科学研究院集团有限公司通信信号研究所 | 基于多带图灵机的实时数据链路字节流防错方法 |
CN114035746A (zh) * | 2021-10-28 | 2022-02-11 | 中国科学院声学研究所 | 一种高采样率数据实时采集存储方法及采集存储*** |
CN114035746B (zh) * | 2021-10-28 | 2023-06-16 | 中国科学院声学研究所 | 一种高采样率数据实时采集存储方法及采集存储*** |
Also Published As
Publication number | Publication date |
---|---|
CN111061434B (zh) | 2021-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111061434B (zh) | 基因压缩多流数据并行写入及读取方法、***及介质 | |
TWI702503B (zh) | 實施用於維護操作之合併樹修改之系統、方法及電腦可讀媒體 | |
TWI719281B (zh) | 用於串流選擇之系統、機器可讀媒體、及機器實施之方法 | |
US8255398B2 (en) | Compression of sorted value indexes using common prefixes | |
JP6050503B2 (ja) | 階層キャッシュを用いたメールのインデックス化および検索 | |
WO2011155551A1 (ja) | ファイル記憶装置、ファイル記憶方法およびプログラム | |
US8600990B2 (en) | Interacting methods of data extraction | |
US8515976B2 (en) | Bit string data sorting apparatus, sorting method, and program | |
US7958083B2 (en) | Interacting methods of data summarization | |
CN102129476B (zh) | 利用zip压缩格式的虚拟文件***应用 | |
CN117369731B (zh) | 一种数据的缩减处理方法、装置、设备及介质 | |
KR20130111170A (ko) | 압축 및 신장 시스템, 압축 장치, 신장 장치, 압축 및 신장 방법, 압축 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 및 신장 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체 | |
CN113312008B (zh) | 一种文件读写业务的处理方法、***、设备以及介质 | |
US20140320498A1 (en) | Terminal device, information processing method, and computer program product | |
JP2010128812A (ja) | データ管理システム及びデータ管理方法及びデータ管理プログラム | |
JPH04360246A (ja) | ファイル圧縮装置 | |
JPH10261969A (ja) | データ圧縮方法および装置 | |
CN105354310B (zh) | 基于MapReduce的地图瓦片存储布局优化方法 | |
CN114817176A (zh) | 一种基于Nginx+MinIO+Redis的分布式文件存储***及方法 | |
US20130218851A1 (en) | Storage system, data management device, method and program | |
CN108776578B (zh) | 一种快速合并对象的方法和*** | |
US7555624B2 (en) | Program, an apparatus and a method for guaranteeing a data storage order in an ISAM file | |
CN107506156B (zh) | 一种块设备的io优化方法 | |
CN110941730A (zh) | 基于人脸特征数据偏移的检索方法与装置 | |
CN111916155A (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 |