Сортировка файла с огромным объемом данных с учетом ограничения памяти - PullRequest
31 голосов
/ 18 января 2010

Баллов:

  • Мы обрабатываем тысячи плоских файлов в день одновременно.
  • Ограничение памяти является серьезной проблемой.
  • Мы используем поток для каждого файлового процесса.
  • Мы не сортируем по столбцам. Каждая строка (запись) в файле рассматривается как один столбец.

Не могу сделать:

  • Мы не можем использовать команды сортировки unix / linux.
  • Мы не можем использовать какую-либо систему баз данных, независимо от того, насколько легкими они могут быть.

Теперь мы не можем просто загрузить все в коллекцию и использовать механизм сортировки. Он съест всю память, и программа получит кучу ошибок.

В этой ситуации, как бы вы отсортировали записи / строки в файле?

Ответы [ 12 ]

0 голосов
/ 18 января 2010

Если вы можете перемещаться вперед / назад по файлу (искать) и перезаписывать части файла, тогда вам следует использовать пузырьковая сортировка .

Вам придется сканировать строки вфайл и должен иметь только 2 строки в памяти на данный момент, а затем поменять их местами, если они не в правильном порядке.Повторяйте процесс, пока нет файлов для обмена.

0 голосов
/ 18 января 2010

Я знаю, что вы упомянули, что не используете базу данных, какой бы легкой она ни была ... так что, возможно, это не вариант.Но как насчет hsqldb в памяти ... отправить его, отсортировать по запросу, очистить его.Просто мысль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...