Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Способы уменьшения числа запросов к базе данных

#оптимизация #база_данных #архитектура #sql


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


Ответы

Ответ 1



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

Ответ 2



Как правило, основной принцип оптимизации - это сделать так, чтобы количество запросов не зависело от количества данных. Т.е., не было такого, что у Вас получается большая таблица, обходятся её строки, и при обработке каждой из них делаются мелкие запросы. Если без этого не обойтись, можно, например, строки обрабатывать группами, скажем, по 1000 штук. Обращаю внимание, что речь идёт именно о мелких запросах, для которых обращение к БД более ресурсоёмко, чем собственно выполнение запроса. Модули, по идее - это не данные, их в приложении фиксированное количество. Можете попробовать создать объектную модель запроса, которая будет строиться модулями по кирпичикам (если, конечно, у Вас все запросы от разных модулей для одной операции идут к одной таблице).

Ответ 3



Очень хороший вариант — описывать логику приложения (проекта) в СУБД, тогда можно будет избавиться от всяких "конструкторов" и "велосипедов".

Ответ 4



Вопрос очень сферический и очень в вакууме. "У меня тут есть что-то с модулями, оно запросы делает, надо оптимизировать". На универсальный вопрос могу ответить только универсальный ответом. Используй кеширование. Где как и что кешировать -- зависит от специфики приложения, про которую неизвестно ничего. Ну и еще: возможно ли такое соотношение одна страница = один запрос к БД? при том, что данные реально разные. Это называется денормализация. Такой подход предлагают многие не-реляционные (NoSQL)базы данных. Естественно это противоречит реляционной модели данных, это несёт некоторые дополнительные риски.

Комментариев нет:

Отправить комментарий