Мне нужно хранить большое количество миллионов файлов на диске. Я хочу использовать структурированную структуру каталогов, поэтому в каталоге будет не более тысячи файлов. Если я использую 3 справочника глубоко, я могу получить миллиард файлов (1000^3).Алгоритм структуры строганых каталогов
Моя математика немного ржавая, и я не уверен, что правильная формула, чтобы выяснить, какой каталог будет приземляться файлом, если задан целочисленный ключ для файла.
Например, файл '0010.pdf' будет располагаться в каталоге '0000 \ 0000 \ 0000 \ 0010.pdf'. Файл '2010.pdf' зайдет в '0000 \ 0000 \ 0002 \ 0010.pdf'. Таким образом, структура «{уровень 1} {уровень 2} {уровень 3} {файл} '.
Как я могу математически определить различные уровни? Я ищу формулу. Код 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;
}
Планируете ли вы хранить слишком много файлов на диске? Производительность NTFS резко сократится. Sharding будет только помогать в формировании диска ReFS. –
Я понимаю, что вы можете избежать проблем с производительностью, перейдя в подпапки. [link] (http://stackoverflow.com/questions/197162/ntfs-performance-and-large-volumes-of-files-and-directories) –
http://technet.microsoft.com/en-us/library /cc781134.aspx, NTFS сохраняет все атрибуты файлов в одной структуре MFT независимо от структуры каталогов. В этом весь смысл, почему MS инвестировала в ReFS, которая имеет иерархический MFT, где каждый каталог имеет свою собственную таблицу children. http://blogs.msdn.com/b/b8/archive/2012/01/16/building-the-next-generation-file-system-for-windows-refs.aspx, однако до 100 000 файлов вы не столкнетесь любой вопрос. –