一个无损、实时的压缩算法,同时具备高压缩比率和性能,Star23K
nanshan 2024-11-23 20:12 33 浏览 0 评论
我们在日常工作中,或者应用程序中,基本都会用到压缩工具或者算法对文件进行压缩,比如:
-
文件传输: 对 大文件或者很多小文件进行传输时进行压缩,减少传输所需的时间和带宽;
-
文件存储: 大文件进行存储时,进行文件压缩可以有效的减少存储容量的需求;
-
数据备份: 对一些备份数据进行压缩存储,比如mysql的dump文件等等;
-
多媒体分发: 对视频、音频和其他多媒体文件压缩,可以改善用户体验,减少缓冲时间(但是这个也需要实时解压能力)。
-
特定系统: 比如类似堡垒机、视频监控这类系统,需要存储大量的录屏录像文件,这时候都需要进行压缩存储。
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 是通过为其提供一些样本(每个样本一个文件)来实现的。此训练的结果存储在名为“字典”的文件中,必须在压缩和解压缩之前加载该文件。使用此字典,可以显著提高小数据上可实现的压缩率。下图为采用“字典”进行压缩解压和不采用“字典”的对比:
zstd目前已经可以通过操作系统的包管理器进行安装,以Ubuntu操作系统为例:
#更新系统
sudo apt update
sudo apt upgrade
#安装依赖
sudo apt install build-essential wget tar
#安装zstd
sudo apt install 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下载
-
多种编程语言:
https://facebook.github.io/zstd/#other-languages
# 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
"123456qwert" > data = b
1) > cdata = zstd.compress(data,
> data == zstd.decompress(cdata)
True
1, 4) > cdata_mt = zstd.compress(data,
> cdata == cdata_mt
True
> data == zstd.decompress(cdata_mt)
True
综上所述,zstd是一种高效、灵活的压缩工具,适用于需要快速压缩和解压缩的场景,如网络数据传输、实时视频流处理、大规模数据存储、多媒体内容分发、以及日常文件备份和恢复,能够显著减少数据传输时间和存储空间,同时保持数据的完整性和一致性。如果你也在寻找类似的压缩解压方案的话,不防试试zstd吧!
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)