Сортировка 20ГБ данных

Раньше мне приходилось работать с большими файлами где-то в диапазоне 0,1-3 ГБ. Не все «столбцы» были необходимы, поэтому было нормально разместить оставшиеся данные в оперативной памяти. Теперь мне нужно работать с файлами в диапазоне 1-20 ГБ, и они, вероятно, будут расти с течением времени. Это совершенно другое, потому что вы больше не можете разместить данные в оперативной памяти.

Мой файл содержит несколько миллионов «записей» (я нашел одну с 30 млн. Записей). На входе содержится около 10 «столбцов»: одна строка (50-1000 символов Юникода) и несколько чисел. Я должен отсортировать данные по «столбцу» и показать его. Для пользователя актуальны только верхние записи (1-30%), остальное - данные низкого качества.

Итак, мне нужны некоторые предложения о том, в каком направлении идти. Я определенно не хочу помещать данные в БД, потому что их сложно установить и настроить для не разбирающихся в компьютерах людей. Мне нравится доставлять монолитную программу.

Отображение данных совсем не сложно. Но сортировка ... без загрузки данных в ОЗУ на обычных ПК (2-6 ГБ ОЗУ) ... убьет несколько хороших часов.

Я немного искал MMF (файлы с отображением в памяти), но эта статья от Дэнни Торпа показывает, что она может не подойти:http://dannythorpe.com/2004/03/19/the-hidden-costs-of-memory-mapped-files/

Итак, я думал о загрузке только данных из столбца, который должен быть отсортирован в оперативной памяти и указатель на адрес (в файл на диске) «записи». Я сортирую «столбец», затем использую указатель, чтобы найти запись, соответствующую каждой ячейке столбца, и восстановить запись. «Восстановление» будет записано непосредственно на диск, поэтому дополнительная оперативная память не потребуется.

PS: я ищу решение, которое будет работать как на Lazarus, так и на Delphi, потому что Lazarus (на самом деле FPC) имеет 64-битную поддержку для Mac. 64 бит означает больше доступной оперативной памяти = более быстрая сортировка.

Ответы на вопрос(5)

Ваш ответ на вопрос