高效同步数据的方法及效率测试--边打包边压缩边传输边解压20150105

有些时候在备份或者同步有很多文件的大目录时(比如几个GB或者几十个GB的数据库目录、log目录),直接scp的话花费的时间较长,虽然可以采用先压缩再传输再解压的方法,传输的数据量确实减少了,但压缩和解压也会耗费很多的时间,总体效果也不令人满意,昨天晚上突发奇想,由于之前做过流媒体视频点播的项目的经验,如果能像看高清视频一样只需要下载完视频文件的metadata头就可以实现边下载边播放,即渐进式下载(http://baike.baidu.com/link?url=fTWQYBTqQr1BisysCAkoqIytbwotfBYvFEMxEAlspRbNmE6b5lwVLNzA-qgw6yGlFgBepYBzqvUEb2tqQaehBK)
,那就完美了,今天在网上一搜linux还真行,兴奋之余做一下对比测试:

先上结论:

(1)总体来说,对于文本文件,压缩要比不压缩传输效率更高些,但效果不明显(因为瓶颈不在网络传输这块,而在于压缩,参见下文测试1与2,3与4的对比);

(2)采用边打包边压缩边传输边解压的流式传输方式的话,传输效率能比直接scp/rsync的方式提高35%;

(3)具体到流式传输的ssh和nc的方式上,因为nc不需要用户验证、不需要加密传输的数据,效率稍微高一点,对比效果不明显(因为瓶颈不在网络传输这块,而在于压缩);

(4)在实际使用中更倾向于采用ssh的方式,因为:可以采用push或者pull的方式,且一条命令搞定,同一个源可以有多个并发,而nc需要先在接受端监听端口,然后在发送端开始传输,需要分别执行2条命令。担心:如果在传输的同时有第三者同时向接收端的监听端口发送数据,容易造成数据的不完整性,但实际测试发现nc的接受端只能和一个发送端建立连接进行数据传输,如果正在传输数据,那么第三者发往改监听端口的数据将不会传输,只有新监听端口或者等传输完成后,再重新启用改端口进行传输,总之还是倾向于与ssh的方式。

测试环境:centos5.5  千兆局域网络

测试目录/var/log大小8.9GB

[[email protected] ~]# du -h /var/log/

28K /var/log/prelink

8.0K /var/log/conman.old

8.0K /var/log/vbox

24K /var/log/cups

50M /var/log/redis

76K /var/log/nginx

6.1M /var/log/sa

8.0K /var/log/conman

8.0K /var/log/ppp

18M /var/log/audit

152K /var/log/php-fpm

8.8G /var/log/rabbitmq

12K /var/log/pm

16K /var/log/mail

8.9G /var/log/

[[email protected] ~]#

1、直接纯scp拷贝的时间(5‘20’‘):

[[email protected] ~]# time scp -r /var/log/ 192.168.1.130:/root/test-dir/

real 5m20.834s

user 3m29.049s

sys 0m41.038s

2、先打包压缩再传输再解压的时间(3’33‘’+14‘’+1‘19’‘=5’6‘’):

纯压缩的时间:

[[email protected] ~]# time tar czf  varlog.tar.gz /var/log

tar: Removing leading `/‘ from member names

real 3m33.740s

user 3m28.068s

sys 0m19.081s

纯压缩后的大小:

[[email protected] test-dir]# du  -h ../varlog.tar.gz

399M ../varlog.tar.gz

纯传输压缩包的时间:

[[email protected] ~]# time scp varlog.tar.gz 192.168.1.130:~

[email protected]‘s password:

varlog.tar.gz                                                                                                       100%  399MB  30.7MB/s   00:13

real 0m14.024s

user 0m9.510s

sys 0m1.283s

纯解压的时间

[[email protected] ~]# time tar xzf varlog.tar.gz

real 1m19.916s

user 0m49.498s

sys 0m35.588s

3、直接rysnc不启用压缩功能的传输时间(5‘12’‘):

[[email protected] ~]# rsync -r /var/log/  192.168.1.130:/root/test-dir

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(260) [sender=2.6.8]

[[email protected] ~]# time rsync -r /var/log/  192.168.1.130:/root/test-dir

[email protected]‘s password:

real 5m12.625s

user 3m55.503s

sys 0m34.568s

4、直接rsync启用压缩功能的传输时间(4’36‘’):

[[email protected] ~]# time rsync -zr /var/log/  192.168.1.130:/root/test-dir

real 4m35.991s

user 4m40.208s

sys 0m5.306s

5、边打包边压缩边传输边解压的时间(采用ssh远程执行命令的push方式):

[[email protected] ~]# time tar czf - /var/log  |ssh  192.168.1.130  tar xzf -  -C /root/test-dir/

tar: Removing leading `/‘ from member names

real 3m33.711s

user 3m37.066s

sys 0m22.210s

边打包边压缩边传输边解压的时间(采用ssh远程执行命令的pull方式):

[[email protected] test-dir]# time ssh  192.168.1.131  tar czf  -  /var/log |tar xzf - -C /root/test-dir/

tar: Removing leading `/‘ from member names

real 3m33.772s

user 1m13.207s

sys 0m55.302s

6、边打包边压缩边传输边解压的时间(采用nc push的方式):

接受端监听端口10086:

[[email protected] test-dir]# nc -l 10086 |tar xzf - -C /root/test-dir/

发送端开始传输:

[[email protected] ~]# time tar czf - /var/log |nc 192.168.1.130 10086

tar: Removing leading `/‘ from member names

real 3m31.218s

user 3m27.908s

sys 0m15.839s

边打包边压缩边传输边解压的时间(采用nc pull的方式):

这种方式好像行不通!

EOF

时间: 2024-10-11 18:13:37

高效同步数据的方法及效率测试--边打包边压缩边传输边解压20150105的相关文章

通用高效的数据修复方法:Row level repair

导读:随着大数据的进一步发展,NoSQL 数据库系统迅速发展并得到了广泛的应用.其中,Apache Cassandra 是最广泛使用的数据库之一.对于 Cassandra 的优化是大家研究的热点,而 ScyllaDB 则为其提供了一个新的思路.ScyllaDB 是一个基于 C++ 的开源的高性能的 Cassandra 的实现,较之 Cassandra 在性能上有了很大的提升.Nodetool repair 是 Cassandra 日常维护的重要一环,今天主要和大家分享一下 ScyllaDB 在这

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

TensorFlow高效读取数据的方法——TFRecord的学习

关于TensorFlow读取数据,官网给出了三种方法: 供给数据(Feeding):在TensorFlow程序运行的每一步,让python代码来供给数据. 从文件读取数据:在TensorFlow图的起始,让一个输入管线从文件中读取数据. 预加载数据:在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况). 对于数据量较小而言,可能一般选择直接将数据加载进内存,然后再分batch输入网络进行训练(tip:使用这种方法时,结合yeild 使用更为简洁).但是如果数据量较

