我正在审查用Java(一种内容交付服务器)编写的遗留应用程序的代码。它们有一个文件存储库,其中包含的文件都以其内容的MD5哈希十六进制命名。
7ABC1FBF6109EAB64DF6682158317181.dat
这些文件有数千个。存储库文件结构如下:
C:/base/resources/repository/{First two digits of hex MD5 hash}/{MD5 hash hex}.dat
例如:
C:/base/resources/repository/7A/7ABC1FBF6109EAB64DF6682158317181.dat
有没有任何理由可以验证这样做,假设没有需要它的业务逻辑(我告诉你没有)。应用程序获取文件请求,并使用散列映射的文件中的内容进行响应。
我真的想不出任何事情。
应用程序在Linux机器上运行,我不知道它们使用的是哪个发行版或文件系统。
答案 0 :(得分:1)
通过哈希的属性
{First two digits of hex MD5 hash}/{MD5 hash hex}.dat
毫无意义。在任何文件系统目录中,逻辑上应将事物组合在一起,但根据定义,共享相同前缀的两个散列项之间没有逻辑关系。我的猜测是有人厌倦了同时在目录中看到太多文件,所以这可能与性能有关。
答案 1 :(得分:1)
当单个目录包含大量文件时,某些文件系统调用会变得非常慢,尤其是在Windows上。管理它们也更难,因为只是简单地列出它们的内容太慢而且返回的条目太多了。
答案 2 :(得分:1)
文件管理工具之类的GUI工具可能会挂起,或者如果该文件夹也是远程的(NAS,SAMBA),可能需要花费很长时间才能简要地查看内容。当然,应用程序可以更好地按日期或其他不太随机的方式对文件进行分组。