Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Perl, MySQL и производительность |
Автор: shootnix 24.1.2008, 22:55 | ||||||||
Всем привет! Вот тут у меня, наконец, созрел такой весьма философский топик, состоящий из ряда вопросов, посвященных работе с MySQL. Конкретно интересует: 1. Насколько оправдан, прочен и незыблем (сказал-то как!) такой вариант организации работы: Есть класс, который работает с базой. У него есть конструктор, который создает соединение и записывает этот $dbh в отдельное свойство экземпляра. Примерно так:
После этого я в основном скрипте вот так создаю экземпляр класса:
И после этого уже работаю с его методами:
Методы, естессно, просто пользуют свойсво объекта $self->{DBH}, т.е. ссылку на подключение. И уже в деструкторе класса я проделываю дисконнект и прочие радости... Мучит такой вопрос: насколько такая схема будет работать стабильно, не может ли тут скрываться какой-то подводный камешек нехилого азмера? Я просто всех тонкостей работы с БД не знаю, но ж...ой чую подвох ;-))) И второй вопрос: 2. Проистекает из первого — каким образом у себя на домашней тачке можно провести грамотный краш-тест для таких вот скриптов, чтобы узнать, насколько все же я неправ? И третий, в дополнение: При создании в основном скрипте $dbh возможно ли передавать этот объект другим модулям для их работы? К примеру, модуль, который что-то там делает, используя базу данных:
В этом случае не произойдет повторного соединения с базой? Если нет, то почему? Заранее спосибо. Жду ответа, как соловей лета ;-)) |
Автор: Ramirez 24.1.2008, 23:53 | ||
Описанный подход - логичен и широко применяется. К онкретно в приведенном примере - камней быть не может. Камни могут быть в этих самых методах и в организации приложения вцелом. насчет краштеста, если это веб-приложение, то
http://httpd.apache.org/docs/2.0/programs/ab.html на мой взгляд вполне достаточно.... |
Автор: nitr 25.1.2008, 00:34 |
Поддерживаю оба ответа! |
Автор: ginnie 25.1.2008, 11:40 | ||
Уважаемый shootnix, из личного опыта скажу, что создавать соединение внутри объекта, да еще в конструкторе - вариант не очень удачный. Несомненно, работать будет, но интерфейс класса получается не совсем прозраным, да и вывод сообщений об ошибках и exit() внутри класса - это экстрим ![]() Более грамотным решением будет передача уже созданного в основной программе соединения (лучше двух) в конструктор объекта. Два соединения (одно для запросов на чтение данных, другое - для записи) необходимо для корректной работы с несколькими реплицирующимися БД, когда чтение идет со slave'ов, а записываются данные на master. В случае, если у Вас нет пока такой схемы передавайте в оба параметра один и тот-же $dbh.
|
Автор: shootnix 25.1.2008, 14:52 |
ginnie, спасибо, учту... Собсна, ошибка внутри класса выводится, куда они денется-то? ![]() ![]() |
Автор: shootnix 26.1.2008, 09:29 |
Ну так или иначе, вроде все понятно, спасибо всем. Обнадежили ![]() |