gpt4 book ai didi

c# - 分片目录结构算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:47 25 4
gpt4 key购买 nike

我需要在磁盘上存储大量(数百万)个文件。我想使用分片目录结构,因此目录中的文件不超过一千个。如果我使用 3 个目录深度,我可以获得十亿个文件 (1000^3)。

我的数学有点生疏,我不确定在给定文件的整数键的情况下计算文件将落入哪个目录的正确公式。

例如,文件“0010.pdf”将位于目录“0000\0000\0000\0010.pdf”中。文件“2010.pdf”将进入“0000\0000\0002\0010.pdf”。所以结构是“{level 1}{level 2}{level 3}{file}”。

我如何从数学上计算出各个级别?我正在寻找一个公式。 C# 代码会更好,但如果需要,我可以从公式中得出。

编辑

我将下面的答案转换为 C# 函数。

public static string Shard(long key, string extension, int maxFiles = 1000, int depth = 3)
{
var parts = new List<string>();
long current = key;

for (int i = depth; i > 0; i--)
{
long q = Convert.ToInt64(Math.Pow(maxFiles, i));
long level = current / q;

parts.Add(string.Format("{0:0000}", level));

current = current % q;
}

parts.Add(string.Format("{0:0000}{1}", current, extension));

string separator = Path.DirectorySeparatorChar.ToString(CultureInfo.InvariantCulture);
string path = string.Join(separator, parts);

return path;
}

最佳答案

除以 1000^3 = 1000000000(模除以 1000 - 什么都不做)得到一级目录。

除以1000^2 = 1000000,模除以1000,得到二级目录。

除以1000,取模1000,得到三级目录。

修改 1000 以获取文件。

请注意,这实际上是如何通过从 1000^3 开始的 for 循环完成的,每一步除以 1000。

示例:

Input: 123456789012

123456789012 / 1000000000 = 123
123456789012 / 1000000 % 1000 = 456
123456789012 / 1000 % 1000 = 789
123456789012 % 1000 = 012

Directory / file: 0123/0456/0789/0012

或者,迭代地进行:
(删除 % 1000 并改为在上一步修改数字和模组)

Input: 123456789012

123456789012 / 1000000000 = 123
123456789012 % 1000000000 = 456789012

456789012 / 1000000 = 456
456789012 % 1000000 = 789012

789012 / 1000 = 789
789012 % 1000 = 012

取每一次除法的结果,最后的模结果:

Directory / file: 0123/0456/0789/0012

补充说明:

您可能可以去掉结构的每个级别中的一个数字 - 因为您只有 0-999,所以没有必要使用 4 位数字。

关于c# - 分片目录结构算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com