0

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

Благодаря

ответ

1

Я бы пойти на один вызов хранимой процедуры практически во всех случаях (я буду говорить, за исключением в конце).

Причины:

  • Кто поддерживает хранимые процедуры могут ввести некоторую дополнительную логику (будь то по соображениям производительности или коммерческим причинам), что вы должны либо дублируют в ваших собственных прямых вызовов, или - даже хуже - может пропустить совсем из-за недопонимания с тем, кто поддерживает хранимую процедуру. (Даже если вы поддерживаете оба варианта, вам придется потратить усилия на дублирование). Это причина №1: использование специального интерфейса обеспечивает правильность и недопущение дублирования
  • Каждый раз, когда вы взаимодействуете с вашей БД, вы берете на себя небольшие (но не нулевые) накладные расходы, чтобы открыть соединение (или получить его из пула) , сортировки и разборки данных по проводу, латентности сети и т. д. Наличие одной точки входа (ваша Хранимая процедура) будет амортизировать их лучше.
  • Возможно (но это действительно зависит от множества разных факторов, поэтому это не гарантия чего-либо), что механизм БД может дополнительно оптимизировать свою рабочую нагрузку, имея все в одном контексте транзакции. То есть возможно, он выдает два последовательных запроса, которые достаточно схожи, что некоторые индексы/записи буферизуются в кеше БД, поэтому к второму запросу можно получить быстрый доступ).

Возможное исключение: ваше приложение имеет своего рода «масштабирование» процесса, в котором вы сначала загружаете заголовок структуры многопотоков и нуждаетесь в деталях нижнего уровня только тогда, когда/если пользователь этого требует. В этом случае было бы лучше получить доступ к ним «на лету». Я бы предпочел предыдущее решение, если я не смогу доказать (например, тестирование с реалистичными нагрузками), что записи подробностей достаточно велики, чтобы сделать это бременем на интерфейсе. Пожалуйста, не поддавайтесь искушению просто решить, что это более эффективно, если у вас нет жестких данных для резервного копирования вашей «проницательности». Большую часть времени это будет prove to be a mistake.

Смежные вопросы