group-telegram.com/dsinsights/352
Last Update:
DB Index и партиционирование
Некоторое время работаю с датамартами на Postgres. В этой связи, решил собрать в кучу мысли по партиционированию данных в DB. Сошлюсь на тред в stackoverflow и постгресовскую документацию
Организация индексов
- Один многоколоночный индекс лучше, чем несколько одноколоночных, если фильтруем по нескольким колонкам
- Несколько одноколоночных индексов эффективнее, если часто фильтруем только по одной колонке
- Если данные временные, то партиционируем. Ставим фильтр по временной колонке + добавляем в индекс те, по которым чаще всего фильтруем. В итоге получаем многоколоночный индекс вида (date, publisher, country, ...)
.
Что по датамартам?
- Для датамартов делаем партиции по колонкам, по которым чаще всего фильтруем
- Таблицы с разной степенью агрегации: raw час, hourly день, daily месяц
- materialized view поверх них
- Redash или Superset делает запрос уже к materialized view
Какие альтернативы Постгресу?
TimescaleDB
Это расширение под постгрес для временных данных. Разбиваем данные на гипертаблицы, которые автоматически партиционируются по времени + можно выбрать опционально партиционирование по ключу. При этом так же Постгрес не скейлится горизонтально
Apache Druid
Колоночная OLAP DB. Ее уже можно скейлить горизонтально. Но не поддерживает join'ы. SQL синтаксис доступен через Druid SQL
BY ML Advertising

Share with your friend now:
group-telegram.com/dsinsights/352