【发布时间】:2012-12-12 14:33:02
【问题描述】:
我想使用 GUID (uuid) 来命名大型文件存储中的文件夹。每个存储项目都有自己的文件夹和 guid。
最简单的方法是“x:\items\uuid\{uuid}...”
例如:“x:\items\uuid\F3B16318-4236-4E45-92B3-3C2C3F31D44F...”
我在这里看到一个问题。如果您期望获得至少 10.000 件物品,并且可能有 100.000 件或更多,然后是 100 万件,该怎么办。我不想将这么多项目(子文件夹)放在一个文件夹中。
我想通过拆分 guid 来解决这个问题。使用前 2 个字符在第一级创建子文件夹,然后使用接下来的 2 个字符并创建子文件夹。 上面的例子是 --> "x:\items\uuid\F3\B1\6318-4236-4E45-92B3-3C2C3F31D44F..."
如果 guid 的前 4 个字符真的像预期的那样随机,那么我会在 256 个文件夹中得到 256 个文件夹,并且我总是在每个文件夹中得到合理数量的项目 例如,如果您有 100 万个项目,那么您会得到 --> 1 000 000 / 256 /256 = 每个文件夹 15.25 个项目
过去我已经测试过第一个字符的随机性。 (通过 vb.net 应用程序)。结果:分布在文件夹中的项目均匀退出。 也有人得出了同样的结论。见How evenly spread are the first four bytes of a Guid created in .NET?
我想到的可能拆分(以 100 万个项目为例) C1 = GUID 的字符 1,C2 = 字符 2,等等
- C1\C2\Rest of GUID --> 16 * 16 * 3906(几乎 4000 仍然是很多文件夹)
- C1\C2\C3\C4\Rest of Guid --> 16 * 16 * 16 * 16 * 15(不必要的文件夹拆分)
- C1C2\C3C4\Rest of Guid --> 256 * 256 * 15(对我来说是最佳选择?)
- C1C2C3\Rest of Guid --> 4096 * 244(到第一级的许多文件夹??)
- C1C2C3C4\Rest of Guid --> 65536 * 15(到第一级的许多文件夹!)
我的问题是:
- 有没有人看到这种实现的缺点。 (方案:*C1C2\C3C4\Rest of Guid)
- 是否有一些拆分 Guid 的标准,或执行此操作的一般方法。
- 如果您将几十万个子文件夹放在一个文件夹中会发生什么情况(如果可能,我仍然不喜欢使用任何拆分)
谢谢,Mumblic
【问题讨论】: