Задать вопрос
deleted-mifki
@deleted-mifki

Как хранить и выбирать такие данные?

Есть большое количество записей, у которых среди прочих полей есть, допустим, список меток, дата и статус. При работе с этими данными пользователь сначала фильтрует их по всем полям кроме даты и статуса. Фильтр может вернуть как мало записей, так и хоть все. После этого отфильтрованные данные должны быстро вытаскиваться по статусу и диапазону дат.

Проблема в том, что фильтр может быть очень сложный и долгий для исполнения (например, записи, которые содержат 20 меток, не содержат 20 других меток и содержат какое-то слово в названии), то есть совать его в каждый запрос нельзя. Соответственно, надо кэшировать список отфильтрованных записей, причем чтобы сам этот кэш был проиндексирован по дате/статусу для последующей выборки. Какие бы средства (БД) применить, чтобы это эффективно реализовать? SQL, NoSQL, мне в принципе все равно сейчас.
  • Вопрос задан
  • 3354 просмотра
Подписаться 4 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 3
fear86
@fear86
Developer
Похожий механизм есть в одной CMS, там при больших объемах много join, и вот по некоторым версиям, неплохо вопрос скорости решается выносом индексов в Sphinx, не знаю на сколько это поможет вам, но как вариант думаю стоит погуглить.
Ответ написан
Комментировать
Daedmen
@Daedmen
Постройте свои индексы по диапазонам значений с учетом своих знаний о распределениям ваших данных и возможных запросах, так что бы сразу отсекать по максимуму. Когда-то это очень помогло для поиска по всем жж пользователям размеченным множеством параметров.
Ответ написан
Комментировать
mgramin
@mgramin
Фильтр может вернуть как мало записей, так и хоть все. После этого отфильтрованные данные должны быстро вытаскиваться по статусу и диапазону дат.

Т.е. в любом случае пользователю возвращается некий ограниченный набор данных, верно? В таком случае можно начать с реляционки и грамотного индексирования.
Ответ написан
Ваш ответ на вопрос

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

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