Какую БД выбрать, для работы со сложными фильтрами (WHERE условиями)?
Допустим, есть интернет-магазин, который собирает информацию о поведении покупателей и такой информации уже на 50М строк в БД (Postgres). И встала задача просматривать (в реал-тайме) сколько покупателей сделало то-то и то-то. К примеру, купил телевизор, просмотрел каталог с чайниками 5 раз, у которого указана фамилия, и заходивший 4 месяца назад на сайт. Другими словами агрегировать информацию, по разными фильтрам, заранее не известным, беглый взгляд по ТЗ выявил, то минимальные будут включать 10-12 условий.
Мысли были разные: создать огромную таблицу со всеми данными, а затем простыми WHERE / GROUP BY выбирать данные; таблица будет большая, но можно будет избавиться от JOIN-нов. Была идея взять MongoDB и его агрегации, но пишут, что они не так уж и быстры. Советовали взять колоночную БД, но данных на мой взгляд не так много и вряд ли это целесообразно.
Кто сталкивался, подскажите какие технологии смотреть?
sim3x: ок, спасибо, не получается вот что: обычный запрос включает 7 LEFT JOIN (порядок выборки 5-7 минуты), в денормализованной таблице (поэксперементировал на 200 колонках) скорость выше 1-2 минуты (без индексов). Но если денормализововать полностью будет 1000 колонок, стоит ли это делать?
romy4: интересный вариант, спасибо. Но подойдет ли для этого постгря? Не будет более эффективно сложить в noSQL БД? Где процесс формирования данных положить на плечи mapreduce?
OLAP (если не ошибаюсь) больше подходит для аналитики (просмотры/продажи за периоды (или другой показатель)) и вряд ли решит проблемы сложных фильтраций ...
last7 в вашем случае предварительная агрегация неизбежна, вам нужно организовать кучу индексов и поддерживать их. Вопрос вставки данных в реальном времени для такого монстра будет оставаться открытым.