我正在研究构建均匀分布的两级目录结构的最佳方法,用于存储分布式应用程序接收的文件(文件没有文件名)。为实现这一目标,我的初步计划是为目录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之前的问题但似乎没有果断回答!
是否有人能够帮助我更好地理解这一点,或解释为什么传播可能会或可能不会像哈希一样?
答案 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 |
+---------------+------------+--+----------------+------------+