Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Как эффективнее всего распарсить огромный файл логов на слабой машине?

#алгоритм #файлы #логирование #highload #big_data


Есть сервер с 1gb RAM. Есть лог файл nginx (любой другой веб-сервер) на 70gb. Как
максимально быстро собрать статистику по user agent пользователей сайта, учитывая описанные
ограничения по ресурсам.
    


Ответы

Ответ 1



можно воспользоваться StringTokenizer в языке Java, который позволяет считывать файл построчно и не тратить память на хранение всех строк файла. StringTokenizer tok = new StringTokenizer("/path/to/file"); while (tok.hasMoreTokens()) { String line = tok.nextToken(); // работаешь со строкой. } Также можно указывать разделитель в конструкторе, по умолчанию стоит \t\n\r\f

Ответ 2



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

Комментариев нет:

Отправить комментарий