1

在搜索了一段时间关于如何处理网站多媒体内容(使用本机文件系统或数据库 blob)的共识之后,主要在这里:

MySQL Binary Storage using BLOB VS OS File System:大文件、大数量、大问题

我决定直接在文件系统上保存并将路径引用放入数据库中。我基本上正在开发一个 Web 应用程序,其中将包含大量图像(主要是5MBto 10MB)和视频(主要是50MBto 100MB)。

有人可以建议我在文件系统上组织我的照片和视频的最佳方式。我了解到的流行解决方案是将文件散列到各个子目录中。

我不清楚为什么我们从反面开始使用文件的基本名称?我尝试将文件名的 2 个字符分组(假设从反面进行相同操作),然后创建目录的层次结构树。在这两种情况下,我都无法发现目录树的宽度或高度的差异。

而且,由于可能会有大量的照片和视频,我必须优先考虑什么,优化目录树的高度或目录树的宽度?

4

1 回答 1

0

在这方面可能会迟到。但是一种解决方案(如果它适合您的用例)可能是文件名散列。这是一种使用文件名创建易于重现的文件路径的方法,同时还创建了一个分布良好的目录结构。例如,您可以使用文件名哈希码的字节作为其路径:

String fileName = "cat.gif";
int hash = fileName.hashCode();
int mask = 255;
int firstDir = hash & mask;
int secondDir = (hash >> 8) & mask;

这将导致路径为:

/172/029/cat.gif

然后,您可以cat.gif通过重现算法在目录结构中找到。

使用 HEX 作为目录名称就像转换int值一样简单:

String path = new StringBuilder(File.separator)
        .append(String.format("%02x", firstDir))
        .append(File.separator)
        .append(String.format("%02x", secondDir)
        .toString();

导致:

/AC/1D/cat.gif

几年前我写了一篇关于这个的文章,最近把它移到了 Medium。它有更多细节和一些示例代码:文件名哈希:创建哈希目录结构。希望这可以帮助!

于 2017-06-27T19:01:12.557 回答