【问题标题】:How to decompress faster in Java?如何在 Java 中更快地解压?
【发布时间】:2011-03-15 11:17:50
【问题描述】:

我们的系统存在文件过多的问题,该问题用于应该一直使用的 web 应用程序。这意味着无法删除文件并且文件太多,从而使系统(这是一个窗口)变慢。我们想压缩文件,当文件被请求时,我们将特定文件解压缩出来。

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

例如,我使用 Jmeter 模拟了 30 个用户使用系统的情况,随机延迟在 0.3 秒到 0.6 秒之间。虽然我怀疑可能没有这么多的请求,但我无法提前知道有多少人会使用这些网络应用程序。想请教各位大神,有没有其他方法可以解决这个问题?

提前致谢!!

附:如果需要任何第三方库,它必须是免费的!

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

【问题讨论】:

  • 您使用的是什么文件系统和 I/O 子系统?瓶颈肯定在那里。压缩/解压缩绝对不会让它更快。你只是把瓶颈移到了 CPU 上,它的时间非常宝贵。
  • 那是窗户!解压不行吗?
  • 你没有回答这个问题。 Windows 是雷德蒙德一家公司的平台/操作系统软件。它不是文件系统,也不是 I/O 子系统。无论如何,毕竟这个问题与编程无关。我会尝试 ServerFault(请了解您的硬件)。
  • 不知道.....这台机器不是我们的.....我们将我们的 webapp 部署在其他团队的服务器上
  • 联系他们的服务器管理员。至少,忘记(解)压缩。它不会以任何严肃的方式帮助您提高性能。

标签: java zip unzip


【解决方案1】:

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

现在我不完全确定为什么您认为这种压缩会加快速度而不是减慢速度。

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

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

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

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

但是,我不得不说,我已经看到 Windows 机器处理绝对的文件桶负载,所以如果问题出在我会非常惊讶。我认为您可能只需要找出实际导致“挂起”的原因。

【讨论】:

  • 拆分成多个目录是不行的,因为文件数没有减少
  • @gunbuster,如果问题是扫描目录,它工作。你还没有说清楚实际 问题是。
  • 您是说文件系统中的文件总数是性能问题的原因吗?请澄清
  • 因为网络应用程序使用的文件数量太多,它会降低机器的整体性能,而不仅仅是网络应用程序。有什么想法吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2011-12-12
      • 2014-03-26
      • 1970-01-01
      • 2011-10-30
      • 2017-03-23
      相关资源
      最近更新 更多