PHP PDO: несколько объектов расширяют dbwrapper;Сколько подключений MySQL? - PullRequest
1 голос
/ 26 декабря 2010

Ситуация:

  • Я использую класс БД в качестве оболочки (dbwrapper) для открытия и закрытия соединений БД через PHP PDO
  • У меня есть3 отдельных класса, которые расширяют эту оболочку БД
  • Я создаю 3 объекта из указанных классов, и в течение их существования каждый из них делает запросы БД
  • MySQL, используемый в этом случае.

Когда методам 3 классов требуется доступ к базе данных, каждый из них создает объекты PDO внутри себя, используя расширенный модуль dbwrapper.Каждый объект хранит свой объект PDO в элементе / поле для справки сам по себе.

Вопрос: У меня такой вопрос ... каждый объект создает отдельное соединение с базой данных,делать 3 всего?Каждый клиент Apache создает только одно соединение с базой данных или каждый объект, использующий базу данных в приложении php, создает соединение.(звучит неэффективно!)

Причина: Я хотел бы понять, как обрабатываются эти соединения.

Я пытаюсь решить, будет ли лучше, чтобы каждый класс расширял dbwrapper или было бы лучше инициализировать dbwrapper без автоматического соединения с db, обрабатывайте это, когда это необходимо.Вместо этого я бы передавал dbwrapper каждому конструктору объектов, когда они инициализируются ... позволяя им использовать эту ссылку.Если происходит соединение нескольких дБ, то я думаю, что это был бы лучший способ минимизировать накладные расходы при преодолении проблем области видимости и доступа к объекту.

Заранее спасибо!

1 Ответ

1 голос
/ 26 декабря 2010

каждый объект создает отдельное соединение с базой данных, всего 3?

Может быть. Я не знаю, но вот как узнать . Во время работы вашего сценария подключитесь к MySQL с помощью выбранного вами клиента (например, командной строки) и введите команду SHOW PROCESSLIST;. Вы получите список активных подключений.

Возможно, вам потребуется вставить sleep в ваш скрипт, чтобы он оставался в живых достаточно долго, чтобы вы могли запустить команду списка процессов, когда вы создали экземпляр и работаете над всеми тремя объектами.

Вы увидите либо одно соединение, либо три. Тогда вы получите ответ.

(Ответ будет зависеть от используемого драйвера. Некоторые драйверы будут повторно использовать соединение, если DSN идентичен.)

Вместо этого я бы передавал dbwrapper каждому конструктору объектов, когда они инициализируются ... позволяя им использовать эту ссылку

Это обычная практика. Дескрипторы базы данных также являются основными кандидатами для шаблона Singleton .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...