使用UUID拆分将文件均匀分布在目录中

bun*_*noi 1 hash uuid

我正在研究构建均匀分布的两级目录结构的最佳方法,该结构用于存储分布式应用程序接收的文件(文件不带文件名)。为此,我最初的计划是为目录1使用哈希字符串的前两个字符,对于目录2采用后两个字符,例如:

67ca bf2cf7418461ad53d9fd7e067049 的哈希可用于在目录结构中存储具有相同名称的文件,如下所示:/ 67 / ca / 67cabf2cf7418461ad53d9fd7e067049

然后,我意识到,由于我必须为每个传入的“ blob”创建一个唯一的文件名(UUID),所以我可以只使用UUID本身的前四个字符,从而省去散列UUID的麻烦。例如:

可以使用ea5d c4cf-1b91-4a8f-8d56-69b7223d8954的UUID 在目录结构中存储具有相同名称的文件,如下所示: / ea / 5d / ea5dc4cf-1b91-4a8f-8d56-69b7223d8954

我对UUID的唯一性有很好的了解,但是对于前四个字符的随机性是否会像哈希的前四个字符一样均匀分布,我无法找到任何决定性的解释,特别是考虑到第一个八位位组是根的在时间戳中(来源https://tools.ietf.org/html/rfc4122)。

我确实找到先前的问题,但似乎还没有果断的答案!

有谁能帮助我更好地理解这一点,或解释为什么散列可能与散列一样小?

bun*_*noi 5

因此,我用一组10,000,000个UUID(版本4)进行了测试,得出的结论是传播非常均匀。结果如下,希望对大家有所帮助。

+---------------+------------+--+----------------+------------+
| First 2 chars | frequency  |  | Second 2 chars | frequency  |
+---------------+------------+--+----------------+------------+
| ea            | 39781      |  | 3c             | 39624      |
+---------------+------------+--+----------------+------------+
| 57            | 39589      |  | 6e             | 39575      |
+---------------+------------+--+----------------+------------+
| 63            | 39566      |  | f6             | 39524      |
+---------------+------------+--+----------------+------------+
| etc.          | etc.       |  | etc.           | etc.       |
+---------------+------------+--+----------------+------------+
| middle rows of results removed to keep this concise.        |
+---------------+------------+--+----------------+------------+
+---------------+------------+--+----------------+------------+
| b3            | 38455      |  | cf             | 38572      |
+---------------+------------+--+----------------+------------+
| f8            | 38454      |  | 4a             | 38549      |
+---------------+------------+--+----------------+------------+
| d7            | 38448      |  | b1             | 38540      |
+---------------+------------+--+----------------+------------+
| Total         | 10,000,000 |  |                | 10,000,000 |
+---------------+------------+--+----------------+------------+
Run Code Online (Sandbox Code Playgroud)