Какой самый быстрый способ найти файлы, которые соответствуют заданным критериям? - PullRequest
0 голосов
/ 18 февраля 2020
OS: Linux
File System: ext4
Programming Language: C/C++

Предположим, у вас есть 10 миллионов файлов в папке, каждый из которых имеет формат:

StartTimestamp-EndTimestamp.ext

Мы знаем, что EndTimestamp больше, чем StartTimestamp. Мы также можем «заставить» их не пересекаться. Я имею в виду, что они могут быть вынуждены иметь последовательные временные метки, подобные этому:

0001-0100.ext
0102-0154.ext
0178-0236.ext
0236-0343.ext
...

, и не должны быть такими:

0002-0200.ext
0050-0150.ext
0120-0220.ext
...

Другими словами, в указанной временной метке мы можем быть вынужденным иметь только один матч, если это может помочь. Я ищу самый быстрый способ найти файл (ы), которые соответствуют указанной отметке времени, например:

0100 --> 0001-0100.ext
0101 --> no match
0102 --> 0102-0154.ext
0150 --> 0102-0154.ext

, и если это не может помочь, и мы не обязаны избегать пересечения между файлами :

0100 --> 0002-0200.ext, 0050-0150.ext
0200 --> 0002-0200.ext, 0120-0220.ext

Для простоты я уменьшил количество знаков временной метки до 4. Это действительно 16 цифр. Мой вопрос действительно: Как СЛУЧАЙНО получить доступ и найти файл, который я хочу, без необходимости (или с наименьшей необходимостью) использовать glob или readdir или подобные функции? Мы знаем, что в файловой системе журнала файлы хранятся в формате индексированной структуры BTree. Мне нужно использовать это без необходимости ходить по ним.

...