@Laptinius

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

Доброго времени суток сообщество.
Суть задачи: еженедельно обрабатывать логи в 50кк-80кк строк.

Есть mysql база с уникальными полями в 25кк строк, со временем собираются необходимые логи и нужно обновить инфу(счётчики + дополнительные поля).

Как я сейчас это вижу:
1. Переработать логи убрав дубликаты/суммировать поля. (обычно строк где то 60% от количества строк в БД)
2. Построчно делать запросы к базе (сравнить и обновить/добавить если надо)
Но время работы скрипта растягиваются на часы + очень трудно вывести прогресс работы.

Как можно решить данную проблему? Помогите :)

Как работало раньше. Когда то база была <5кк и я сливал всё в многомерный массив, логи тоже в массиве быстро собирал, сравнивал и обновлял. Но месяц назад мне начало выдавать ошибку с нехваткой памяти, а поднять лимит нельзя, php ведь 32битный. Обновление такой базы протекало не более 2-5 минут.
  • Вопрос задан
  • 2372 просмотра
Решения вопроса 1
Flaker
@Flaker
А нельзя обрабатывать не еженедельно, а каждые сутки, например?
К тому же, такого демона реализовать можно(лучше) на C++, и распараллелить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Calc
tar.gz для хранения
mysql сделайте репликацию, в новой базе сделайте "свои" индексы
По ним и считайте

А вообще ваш лог через unuxовый sort пролезает?
Делайте sort, потом uniq, а работайте уже с выходным файлом.
Обработка через awk
Ответ написан
Комментировать
@s1dney
Там много велосипедов можно придумать с SQL базами/демонами и репликациями, но все они плохо масштабируются и люто тормозят. Если есть тенденция увеличения объема логов, то нужно смотреть в сторону logstash + elastic search, иначе в будущем у вас будет такое легаси, с которым уже сложно будет что-то сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы