消息队列面试解析系列(七)- 数据压缩(上)

简介: 消息队列面试解析系列(七)- 数据压缩

1 数据压缩意义


Kafka使用数据压缩,最高可提升约几十倍吞吐量。数据压缩不仅可节省存储空间,还可用于提升网络传输性能。这种使用压缩提升系统性能的方法,不仅在MQ使用,日常开发也可。比如传输大量数据或要在磁盘、数据库中存储较大数据,这些情况下,都可考虑使用数据压缩提升性能,还能节省网络带宽和存储空间。


2 数据压缩适用场景    


进程间通过网络传输数据是不是需要压缩?

  • 不压缩直接传输耗时: 传输未压缩数据的耗时
  • 使用数据压缩耗时: 压缩耗时 + 传输压缩数据耗时 + 解压耗时
    压缩快还是不压缩快呢?
    不好说。影响因素多,比如数据压缩率、网络带宽、收发两端服务器的繁忙度。


压缩和解压的操作都是计算密集型操作。如果你的应用处理业务逻辑就需耗费大量CPU资源,就不太适合再压缩解压。


若系统瓶颈是磁盘IO性能,CPU资源又闲,这就非常适合在把数据写入磁盘前先压缩。

但若系统读写比严重失调,要考虑每读次数据就解压次是不是划算。


压缩的本质是资源置换,即时间换空间或CPU资源换存储资源。


就像木桶理论,每个系统都有性能瓶颈资源,可能磁盘IO、网络带宽、CPU。

若使用压缩,能用长板来换些短板,那总体上就能提升性能,这就划算。

若用压缩后,短板更短,就不划算。


只有通过性能测试,确认数据压缩可提升系统性能,就需选择合适压缩算法了。



3 压缩算法抉择


压缩算法可以分为

  • 有损压缩
    主要用来压缩音视频,它压缩之后会丢失信息
  • 无损压缩
    这讨论都是无损压缩,即数据经过压缩和解压过程后,与压缩前相比100%相同。


数据为什么可被压缩呢?各种各样压缩算法又怎么压缩数据的?

举个极端例子:

00000000000000000000

人肉压缩下:

20个0

20个字符就被压缩成4字符,且可无损还原。

常用压缩算法:ZIP,GZIP,SNAPPY,LZ4,XZ。

选择时考虑数据的压缩率和压缩耗时。一般压缩率越高,压缩耗时越高。



  • 若要高性能,可选择压缩速度快的LZ4
  • 要更高压缩比,考虑GZIP或压缩率更高的XZ


压缩样本对压缩速度和压缩比的影响也较大,同样大小的一段数字和一段新闻的文本,即使用相同压缩算法,压缩率和压缩时间差异也较大。

所以,有时在选择压缩算法前,用系统样例业务数据做个测试,帮你找到最合适压缩算法。


如果感兴趣,可学习最经典的压缩算法:哈夫曼编码。

目录
相关文章
|
19天前
|
数据挖掘 Shell 测试技术
怎么用Python解析HTML轻松搞定网页数据
**Python解析HTML摘要** 本文介绍了使用Python处理HTML的常见需求,如数据提取、网络爬虫和分析,并讨论了三种解析方法。正则表达式适用于简单匹配,但对复杂HTML不理想;BeautifulSoup提供简单API,适合多数情况;lxml结合XPath,适合处理大型复杂文档。示例展示了如何用这些方法提取链接。
|
16天前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
25 0
|
10天前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
16天前
|
数据采集 存储 API
Python虚拟环境数据共享技术解析:最佳实践与常见误区
本文探讨了Python爬虫开发中如何在虚拟环境中管理数据,提倡使用共享目录、数据库和API进行数据共享。通过创建虚拟环境、安装依赖并提供一个使用代理IP爬取微博数据的示例,阐述了如何配置代理、解析网页及保存数据到共享路径。强调了避免硬编码路径、忽视依赖管理和数据安全性的误区。
37 11
Python虚拟环境数据共享技术解析:最佳实践与常见误区
|
23天前
|
JSON 文字识别 数据格式
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
|
9天前
|
DataWorks 安全 定位技术
DataWorks产品使用合集之如何同步OSS中的Parquet数据,并解析里面的数组成多个字段
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
16天前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
22 1
|
16天前
|
安全 Java 开发者
Java面试题:Java内存模型解析,Java内存模型的基本概念和它的重要性,Java内存模型中的“可见性”和“有序性”,以及具体实现?
Java面试题:Java内存模型解析,Java内存模型的基本概念和它的重要性,Java内存模型中的“可见性”和“有序性”,以及具体实现?
24 1
|
26天前
|
存储 JSON JavaScript
使用JSONObject解析与生成JSON数据
使用JSONObject解析与生成JSON数据
|
26天前
|
JSON 前端开发 JavaScript
Go怎么解析不定JSON数据?
在Go中处理不确定结构的JSON数据,可以使用`map[string]interface{}`来解析,它能适应各种JSON键值对,但需要类型检查。另一种方法是使用`json.RawMessage`保存原始JSON,之后按需解析。此外,`json.Number`用于处理任意精度的数字。当JSON字段类型未知时,可以先解码到`interface{}`并做类型断言。第三方库如gjson和jsonparser提供更灵活的解析选项。

热门文章

最新文章

推荐镜像

更多