- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Поискав в инете не нашел ответа, поэтому надеюсь тут помогут как всегда )
Пишу приложение на php/mysql.. скажите, если нагрузка не более 100к просмотров в сутки планируется (т.е. одно в секунду вроде), можно ли на каждой странице создавать соединение к БД и закрывать тут же.. или это считается дурным тоном дергать БД туда-сюда и может закончить не очень (не хватит ресурсов/соединений и тп)?
Может нужно какой пул соединений сделать, и брать от туда? если да сколько там держать?
Или может что то встроенное есть уже?
100к это довольно мало, поэтому можно спокойно открывать и закрывать соединение на каждой странице. Хотя тут вариантов не много, либо mysql_connect либо mysql_pconnect (собстенно эта функция и работает с пулом). Вообще открытие и закрытие соединения гораздо меньше влияет на нагрузку нежели сами запросы (их количество и "качество"). Так что лучше задуматься об оптимизации запросов.
Для работы с бд посмотрите на http://php.net/manual/ru/book.pdo.php
кол-во соединений в сутки не играет (почти) ни какой роли. главное - кол-во одновременных соединений. а тут всё зависит от размера вашего сервера.
но если у вас будет 100к в день, то будет и кэш и свой(свои) сервер отдельно для БД
а пока: открыли, сделали что надо, закрыли. только делайте доступ к БД через 1 класс/функцию, а не разбрасывайте по проекту. потом будет проще кэш прикрутить
Фокус в том, чтобы вообще не трогать БД.
А ещё мощный сервер и правильная структура БД, а так же упростить запросы.
Мы не знаем, что у вас за приложение и что там будет работать, поэтому ответ: А чёрт его знает, что вас с ним делать.
Создайте пул соединений. То есть в пуле у вас допустим хранится 50 коннектов к базе, уже подключенных. Когда пользователю нужно сделать запрос, он берет себе соединение из пула (заранее созданное), выполняет запрос, затем назад возвращает соединение в пул. В нашем случае одновременно смогут выполнить запрос 50 пользователей, для ваших целей размер пула может быть гораздо меньше. Основная суть в том, что соединения созданы заранее и существуют постоянно, пока работает сервер.
спасибо, есть над чем подумать )
Еще почитал, что есть "устойчивое соединение" - pconnect, но там тоже неоднозначно..
Чтоб темы не плодить, не подскажите вот по какому поводу ..
допустим создаю переменную подключения к БД (db) в class1, и передаю ее в class2 через конструктор.. в class2 есть тоже переменная db и я присваиваю ей значение соотв переданной переменной через this->db..
Вопрос. Когда после выполненных методов в class2 программа возвращается в class1 и там закрываю соединение, в class2 ничего лишнего не останется? :)
Я так понимаю что две переменные не создаются (Дубликаты) а это просто указатель на переменную, соотв. соединение всего одно и проблем не будет. Я правильно понимаю )?
спасибо, есть над чем подумать )
Еще почитал, что есть "устойчивое соединение" - pconnect, но там тоже неоднозначно..
Чтоб темы не плодить, не подскажите вот по какому поводу ..
допустим создаю переменную подключения к БД (db) в class1, и передаю ее в class2 через конструктор.. в class2 есть тоже переменная db и я присваиваю ей значение соотв переданной переменной через this->db..
Вопрос. Когда после выполненных методов в class2 программа возвращается в class1 и там закрываю соединение, в class2 ничего лишнего не останется? :)
Я так понимаю что две переменные не создаются (Дубликаты) а это просто указатель на переменную, соотв. соединение всего одно и проблем не будет. Я правильно понимаю )?
"Присваивание по ссылке также поддерживается, для него используется синтаксис $var = &$othervar;. 'Присваивание по ссылке' означает, что обе переменные указывают на одни и те же данные и никакого копирования не происходит." http://php.net/manual/ru/language.operators.assignment.php
"Присваивание по ссылке также поддерживается, для него используется синтаксис $var = &$othervar;. 'Присваивание по ссылке' означает, что обе переменные указывают на одни и те же данные и никакого копирования не происходит." http://php.net/manual/ru/language.operators.assignment.php
Правильно я понимаю что в классе2 мне нужно сделать так?
$this->db =&$db;
тогда при закрыии БД вне класса в классе тоже ничего не останется?
в пхп 5,3 и выше - классы автоматом присваиваются, и использовать & не нужно. А для копирования нужно использовать __clone , так что при передаче $this->db = $db все норм, усложнять себе жизнь не обязательно.
ясно.. да я думаю после того как класс используется (если даже есть переменная с подключение к БД в нем), наверно как то уничтожается ж класс и его содержание )
После выполнение любого скрипта, подключения обрывается автоматически.