压缩算法丨为什么600GB的vcf文件压缩后只剩16GB?数据压缩的原理和方法详解

简介: 压缩算法丨为什么600GB的vcf文件压缩后只剩16GB?数据压缩的原理和方法详解

压缩算法的本质

最近碰到一个神奇的现象,一份大小为16GBxx.vcf.gz文件,解压之后体积变为600GBvcf文件,为什么一份文件经过压缩后体积缩小了这么多?

(work) [bio @ notes  21:29:40 ~/work/20230726/data]
$ ls -lh
总用量 620GB
-rw-rw-r--. bio  16G 7月  26 21:23 xx.vcf.gz
-rw-r--r--. bio 604G 7月  19 14:16 xx.vcf

压缩这个词联想到压缩机,就是把空气进行物理加压,减小占用的体积,这种方法利用的是单个分子之间的可变间隙,像挤海绵一样把一个大东西压缩成小东西。很显然,计算机中的数据肯定不是这种方式。

另外一种方式,通过字典来压缩,比较抽象了,笔者举一个例子:有一本新华字典,理论上每个字都能找到唯一对应的页数+行数+列数,将这个数字用来替代实际的汉字。

接下来,我想压缩一本三国演义全篇小说,只需要用数字替换汉字,就能降低篇幅大小,这样誊抄(类似于复制传输)时就方便很多。这也算是变相的对文字信息进行了压缩,计算机主要是通过这种方式进行压缩。


问题:为什么vcf文件经过gzip压缩为vcf.gz后文件体积能极大程度的缩小?


原理概述

因为gzip是一种有效的压缩算法,它可以利用重复出现的模式和冗余信息,将数据进行编码和压缩,从而减少数据的存储空间。

重复模式:

在VCF文件中,可能存在大量的重复信息,比如在多个位点上的质量分数或者过滤标记可能会重复出现,gzip能够识别这些重复模式,并使用更短的编码方式来表示它们,从而减少存储空间。

字典压缩:

gzip使用了Lempel-Ziv编码来构建一个字典,用于存储出现过的字符序列。每当发现与字典中的序列匹配时,gzip只需记录一个指向字典中的索引,而不是实际存储相同的字符序列,这进一步减小了数据的体积。

基因组数据特点:

基因组数据中通常包含大量的连续性和相关性,这使得gzip等压缩算法能够更好地发挥压缩效果。基因组的染色体序列以及突变位点等数据具有较高的相似性,使得gzip能够更好地识别并压缩这些信息。

综上所述,gzip能够高效地将VCF文件中的数据进行压缩,从而将文件的体积显著缩小。这对于基因组学研究和大规模数据存储非常有用,节省了存储空间,减少了数据传输时间,并且使数据的备份和传输更加高效。

VCF文件补充介绍

本文中提到的vcf文件是存储基因型变异数据的常用格式,VCF(Variant Call Format)通常用于存储个体或群体的基因组数据,其中包含了多个基因突变位点的信息。VCF文件常见于基因组学研究和生物信息学分析中,特别是在单核苷酸多态性(SNP)、插入/缺失(InDel)等变异的分析中。

基本格式和信息

文件头(Header):

VCF文件以文件头开始,以"#"开头的行为注释行,包含了关于VCF文件本身和数据来源的信息。文件头通常包括样本信息、参考基因组版本、标记信息等。

元数据信息(Metadata):

文件头中可能包含多个元数据信息,用于描述VCF文件的属性、来源和其他相关信息。一些常见的元数据标记包括"fileformat"(指定VCF文件的版本)、"INFO"(用于描述位点的信息)、"FORMAT"(用于描述样本的信息格式)等。

数据区域(Data):

VCF文件的数据区域包含了每个基因突变位点的具体信息,每行对应一个位点。数据区域中的每个字段以制表符(Tab)分隔,字段的顺序和含义由文件头中的元数据定义。

- CHROM:染色体名称或编号。
- POS:位点在染色体上的位置。
- ID:位点的唯一标识符,可以是rs号(对应dbSNP数据库的标识符)或其他独立标识符。
- REF:参考基因组上的碱基。
- ALT:变异的碱基或碱基序列。如果存在多个变异(如多态性位点),则用逗号分隔。
- QUAL:质量分数,表示位点的可靠性或置信度。
- FILTER:过滤标记,表示该位点是否通过了质量控制过滤。
- INFO:包含更多关于位点的附加信息,通常以键值对的形式表示。例如,可能包含关于突变类型、突变功能、频率等信息。
- FORMAT:描述样本数据的格式,通常由一系列字段组成。
- Sample1, Sample2, ...:每个样本的基因型数据,根据FORMAT字段指定的格式进行描述。

以下为一个vcf文件示例:

##fileformat=VCFv4.3
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  Sample1  Sample2
chr1    1001    rs123   A       G       50.0    PASS    DP=30   GT      0/1      1/1
chr1    2034    .       T       C,G     60.0    PASS    DP=40   GT      1/2      2/2

在上述示例中,第一个位点在染色体1的位置1001处,具有rs号为rs123,参考碱基为A,变异碱基为G,质量分数为50.0,通过了质量控制过滤。

INFO字段包含了一个键值对"DP=30",表示总深度为30。FORMAT字段指定了样本数据的格式,这里是"GT"(基因型)。接下来的两列分别是两个样本的基因型数据。

常见压缩方法补充介绍

当我们需要传输或存储大量的文件或数据时,压缩算法可以帮助我们将文件体积缩小,从而节省存储空间和传输时间。以下是zip、tar和rar这几种常见压缩算法的通俗介绍以及它们之间的区别:

zip:

原理:zip是一种常见的归档和压缩算法。它将多个文件和目录打包成一个压缩包,并对其中的每个文件进行独立压缩。zip使用Deflate算法,这是一种结合了LZ77和Huffman编码的压缩算法,类似于gzip,但zip支持多个文件的压缩和归档。

特点:zip是跨平台的,几乎在所有操作系统上都可以使用。它是Windows系统上常用的压缩格式。

tar:

原理:tar是一种归档工具,它可以将多个文件和目录打包成一个单一的文件,但并不压缩数据。tar采用顺序地将所有文件和目录串联在一起的方式创建归档文件。

特点:tar通常与其他压缩算法(如gzip或bzip2)结合使用,先用tar打包成一个大的归档文件,然后再使用其他算法对该归档文件进行压缩。

rar:

原理:rar是一种专有的压缩算法,由WinRAR软件开发。它使用了类似于zip的算法,但采用了更加复杂的压缩策略,可以在某些情况下实现更高的压缩率。

特点:rar格式在某些情况下可能比zip格式具有更好的压缩效果,特别是对于大型压缩文件。然而,由于它是专有格式,可能在某些平台或系统上不支持或需要额外的软件。

总结

  • gzip:单个文件压缩,常用于Unix/Linux系统。
  • zip:多个文件压缩和归档,跨平台支持,常用于Windows系统。
  • tar:打包多个文件,但不压缩数据,通常结合其他压缩算法使用。
  • rar:类似于zip,但使用了专有算法,有时可以获得更好的压缩效果。

END

© 素材来源于网络,侵权请联系后台删除

笔记合集,点击直达

相关文章
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
13天前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
23天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
29天前
|
算法 数据库 索引
HyperLogLog算法的原理是什么
【10月更文挑战第19天】HyperLogLog算法的原理是什么
42 1
|
1月前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
78 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
1月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
38 2
|
26天前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
31 0
|
1月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
1月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
30 0
|
1月前
|
算法 JavaScript 前端开发
垃圾回收算法的原理
【10月更文挑战第13天】垃圾回收算法的原理
24 0