Соединение с Объектом database
При этом подходе Вы используете предопределённый объект database для соединения с БД при наличии единственной конфигурации соединения БД и пользователя. Объект database выполняет все действия по работе с БД. Можно представить этот объект как database единый пул соединений с БД.
Этот подход несколько проще, так как используется только один объект database, а не несколько объектов DbPool и Connection. Однако при этом теряется гибкость первого подхода. Если Вы используете только объект database и хотите соединиться с разными БД или разными бюджетами, Вы обязаны отключиться от одной конфигурации, для того чтобы подключиться к другой. Также, при использовании объекта database, одна транзакция не может захватить несколько клиентских запросов, а соединения с несколькими БД-источниками не могут быть установлены одновременно.
Как описано в последующих разделах, Вы должны ответить на два основных вопроса, когда решаете, как устанавливать соединения с БД:
-
Сколько конфигураций и соединений БД и пользователей Вам нужно?
-
Будет ли одно соединение захватывать несколько клиентских запросов?
В таблице резюмируется, как ответ на эти вопросы влияет на установку и обслуживание пула соединений с БД и отдельных соединений. В последующих разделах обсуждаются детали этих вариантов.
1, используется всеми клиентами | Начальная страница приложения | Нигде | database | Нет | -- | ||||||
1, используется всеми клиентами | Начальная страница приложения | Нигде | 1 DbPool object | Да | DbPool: Именованное свойство;
Connection: 1 массив | ||||||
Фиксированный набор, используется всеми клиентами | Начальная страница приложения | Нигде | N DbPool-объектов | Да | DbPool: Именованное свойство;
Connection: N массивов | ||||||
Отдельный пул для каждого клиента | Клиентская страница запроса | Зависит от Многие объекты DbPool | Только если соединение захватывает клиентские запросы | DbPool: 1 массив;
Connection: 1 массив |
1
Если отдельное соединение не захватывает клиентские запросы, Вы можете соединять и отсоединять пул на каждой странице, в которой нужнó соединение. В этом случае пул не сохраняется в промежутке времени между запросами. Если отдельное соединение захватывает клиентские запросы, соединяйте на первой клиентской странице, которой необходимо соединение, и отсоединяйте на последней такой странице. Это может привести к появлению незанятых соединений/idle, и Ваше приложение должно будет обработать такую ситуацию. |