gpt4 book ai didi

java - 存储大量小文件 : archive vs. 文件系统

转载 作者:行者123 更新时间:2023-11-30 09:48:30 24 4
gpt4 key购买 nike

我正在创建一个需要大量图像缩略图(~3000,5-25KB)的应用程序。因为速度很重要,所以我计划在应用程序启动时将这些图像加载到内存中。在运行时,新的缩略图将被下载并添加到集合中。

我可以将它们全部存储在一个文件夹中,但是当程序启动时将数千个文件读入内存似乎效率不高。

我的第二个选择是将它们保存在某种(压缩的)存档中。这将使存储本身和加载更有效率(我认为)。但是,新文件会定期添加,这可能不会像将它们保存在文件夹中那样顺利。

将小文件缓存存储在(压缩的)存档中是不是一个坏主意? ZIP 文件是要走的路吗?使用未压缩的存档会更好吗(如果是的话,是什么类型的)?

所有图像文件都是 JPEG 格式。

提前致谢!

编辑:我正在考虑放弃“在应用程序启动时将所有内容加载到内存中”的事情。这会稍微简化我的问题。我最初将所有内容都放在一个大文件中的想法现在看来效果不大,因为一个目录中有许多文件的问题可以通过散列到子目录中来解决。

最佳答案

小文件压缩得不是特别好,因此您可能不会获得太多压缩。

虽然加载文件会很快,因为它们较小,但解压缩会增加时间。您必须进行试验,看看哪个更快。

我认为真正的问题在于文件系统在遍历所有小文件时的效率,尤其是当它们都在一个文件夹中时。当文件夹包含大量文件时,Windows 因效率低下而臭名昭著。

我会考虑做一些事情,比如将它们写到一个文件中,未压缩,可以流式传输到内存中——也许不一定是连续的内存,因为这可能是个问题。但想法是将它们全部放在一个文件中。然后编写某种索引,将文件名或其他标识符与可以确定图像在内存中的位置的偏移量联系起来。

可以在最后添加新图像,并适当更新索引。

这并不花哨,但这是您要避免的。存档甚至文件系统为您提供了强大的功能和灵 active ,但以效率为代价。当您知道自己想做什么时,有时简单会更好。

我会考虑实现一个从文件夹中读取文件的解决方案,另一个将文件划分为子文件夹和子子文件夹的解决方案,以便任何给定文件夹中的文件不超过 100 个左右,然后对这些解决方案进行计时,以便您进行比较到。我认为一个简单的索引文件足够快,您甚至不需要像您建议的那样预加载图像——只需在需要时检索它们,并在它们进入内存后将它们保存在身边。

关于java - 存储大量小文件 : archive vs. 文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com