Задать вопрос
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻

Какую БД использовать для timeseries данных?

Дано:

- Несколько таблиц вроде users, stories, comments, где в каждой поля вроде id, rating, text, is_deleted и т.д.
- Много данных, >145 лямов в comments, > 7 лямов в stories и больше 2.5 лямов в users
- Для каждого столбца таблица с версиями, например, у comments есть столбец rating и для хранения предыдущих значений имеется таблица comment_rating_versions следующего вида:

item_id uint64
timestamp int64
value int32

Также есть версии текстовых и булевых полей, такие же, только тип value отличается.

Всё это крутится на postgres'е.

Задача:

делать эффективно выборки по данным(как по таблицам users, stories, comments, так и по таблицам версий), строить графики, распределения по дням/часам и делать это всё эффективно.

Проблема:

postgres работает с такими данными ооочень медленно, например, распределение всех комментариев по дням строится больше 8 часов!

Вопрос:

Есть ли у кого опыт работы с подобными timeseries данными и какую БД можете посоветовать? Быстрый гуглинг намекает, что есть influxdb, clickhouse от Яндекса и подобные. Или может быть мне подойдёт что-то вроде pipelinedb для postgres'а?
  • Вопрос задан
  • 489 просмотров
Подписаться 3 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 4
inoise
@inoise
Solution Architect, AWS Certified, Serverless
то что указано это не timeseries. timeseries базы хранятся как key-value storage с небольшими объемами на item.Основное применение - метрики с IoT устройств

на вид очевидные проблемы:
- исторические данные хранятся вместе с актуальными (никто не слышал про CQRS или Event Sourcing)
- никто не думал про аналитику и колоночные базы данных (influxdb это time series и это не про ваш случай, clickhouse да, но работает хорошо только при большом потоке входящих данных). Можно подумать, например, про Cassandra.
Ответ написан
sarapinit
@sarapinit
Точу водой камень
Для postgres подойдет timescalesb. Это плагин, основная его задача - автоматизация разбиения по партициям. Посмотрите доки https://www.timescale.com/
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Автор очень быстро отбросил Postgres. Но я хочу спросить были ли исследованы все возможности? Например TimescaleDb.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev
software engineer
influxDB больше подходит для хранения числовых метрик, чем строк, и уж тем более, чем комментариев. В этом она одна из лучших. И выборки по таблицам, там нет, даже собственно таблиц с колонками нет, есть метрики, которые хранятся скорее в виде объектов. Вот хранить данные по нагрузке,трафику, другие числа и иногда строки - это да.

Но если вам нужны выборки по таблицам, оставайтесь в пределах SQL баз.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы