Лучший подход к реализации каскадных фильтров (45 столбцов, до 10 тыс. значений каждый) в React + Spring Boot с серверноJAVA

Программисты JAVA общаются здесь
Anonymous
Лучший подход к реализации каскадных фильтров (45 столбцов, до 10 тыс. значений каждый) в React + Spring Boot с серверно

Сообщение Anonymous »

У меня есть пользовательский интерфейс React с бэкэндом Spring Boot, который извлекает данные из базы данных SQL.
Экран содержит около 45 столбцов фильтров, где фильтры работают каскадно. Например:
  • Выбор значения в Фильтре 1 определяет доступные значения в Фильтре 2
  • Выбор Фильтра 2 дополнительно ограничивает значения для Фильтра 3
  • Это продолжается для до 45 фильтров
Каждый фильтр может иметь до ~ 10 000 возможных значений в базе данных.
В настоящее время серверная часть выполняет 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)?
  • Существуют ли общие методы оптимизации (кэширование, предварительно вычисленные агрегаты, материализованные представления и т. д.), которые хорошо работают для этого типа системы фильтрации?
Будем признательны за любые рекомендации по архитектуре или производительности.>

Вернуться в «JAVA»