Оптимизация времени большой отфильтрованной таблицы для чтения и записи - PullRequest
0 голосов
/ 08 июля 2019

В настоящее время я работаю над большим JAVA-приложением, связанным с веб-интерфейсом JavaScript и базой данных SQL Server. Внешний интерфейс отображает огромную разбитую на страницы таблицу с 200 столбцами различных типов и несколькими миллионами строк. Более того, каждый столбец имеет свой собственный фильтр, как в таблице Excel.

Пользователи должны быстро читать, фильтровать и изменять данные. Наше исследование показало, что узким местом является запрос к базе данных - эта таблица физически находится в базе данных SQL Server и не индексируется. Для получения строк или списка возможных значений для раскрывающихся списков фильтра требуется недопустимое количество времени.

Мы думали о добавлении простых индексов по умолчанию для каждого отдельного столбца, но они ставили под угрозу обновление и добавление строк; не только пользователями, но и заданием cron, которое вставляет новый объем данных четыре раза в день.

Я спрашиваю здесь, а не на dba.stackexchange.com, потому что я подозреваю, что шаблон для преодоления таких трудностей может включать в себя JAVA-приложение, может быть, какой-то кеш весной?

1 Ответ

1 голос
/ 08 июля 2019

kowalt, идеи из увиденного-это дешевые сиденья ...

Во-первых, создает ли инфраструктура Javascript список с возможностью фильтрации на основе того, что визуализируется; Имеется в виду, извлекает ли он все возможные значения фильтра столбцов из базы данных, или это только то, что представлено в HTML-содержимом этих страниц? Если это последнее, то распознайте пределы структуры для фильтрации, если нет обратного вызова базы данных через приложение - поэтому производительность Javascript является ключевым моментом (вплоть до выполнения запроса сортировки или где).

Во-вторых, возможно ли иметь источник данных презентации отдельно от транснационального (х4 / день) источника? У вас могут быть варианты архитектуры с отдельным реплицированным источником для индексации по наиболее вероятным столбцам (например, оптимизации некоторых, но не всех), кроме перетаскивания транснационального источника. Индексирование и обновление индексов может быть ограничено и запущено как (скажем, ежедневно) процессом разработчика БД.

В-третьих, возможно предоставить Javascript из приложения Java необходимые метаданные для фильтрации выпадающих списков из отдельного потока, особенно если диапазон возможных записей вряд ли существенно изменится. Это может помочь при любом полном (HTML) просмотре таблицы в браузере на стороне клиента.

Forth (низкая вероятность), возможно, исследуйте работу базы данных в процессе в памяти. Это может быть необработанным решением, если инфраструктура не требует затрат.

Удачи.

...