大数据量分页存储过程效率测试附代码(转http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html)

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 1create database data_Test  --创建数据库data_Test  2GO  3use data_Test  4GO

java交换两个数的常见方法及效率测试

原文地址--http://blog.csdn.net/qq525099302/article/details/47294443 论两个数的交换的重要性 讨论交换两个数的方法对某些人来说无聊,但某些人很乐意探究,甚至某些面试官喜欢用这个做文章.刚出来找工作笔试的时候我也碰到与之相关的问题. 常见的两个数交换的方法 边赋值边运算 加减减交换 用中间变量交换 异或交换 下面是代码 public class Test { public static void main(String[] args) {

关于List.ToArray()方法的效率测试

之前一直认为因为List内部实现是数组,ToArray的实现只是将数组返回出去而已. 今天测了一下结果完全不一样 var a = new List<int>(); for (int i = 0; i < 10000; i++) { a.Add(i); } DebugHelper.StartWatch(); foreach (var i in Enumerable.Range(0, 10000)) { a.ToArray(); } DebugHelper.StopWatch(); 1万数量

五大免费wordpress数据备份方法

网站属于自己的家,需要长时间的备份,不然哪天哪个黑客无聊,黑了你的网站,那你就哭吧,我们网站搬家的时候也需要备份文件,总之备份网站是为了你网站的安全,长久的发展,网站备份我一直都是手动备份,自己本来就比较懒,天天还要用手动备份,起初还好一天备份一次,随着时间的推移,一个月备份一次,一年备份一次,实在不想做这么繁琐的过程. 为了使自己的备份工作简单,在网上找了很多的办法,在这就给大家说说备份的方法. 一:wordpress自带的备份 在wordpress后台上"工具"-"导出&

Linux下压缩/解压方法大全

linux下压缩包格式繁多,并且在命令行下没有Windows下使用那么方便,有时候解压文件的时候会突然忘掉命令,这里fcbu.com为大家收集了基本所有文件格式的解压方法和打包命令.需要的可以参考一下: .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar只是打包,没有经过压缩的!) --------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz

linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法

Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包.-c是表示产生新的包 ,-f指定包的文件名. # tar -rf a