我正在开发一个 Java Web 应用程序,该应用程序使用数千个小文件来构建工件以响应请求。我认为如果我们可以将这些文件映射到内存而不是在整个磁盘上运行以一直查找它们,我们的系统可以看到性能改进。
我听说过 linux 中的 mmap,我对这个概念的基本理解是,当从磁盘读取文件时,文件的内容会缓存在内存中的某个位置,以便更快地进行后续访问。我的想法类似于这个想法,除了我想将整个可 mmap 的文件集读入内存,因为我的 Web 应用程序正在初始化以实现最小的请求时间响应。
我的思路的一个方面是,如果将文件全部打包并以某种方式作为虚拟文件系统安装在 JVM 中,我们可能会更快地将文件放入 jvm 内存。就目前而言,我们当前的实现可能需要几分钟才能遍历源文件集并找出磁盘上的所有内容。这是因为我们实际上是在对超过 300,000 个文件进行文件统计。
我找到了可以从 tar 文件中读取信息的 apache VFS 项目,但是我不确定他们的文档中是否可以指定诸如“另外,将整个 tar 读入内存并将其保存在那里..”之类的内容。
我们在这里谈论的是一个多线程环境,该环境服务于通常将一整套 300,000 多个源文件中的大约 100 个不同文件拼凑在一起以做出一个响应的工件。所以无论虚拟文件系统解决方案是什么,它都需要是线程安全的和高性能的。我们在这里只讨论读取文件,没有写入。
此外,我们正在运行具有 32 GB RAM 的 64 位操作系统,我们的 300,000 个文件占用大约 1.5 到 2.5 GB 的空间。我们肯定可以将 2.5 GB 的文件读入内存比 300K 的几 KB 大小的小文件快得多。
感谢您的输入!
- 杰森