百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一个无损、实时的压缩算法,同时具备高压缩比率和性能,Star23K

nanshan 2024-11-23 20:12 30 浏览 0 评论



我们在日常工作中,或者应用程序中,基本都会用到压缩工具或者算法对文件进行压缩,比如:

  • 文件传输: 大文件或者很多小文件进行传输时进行压缩,减少传输所需的时间和带宽;

  • 文件存储: 大文件进行存储时,进行文件压缩可以有效的减少存储容量的需求;

  • 数据备份: 对一些备份数据进行压缩存储,比如mysql的dump文件等等;

  • 多媒体分发: 对视频、音频和其他多媒体文件压缩,可以改善用户体验,减少缓冲时间(但是这个也需要实时解压能力)。

  • 特定系统: 比如类似堡垒机、视频监控这类系统,需要存储大量的录屏录像文件,这时候都需要进行压缩存储。

所以,无论是我们的个人电脑,还是企业服务器,乃至很多应用程序都会安装压缩工具或者模块,而一个好的压缩算法,能够极大的提高应用和系统的数据处理和存储能力。所以今天给大家介绍的是一种高性能无损压缩算法-zstd
01
zstd 介绍

Zstandard简称zstd,是Face book开源的一种高性能无损压缩算法,专为实时压缩场景设计,提供了比传统zlib算法更高的压缩比率和更快的压缩速度。支持多种压缩级别。此外,它还具备字典压缩功能,特别适合小数据或具有重复模式的数据集,能显著提升压缩效率。

项目信息

#github地址https://github.com/facebook/zstd#项目地址https://facebook.github.io/zstd/

功能特性

  • 快速压缩: 提供快速的压缩速度,可通过使用参数进一步加速压缩过程。

  • 高压缩比: 提供了比传统压缩算法如zlib和gzip更高的压缩比率。

  • 多级别压缩: 支持选择不同的压缩级别,从快速压缩到最大压缩比率,以满足不同的性能和存储需求。

  • 字典压缩: 支持使用字典来提高小数据或重复的数据的压缩效率。

  • 流式压缩: 支持流式压缩,可以处理连续的数据流,而不需要一次性加载整个文件。

  • 无损压缩: 压缩和解压缩后的数据与原始数据完全一致。

  • 跨平台支持: 支持在多种操作系统和硬件平台上运行,包括Windows、Linux、macOS等。

  • 多语言绑定: 提供了多种编程语言的接口,使得它可以在不同的编程环境中使用。

  • 可配置的资源使用: 可以根据应用的具体需求,调整zstd的内存和CPU使用策略。

  • 错误处理: 提供了错误检测和处理机制,确保数据的完整性和可靠性。

  • 命令行工具: 提供了命令行工具,方便直接在终端中进行压缩和解压缩。

  • 文件格式: 虽然zstd的文件格式是.zst,是一个独立的格式,但是也可以兼容其他格式如.gz、.xz和.lz4。

  • 投产状态: zstd已在Facebook和其他大型云基础设施中部署,被认为适合生产环境。

和多种压缩算法的数据对比

项目提供了和其他压缩算法的对比作为参考。在配备 Core i7-9700K CPU @ 4.9GHz , Ubuntu 20.04操作系统上进行 测试比较了几种常见的压缩算法。

压缩算法和版本 压缩比率 压缩速度 解压速度

zstd 1.5.6 -1

2.887

510 MB/s

1580 MB/s

zlib 1.2.11 -1

2.743

95 MB/s

400 MB/s

brotli 1.0.9 -0

2.702

395 MB/s

430 MB/s

zstd 1.5.6 --fast=1

2.437

545 MB/s

1890 MB/s

zstd 1.5.6 --fast=3

2.239

650 MB/s

2000 MB/s

quicklz 1.5.0 -1

2.238

525 MB/s

750 MB/s

lzo1x 2.10 -1

2.106

650 MB/s

825 MB/s

lz4 1.9.4

2.101

700 MB/s

4000 MB/s

lzf 3.6 -1

2.077

420 MB/s

830 MB/s

snappy 1.1.9

2.073

530 MB/s

1660 MB/s


在同样的基准下,测试zstd和zlib、lzma 详细的对比图:


压缩的数据量越小,压缩就越困难。为了解决这种情况,Zstd 提供了一种训练模式,可用于针对所选类型的数据调整算法。训练 Zstandard 是通过为其提供一些样本(每个样本一个文件)来实现的。此训练的结果存储在名为“字典”的文件中,必须在压缩和解压缩之前加载该文件。使用此字典,可以显著提高小数据上可实现的压缩率。下图为采用“字典”进行压缩解压和不采用“字典”的对比:


02
zstd 安装

zstd目前已经可以通过操作系统的包管理器进行安装,以Ubuntu操作系统为例:

#更新系统sudo apt updatesudo apt upgrade#安装依赖sudo apt install build-essential wget tar#安装zstdsudo apt install zstd

03
zstd 使用

  • 命令行:

zstd的命令行基础使用比较简单:

#压缩文件zstd filename#调整压缩级别,其中“#”是1到19之间的数字zstd -# filename#解压缩zstd?-d?filename.zst

文件压缩时会有前后对比说明:


  • 图形化:

zstd作为一种压缩算法,可以被现有的压缩工具使用,比如7-zip或者, WinRAR:

#支持zstd的7-zip下载https://github.com/mcmilk/7-Zip-zstd/releases#支持zstd的WinRAR下载


  • 多种编程语言:

虽然zstd采用的为C语言,但是很多项目作者提供了其他语言支持详见以下链接:
https://facebook.github.io/zstd/#other-languages


