Python使用zstd压缩算法

Facebook的Zstandard(简称zstd)压缩算法逐渐流行,它有以下特点:

1,压缩、解压速度快。

这张图的横轴是压缩率,纵轴是压缩速度。
在高压缩等级时,压缩率接近LZMA;在低压缩等级时,速度接近LZ4。(zstd和LZ4的作者是同一个人)在各种情况下,比常用的zlib快,可以考虑替代zlib。

下图出自这个网页,里面还有一些比较图表。

zstd还多线程压缩,可以充分利用多核CPU,让压缩速度提高数倍。
但不支持多线程解压,不过解压速度已经非常快了,通常比SSD快。

2,如果使用预先训练的zstd字典,对于几KB的小数据,可以大大提高压缩率。

要压缩的数据越小,就越难压缩,这是所有压缩算法都有的问题,原因是压缩算法从之前的数据中学习如何压缩之后的数据,但对于小数据,没有“之前”可以参考。

为了解决这一问题,zstd提供了一种训练模式,针对特定的数据类型调整算法。训练是通过提供一些样本(每个样本一个文件)来实现的,训练的结果存储在一个名为“字典”的文件中,在压缩和解压缩之前必须加载该文件,使用这个字典,可以大大提高小数据的压缩比。

下图是压缩1万条1KB的数据,在使用字典时,压缩率、压缩速度、解压速度大大提高。

3,帧(frame)和块(block)让使用更灵活,适用各种场景。

zstd数据由1个或多个独立的帧(frame)组成,解压后的多帧数据 等于 每帧解压后再相接。
每帧完全独立,包括一个帧头,以及一套解压参数。
zlib和LZMA也支持多帧的特性。

每帧包括1个或多个块(block),块的最大尺寸是(3字节 128KB),具体取决于帧头里定义的参数。
和完全独立的帧不同,在解压时块依赖前面的块、不依赖后面的块,块可以被全部解压,所以块可以用于通讯场景。
zlib也有类似块的特性。

pyzstd模块

用了6个月时间,写了一个pyzstd模块,它的API和Python标准库里的bz2/lzma/zlib模块相似。

https://pypi.org/project/pyzstd/

PyPI上还有两个zstd模块:

zstd:它太简单了,只提供了很少的基本功能。
zstandard:提供了丰富的API,但是API风格和Python标准库的bz2/lzma/zlib不同,可以看看。

来源:https://www.icode9.com/content-1-825151.html

(0)

相关推荐

  • Python图像处理入门

    图像处理,顾名思义,可以简单地定义为利用计算机算法(通过代码)对图像进行分析.操作的处理.它包括如下不同的几个方面:图像的存储.表示.信息提取.操作.增强.恢复和解释.本章将对图像处理技术的各个方面进 ...

  • 为什么直到现在 RAR 仍然比 7Z 更流行?

    如题,记得很久之前各个网站门户就通过评测认为 7-ZIP 比 winRAR 在多个方面优秀,而 7-ZIP 还是一个免费开源软件,为什么这么多年过来,即使解压软件各有不同,但 7z 始终无法取代 ra ...

  • 合集推荐|0717

    合集推荐|0717

  • Linux 中最常用 150 个命令汇总

    人工智能算法与Python大数据 致力于提供深度学习.机器学习.人工智能干货文章,为AI人员提供学习路线以及前沿资讯 23篇原创内容 公众号 点上方人工智能算法与Python大数据获取更多干货 在右上 ...

  • 网络爬虫是什么

    网络爬虫又称网络蜘蛛.网络机器人,它是一种按照一定的规则自动浏览.检索网页信息的程序或者脚本.网络爬虫能够自动请求网页,并将所需要的数据抓取下来.通过对抓取的数据进行处理,从而提取出有价值的信息. 认 ...

  • (8条消息) Python3.x标准模块库目录

    文本 1. string:通用字符串操作 2. re:正则表达式操作 3. difflib:差异计算工具 4. textwrap:文本填充 5. unicodedata:Unicode字符数据库 6. ...

  • Python算法有哪些特征?七大特性!

    算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,而编程则是实现算法的关键,那么Python算法有哪些?Python算法应该具备哪些特征呢?小编通过下文为大家介绍一下. Python算法 ...

  • Python|二叉树叶子结点问题解决方法

    问题描述键盘输入一颗二叉树,求解其叶子结点个数.示例: 输入:4,2,6,1,3,5输出:3解决方案一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称"叶子".当二叉树为空时 ...

  • Python数据分析库有哪些?常见分类!

    众所周知,Python前景好.需求量大.薪资高.就业岗位多,除了基本的开发工作之外,还可以从事人工智能.数据分析.网络爬虫等岗位.那么说起数据分析,你知道Python常用数据分析库有哪些吗?我们一起来 ...

  • PyPy为什么能让Python比C还快?一文了解内在机制

    来自|机器之心 「如果想让代码运行得更快,您应该使用 PyPy.」 - Python 之父 Guido van Rossum 对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要.Python ...

  • 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250

    在本篇博文当中,将会教会大家如何使用高性能爬虫,快速爬取并解析页面当中的信息.一般情况下,如果我们请求网页的次数太多,每次都要发出一次请求,进行串行执行的话,那么请求将会占用我们大量的时间,这样得不偿 ...

  • 【Python爬虫】:破解网站字体加密和反反爬虫

    前言:字体反爬,也是一种常见的反爬技术,例如58同城,猫眼电影票房,汽车之家,天眼查,实习僧等网站.这些网站采用了自定义的字体文件,在浏览器上正常显示,但是爬虫抓取下来的数据要么就是乱码,要么就是变成 ...

  • Python 内置函数最全汇总,现看现用

    今天,好好看看这些Python内置函数,也许你明天就能用到Python 内置函数最全汇总:1 abs()绝对值或复数的模In [1]: abs(-6)Out[1]: 62 all() 接受一个迭代器, ...

  • Python学习教程:Python 内置函数最全汇总(上篇)

    Python学习教程:Python 内置函数最全汇总(一) 1 abs() 绝对值或复数的模 In [1]: abs(-6)Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素都为 ...

  • Python学习教程:Python内置函数大总结(下篇)

    这里接着上次的Python学习教程,给大家总结了Python 剩下的33个内置函数. 31 hash() 返回对象的哈希值 In [112]: hash(xiaoming)Out[112]: 6139 ...

  • python的重点难点——有了这些笔记,让你快人一步成为大神!

    在DOS窗口下,查看python版本 注意V是大写(version,版本的意思) 如果是小写就会导入很多模块. 编码 在默认情况下,python3源码文件以UTF-8编码,所有字符串都是unicode ...