2013-04-17 62 views
0

我有一个服务器上的文件存储库,必须下载到移动设备。服务器上的文件可以在下载到设备后在服务器上更新;并且在随后的连接中,只有修改的文件必须被下载到设备。即时压缩有多昂贵?

我的选择是要么提前准备拉链,要么随时准备。为了提前创建它们,我必须事先为存储库的所有以前版本创建一个zip。为了即时准备,我可以找出哪些文件需要下载并在运行中压缩。

我认为这个决定取决于在飞行中准备这样一个拉链是多么昂贵。

我的问题是:

  • 需要多少费用来动态创建一个zip?可能有成千上万的移动设备;它应该可以缓存一个准备好的zip文件,但我也想考虑每个连接分开的压缩成本。这背后的目的是为了避免在服务器上存储历史数据

  • 除了动态的压缩成本之外,还有其他的参数需要考虑吗?

服务器运行在嵌入式tomcat进程中。

+0

在这种情况下,通常最好在用户请求它们时压缩文件,但要暂时保存副本。这样,您可以将保存的副本提供给请求相同文件的用户。 (但是,如果这些文件对于特定用户是唯一的,那么当许多用户同时下载时,如果您的服务器超载,则可能需要抢先压缩。) –

+0

谢谢@LeeMeador。该文件集不是用户唯一的,并希望能够保存(缓存)准备好的zip文件。 –

回答

1

在网络操作(如SSH/SFTP,SSL/TLS,HTTP(S)等)中的动态压缩不仅不会降低传输速度,而且会显着增加传输速度!所以只要有可能,欢迎压缩。

现在,您可以压缩发送到通道的数据,也可以压缩文件并发送压缩文件。发送压缩ZIP的问题是,在大多数情况下(流ZIP压缩库很少见,但它们确实存在IIRC),在压缩ZIP文件时无法流式处理 - 您需要等待打包完成才能响应请求。这可能会造成问题,如果档案是巨大的(几十兆字节或更大)。好处是你可以打包文件一次,并将其保存在缓存中很长一段时间(比如一周或一个月)。

+0

我并不需要在线(流媒体)zip;我试图根据需要(包括使用缓存副本)在服务器上存储历史数据之间进行压缩。 –

0

我建议你看看this presentation from Google中的幻灯片#13。

他们使用zippy这是一个定制的zip实现,但重点是明确的:压缩比发送数据更便宜。是的,你仍然需要发送文件,因此小文件的存储空间较小,但大多数时间都是压缩。

+0

我已经意识到压缩的好处。问题在于是否在服务器上预先准备它们(存储历史状态)v/s即时创建它们(有可能的缓存) –

+0

如果不知道数据和预算,很难回答您的问题。通常情况下,预处理(在你的情况下准备拉链)是一种可行的方式,但是如果你的存储设备昂贵,那么你可能需要看看你准备付出多少钱来降低延迟。 – mindas

+0

存储便宜,成本是在服务器上添加状态信息。如果我想要预先创建zip,我需要一个从每个以前的版本到最新的delta;创建它们,我只需要服务器上的当前快照 –