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

时间:2017-06-30 18:15:13

标签: hash uuid

我正在研究构建均匀分布的两级目录结构的最佳方法,用于存储分布式应用程序接收的文件(文件没有文件名)。为实现这一目标,我的初步计划是为目录1采用哈希字符串的前两个字符,为目录2采用接下来的两个字符,例如:

67ca 的散列bf2cf7418461ad53d9fd7e067049可用于在目录结构中以相同名称存储文件,如下所示: / 67 / ca /​​ 67cabf2cf7418461ad53d9fd7e067049

然后我意识到,因为我必须为每个传入的'blob'创建一个唯一的文件名(UUID),所以我可以使用UUID本身的前四个字符来节省自己对UUID进行散列的需要。 e.g:

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

我对UUID的唯一性有很好的理解,但我找不到任何决定性的解释,即前四个字符的随机性是否与散列的前四个字符一样均匀分布,特别是考虑到第一个八位字节植根于时间戳(来源https://tools.ietf.org/html/rfc4122)。

我确实找到了this之前的问题但似乎没有果断回答!

是否有人能够帮助我更好地理解这一点,或解释为什么传播可能会或可能不会像哈希一样?

1 个答案:

答案 0 :(得分:2)

所以,我用一组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 |
+---------------+------------+--+----------------+------------+