比如在Python 3 中使用:
# Module has simple API:>>> import zstd>>> dir(zstd)['Error', 'ZSTD_compress', 'ZSTD_external', 'ZSTD_uncompress', 'ZSTD_version', 'ZSTD_version_number', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'compress', 'decompress', 'dumps', 'loads', 'uncompress', 'version']>>> zstd.version()'1.5.1.0'>>> zstd.ZSTD_version()'1.5.1'>>> zstd.ZSTD_version_number()10501>>> zstd.ZSTD_external()0
# In python3 use bytes>>> data = b"123456qwert">>> cdata = zstd.compress(data, 1)>>> data == zstd.decompress(cdata)True>>> cdata_mt = zstd.compress(data, 1, 4)>>> cdata == cdata_mtTrue>>> data == zstd.decompress(cdata_mt)True

04
最后


综上所述,zstd是一种高效、灵活的压缩工具,适用于需要快速压缩和解压缩的场景,如网络数据传输、实时视频流处理、大规模数据存储、多媒体内容分发、以及日常文件备份和恢复,能够显著减少数据传输时间和存储空间,同时保持数据的完整性和一致性。如果你也在寻找类似的压缩解压方案的话,不防试试zstd吧!

相关推荐

手机看视频卡顿的系统化解决方案(手机看视频特别卡是什么原因)

手机看视频卡顿是日常使用中常见的问题,通常由网络不稳定、设备性能不足、应用设置不当或系统问题导致。以下方案按优先级排序,兼顾操作难度与解决效果,帮助你快速定位并解决卡顿问题。一、网络优化:解决最核心诱...

电子电路硬件测试基础-板级测试工具之示波器(1)

示波器介绍示波器,作为一种电子测试仪器,主要用于对电信号的波形进行测量、显示与分析。它的工作原理是将电信号的瞬时值转化为屏幕上的垂直偏移,并以时间为基准在水平轴上展开,进而生成信号的图形化呈现。借助示...

宽带安装避坑指南:从选套餐到验收全流程注意事项

在网络成为生活必需品的当下,看似简单的宽带安装实则暗藏诸多细节,稍不留意就会踩入隐藏费用、性能虚标等陷阱。掌握以下关键要点,助你轻松避开宽带安装雷区。一、选对运营商与套餐,拒绝隐形消费选择运营商时,不...

噪声分析及小信号测试(噪音中的信号是什么含义)

示波器在大量开关电源或大功率用电器等复杂环境下进行自环测试,容易出现视频中的噪声问题。示波器在进行小信号测试时,我们要考虑地线带来的干扰,一般设置要求是:一、带宽限制打开;二、尽可能短的地线,一般使用...

怀疑房间被装了监控?深度解析检测方法与步骤

在现代社会中,隐私保护日益受到重视。当我们租房、住酒店或身处私人住宅时,如果发现房间内有异常的迹象,如电器无故自动开关、网络速度突然变慢、电费异常增加,或者在某些特定区域总感觉“被注视”,这些都可能是...

如何快速鉴定网线好坏?怎样测网线电阻?

一、快速鉴定网线好坏的3大核心技巧1.外观检测法:5秒看穿网线本质标识验证:正品网线外皮应清晰印有"CAT5e""CAT6"等类别标识,以及米数刻度(如30...

网速慢?教你快速检测网卡速率! #网络测速

网卡是百兆还是千兆?你知道吗?网速慢可能就是因为网卡不够快,今天就来教你如何快速检查网卡。1.打开CMD:首先找到电脑,按下Win+R键,输入cmd,然后按回车,这就打开了命令提示符...

怎么查自己家WiFi多少兆?(苹果手机测wifi网速)

怎么查自己家WiFi多少兆?在数字化生活日益普及的今天,家庭WiFi的速度直接影响着我们上网冲浪、在线学习、视频通话等日常活动的流畅度。了解自家WiFi的带宽通常以兆比特每秒Mbps为...

家里宽带网速不理想?测一下就知道了

家里网络不理想,经常发生卡顿或是网络抖动?可能是家里宽带的影响,这时候不妨实际测试下网速看看,是否符合预期。个人最近经历过两次上网卡顿问题,第一个是上个月回老家,刷剧的时候,发现有加载缓慢的情况,10...

Linux 必备的20个核心知识点(linux内核知识点)

学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...

忆享科技戟星安全实验室|内网隧道技术,你知道几个?

本文约6000字,阅读约需15分钟。0x00前言在实际环境中,会有各种网络设备、防火墙以及入侵检测系统阻止外网与内网的通信,我们构建内网隐蔽通道来突破安全策略的限制,实现对目标机器的控制。当我们在外...

Win10怎么连接linux虚拟机?(win10搭建linux虚拟机)

这个不难,主要是ping一下ip,检查win10系统是否和Linux虚拟机连通,接着开启ssh服务,如果一切正常的话,就可以连接linux虚拟机,这里简单介绍一下实现过程,实验环境win10+vmwa...

如何在CentOS中配置静态IP地址?(centos6.5配置静态ip地址)

静态IP地址是在计算机网络中使用的固定IP地址,与动态分配的IP地址相对。在CentOS中,通过配置网络设置,您可以轻松地为您的系统设置静态IP地址。本文将详细介绍在CentOS中配置静态IP地址的步...

Firewalld的简单使用(firewall direct)

从Centos7开始默认防火墙就已经更换为了firewall,替换了之前的iptablesFirewalld服务采用firewall-cmd或firewall-config(图形化工具)来动态管理ke...

Vmware设置静态IP和主机访问(vmware 设置固定ip)

摘要:Vmware设置静态IP和主机访问关键词:Vmware、静态IP、主机访问整体说明最近在做大模型的本地部署,发现之前的Virtualbox,不太能用到本地的英伟达GPU,所以开始使用...

取消回复欢迎 发表评论: