asmer 31.05.2012 20:46 Psi+

Решил я побаловаться с большими объемами данных в sbcl. Взял лог, откусил от него 1 250 000 строк и попарсил их.

Парсер cl-ppcre
Код читает файл, выкуривает оттуда дату/время, процесс, пид, хост и сообщение, записывает в один массив хосты (он у меня один) в один — название процесса ( у меня вышло около 25), в один массив дату, сообщение, индекс хоста, индекс процесса, pid. Потом все это пишется в лиспофайл (with-standard-io-syntax).

Итоги:
размер лога — 158602612 (1250000 записей)
размер итогово лиспофайла — 219861450
Время парсинга — 45 секунд.
Время записи лиспофайла — 45 секунд.
Потребление памяти (RES) — ~1050 mb.

Потом этот файл загружается в sbcl:
Время загрузки — около 55 секунд,
Время сортировки по сообщениям:
(sort a #'string< :key #'(lambda (record) (getf record :message))) — 22 секунды.
Время сортировки по процессу (типа int foreign key): — около 1 секунды.
Время фильтрации: мгновенно (явно меньше секунды).

Железо — core 2 duo t7250 2gHz. Иксы и всякая хрень запущена, единственное что не давал свопить, закрывая всякие браузеры (рамы мало, всего 2gb).
Gentoo amd64-3.2.12.

Теперь вопрос — как бы побороть ограничение в лице памяти? Есть ли какие-то подобные штуки со сбросом данных на диск? Есть интересные статьи о подобных вещах?

В тред кастуются @archimag и @lovesan.

Recommended by: @dorfe
1. dorfe 01.06.2012 20:29

inb4: написать свой быстропарсер.

Do you really want to delete ?