使用tar+pigz+ssh实现大数据的高效传输
以前我们跨主机拷贝大数据的时候,比如要拷贝超过100GB的mysql原始数据,我们通常的做法如下:
- 在源端打包压缩为tar.gz文件
- 采用scp或者rsync等方式拷贝到目标主机
- 在目标主机解压文件
这三个过程是同步阻塞,即不能同时异步执行,导致效率低下。
现在我们将过程优化为以数据流的方式,同时执行(非阻塞模式),则效率一般可以提高到原来的3倍以上,具体实现如下:
磁盘读取---->打包---->压缩------>传输---->解压缩-->拆包---->落盘
|->tar |->gzip |->ssh |->gzip |->tar
比如我要将本地的test目录拷贝到“目标IP”的的data目录,则命令如下:
tar -c test/ |pigz |ssh -c arcfour128 目标IP "gzip -d|tar -xC /data"
当然,这里的解压过程仍然用了效率比较低下的gzip,如果将解压工具换成lz4(但需要单独编译安装),则效率可以再提高不少。
如果不需要解压,则命令变为:
tar -c test/ |pigz |ssh -c arcfour128 目标IP "cat >/data/test.tar.gz"
注:因为采用了流式压缩,解压过程必须加上-i参数,及tar –ixf /data/test.tar.gz 。
说明: pigz是一个高效的压缩工具,可以将多核CPU的每一分剩余性能都用来做压缩计算。而传统的gzip则只能用单核CPU。比如一台2个8core cpu服务器采用pigz和gzip压缩相同的数据,一般性能差距至少在7-8倍以上(一般不会达到理论的16倍,因为受限于磁盘的读写速度和内存等资源)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南