Я занимаюсь разработкой программы на C под Linux, в которой выполняется поиск файла размером ~ 2 ГБ. Файл состоит из строк текста, оканчивающихся на '\n'
, каждая строка состоит из пяти полей '|'
, разделенных как a | b | c | d | e |.
Затем мне нужно проанализировать каждую строку, чтобы выполнитьпоиск. Файл сортируется по полю a, но поиск выполняется, главным образом, с использованием полей b и c в качестве ключей поиска!
Я пытался использовать mapped file
для ускорения поиска по файлу, но яне получил удовлетворительных результатов, главным образом - я думаю - по причинам, объясненным выше.
Теперь я думаю использовать массив, в который я вставляю данные, уже проанализированные в структуре, а затем сортирую массив пополя b и c и применение двоичного поиска, только если ключи поиска - b и c, в противном случае я использую последовательный поиск.
Полезно ли использовать отображенную память для заполнения массива из последовательного файла?
Это хороший способ улучшить исследования?
Любые предложения приветствуются