如何在Java中更快地解压缩?

时间:2011-03-15 03:00:15

标签: java zip unzip

我们的系统遇到了太多文件的问题,这些文件在webapp中使用,应该一直使用。这意味着文件无法删除,并且它们太多,使得系统(这是一个Windows)变慢。我们想压缩文件,当文件被请求时,我们解压缩特定文件。

我尝试过java ZipFile类,性能不够好,因为会有很多人使用webapp,他们会请求文件。根据我的观察,解压缩动作需要0.5秒到2秒之间的时间,并且当用户太多时,系统无法赶上它们。

例如,我使用Jmeter来模拟30个用户使用系统的情况,随机延迟在0.3秒到0.6秒之间。虽然我怀疑可能没有那么多请求,但我无法预知有多少人会使用这些webapps。我想问你们,有什么其他方法可以解决这个问题吗?

提前致谢!!

P.S。如果需要任何第三方库,它必须是免费的!

P.S。因为文件的数量太多了,它会挂起机器。我们想这样做:将2000文件压缩成zip文件,然后文件数量将减少,并希望系统不再挂起,并在需要时解压缩一些文件。

3 个答案:

答案 0 :(得分:3)

好的,这是一些想法。在我看来,您的核心问题是系统的缓慢,并且您正试图通过压缩文件并按需解压缩来修复它。然后你发现减压太慢了,你需要更快的方法来做到这一点。

现在,我并非完全确定为什么你认为这种压缩会加快速度而不是让事情变慢。

我会回到原始问题并更多地解决这个问题。 为什么是使您的系统变慢的文件数?如果你能解决这个问题,你可以用一种不会让事情变得更慢的方式来修复它。

如果目录中包含太多文件的问题,请考虑拆分为多个目录。但我不知道NTFS是否有这个问题(FAT确实如此)。例如,如果您有一个目录,其中包含过去十年中每分钟的文件(500万个文件),您可以将它们拆分为日期目录(三千五百个目录,每个目录中包含一千五百个文件)。

压缩不会减少文件的数量,只会减少它们占用的空间。

如果系统上的文件数量(而不是目录中)存在问题,那么有很多方法可以在系统之间拆分文件。例如,将整个文件集的10%设置为10台不同的计算机,并将特定文件的传入请求转发到相关的计算机。

但是,我必须说,我已经看到Windows机器处理文件的绝对存储桶负载,所以如果问题存在,我会非常惊讶。我想你可能只是要追查究竟是什么导致了你的“挂起”。

答案 1 :(得分:1)

压缩/解压缩文件不会使窗口更快。

答案 2 :(得分:1)

如果zip不提供性能提升(尽管在Java中具有本机实现),您可以尝试在文件系统级别进行改进。具有太多(> 10000)文件的文件夹在某些Windows文件系统下无法正常工作,因此请尝试将文件分成几个文件夹,调整NTFS文件系统(群集大小,文件系统的保留空间),禁用防病毒,禁用索引,购买SSD SLC硬盘......