Как/чем аггрегировать большие объемы данных (а в реалтайме?)?
Есть несколько серверов, на них postgresql. В таблицу в них валятся логи - примерно по тысячи записей/секунду.
Нужно написать к ней статистику. Сатистика представляет собой GROUP BY по нескольким произвольным полям и суммирование значений полей, за произвольный период времени.
Проблема... На каждом сервере это занимает непозволительно много времени - если взять интервал год - то будет на каждом выполняться по несколько минут (это еще быстро, т.к. есть индексы по всем полям), а групповая статистика - уже боль и страдание - из-за больших объемов уже лежащих данных, который к тому же быстро растет. А пользователю всё это надо отдавать в разумное время.
Какие есть решения по аггрегации данных?
Посматриваю на hadoop (для меня это скорее волшебное слово), но что конкретно использовать из его экосистемы не знаю.
Что-то похожее я вижу у Influxdb... Но как я понимаю, там основной упор сделан на timeseries, и аггрегация данных по произвольным полям будет не быстрее.
В качестве бонуса, может есть решения по реалтайм аггрегации?
А что значит "реалтайм агрегация"? Мы же не можем в реальном времени агрегировать по непонятным условиям... Если хоть какие-то параметры имеются, то можно использовать хранилища key/value типа redis или mongo. А если нужны отчеты в виде графиков, то настоятельно рекомендую посмотреть в сторону graphite. Ну и как минимум можно агрегацию кластеризовать методом map/reduce.
Привет.
Ну как вариант можно действительно использовать hadoop. Только вот ничего даже близкого к realtime вы не получите. Ну по крайней мере просто и быстро по времени реализации (можно конечно попробовать hive over spark).
Как вариант рассмотрите cassandra.