Экран содержит около 45 столбцов фильтров, где фильтры работают каскадно. Например:
- Выбор значения в Фильтре 1 определяет доступные значения в Фильтре 2
- Выбор Фильтра 2 дополнительно ограничивает значения для Фильтра 3
- Это продолжается для до 45 фильтров
В настоящее время серверная часть выполняет SQL-запросы с условиями WHERE на основе выбранных фильтров, чтобы вернуть следующий набор возможных значений. Однако меня беспокоят производительность и масштабируемость, поскольку:
- Количество фильтров велико (45)
- Каждый фильтр может содержать много значений
- Запросы могут усложняться по мере применения большего количества фильтров
- Пользовательский интерфейс может часто срабатывать запросы, когда пользователи меняют фильтры
- Пользователь выбирает значение для столбца 1
- Бэкенд выполняет запрос для получения допустимых значений для столбца 2
- Пользователь выбирает значение для columns2
- Бэкенд извлекает значения для столбца 3
- И так далее...
Код: Выделить всё
SELECT DISTINCT column2
FROM data_table
WHERE column1 = ?
Код: Выделить всё
SELECT DISTINCT column3
FROM data_table
WHERE column1 = ? AND column2 = ?
- Каков рекомендуемый шаблон проектирования серверной части для реализации подобных больших каскадных фильтров?
- Следует ли продолжать это обрабатывать с помощью SQL-запросов или лучше использовать что-то вроде системы поиска/индексирования (например, Elasticsearch/OpenSearch)?
- Существуют ли общие методы оптимизации (кэширование, предварительно вычисленные агрегаты, материализованные представления и т. д.), которые хорошо работают для этого типа системы фильтрации?