最近来了一个急活儿,要求如下:
(1)需要把一个占用200多GB空间的SQL数据库里的2000多万篇文章转换为Json格式并且传到Linux服务器中。数据库文件有两个文件,一个主文件(180G),一个日志文件(20G)。
(2)需要在三天内完成。
(3)目前存在本地数据库中,并且数据所在计算机算力不高。
考虑再三,由于数据量大,如果在本地把数据生成json格式后通过FTP传到Linux服务器上,这么短的时间可能来不及。之前跑别的数据,一个星期才生成了不到100万条数据,现在的要求是三天内就要搞定。跟领导反映了目前状况,领导同意申请一台阿里云服务器,用来生产json文件并且传输到Linux服务器上。
怎么把200G的文件传到服务器上去?
方案有:
(1)直接ftp上传
通过计算:200(gb)*1024(m)/2(m/s)/60(s)/60(min)=28(小时)。如果传输文件就需要一天多,剩下的时间还需要把文件转换为json,传输耗费时间太多。最后放弃了。
(2)通过压缩软件,把一个大文件压缩成若干个小文件,创建多个FTP通道,同时传输多个文件,经过测试FTP每条通道有限制速度,并且就算创建再多的通道也会受限于总的带宽上行速度。所以我考虑把一部分数据拷回家再传到服务器上。这样至少有两条线路同时上传数据,每条线路开三个通道,一共六个ftp通道,一个晚上就能够搞定。
我开始通过360zip分卷压缩。每个文件4GB,压缩了大半天,下班的时候还没压缩好,我就找了个硬盘先把已经压缩好的部分文件拷回家了。
回到家后,插上硬盘,安装ftp软件,开始传输文件。再看看公司那边剩下的那部分数据也已经压缩完了,一共有45个文件。同样通过ftp,把公司的那部分文件传输到服务器上,一切都很顺利。
第二天到公司后,发现都传好了。到目前为止一切都很顺利。
多亏了压缩软件的分卷压缩的功能,如果没有这个软件,我可能就没办法在这么短的时间内把一个200G的文件传输到服务器上去了。
很高兴一切按计划进行中,虽然压缩文件都传到服务器,下一步就是解压文件了。还是用的360zip压缩软件。开始解压文件,大概半个小时后,数据库日志文件解压成功,在解压主文件时发生了错误,提示xxxx.zip.001文件损坏,无法解压。此路不通,另寻他路。
刚开始我以为是在ftp传输过程中发生了错误,检查了文件大小,发现大小没错。我重新通过ftp吧001这个压缩文件传了一遍。半个小时后,文件传完了,重新尝试解压文件。又过去了半个小时,数据库日志文件成功解压出来,主文件发生错误,提示的错误信息同上一次一样。看来不是这个文件有问题。此路不通,另寻他路。
我又想了想,分卷后一共有45个压缩文件,怎么样才能快速的对比出来,线上线下的文件是否相同的呢?何不采用对比两个文件的md5值?马上找了一个可以右键查看文件md5值的工具。因为文件比较大每次查看文件的md5值都需要花费好几分钟,对比了前面5个之后,发现线上线下的文件都一致的,没有错误。这样又过去了半个小时。45个都对比一遍也需要花费2~3个小时,我选择了放弃。此路不通,另寻他路。
会不会是解压软件的问题,导致的失败。7z是开源的解压缩软件,所以我尝试用7z解压软件来解压这个文件,半个小时后,依旧错误,提示错误同360zip,估计360zip是从开源的7z的基础上修改的。那就用收费的rar试试看,大约半小时后,还是失败,此路不通,另寻他路。
难道是权限的原因,解压软件没有权限读取数据库文件?
难道是文件太大,C盘无法缓存临时文件导致无法解压,还是读取文件过程中导致内存溢出,导致最后失败?
文件解压到临时文件夹后,能不能不要校验文件的一致性?
。。。
研究了各个压缩软件的设置后,发现rar软件的款目最多,好多都是360zip软件上没有的款目。Rar软件上有一项是忽略错误解压文件,我抱着试试看的心态点了一下,万万没想到大概半个小时以后居然成功了。
马上把解压出来的数据文件附加到数据库上,生成json文件,最后顺利的把文件传输到Linux服务器中。
通过这个大文件压缩→传输→解压这件事情,你看到了什么?
为何免费的360zip的设置没有RAR的多?
为何RAR能解决360zip解决不了的问题?
为何以前收费的rar软件不再收费了?