![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
gogzor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Привет всем.
Есть достаточно нагруженный сайт, меня попросили както переписать/оптимизировать код работы с бд (MySQL). Что пришло первое в голову это создать класс по шаблону синглтон. Т.е тогда у каждого юзера будет только 1 инстанс класса на всю сессию и 1 открытое соединение, которое обрабатывает все его запросы. Примерно так :
Сервер в распоряжении только один, так что возможности распределять всё по серверам нету. Может вы ещё чтото посоветуете? Спасибо. |
|||
|
||||
Vasay |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: нет Всего: 73 |
gogzor,
PHP - не C# ![]() Весьма радикальный вариант облегчить жизнь БД - запустить php приложение на resin (желательно коммерческой версии ) Предварительно настроив database connection pool как JNDI ресурс сервера. И переписать всю работу с бд с использованием этого JNDI.
Тогда работа с БД будет идти через пул соединений, что при его грамотной настройке даст серьезное снижение нагрузки с сервера БД. Это сообщение отредактировал(а) Vasay - 3.3.2010, 19:46 -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
||||
|
|||||
gogzor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Vasay, спасибо, посмотрю что это за зверь.
Ипатьев, спасибо, очень информативный ответ от юзера со статусом "эксперт". ![]() |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 1 Всего: 259 |
gogzor, прежде чем переписывать код, надо найти узкие места.
Разобраться в чем они: тяжелые запросы? большое количетсво запросов? Исходя из ситуации либо оптимизировать тяжелые запросы, либо структуру базы, чтобы они не были такими тяжелыми, либо консолидировать большое количество запросов в более емкий и оптимальный. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 0 Всего: 37 |
Вообще, судя по формулировке задания, непонятна область ответственности топикстартера. Имеется ли у него доступ к нужной информации.
Но сама, конечно, формулировка, многое говорит о тех, кто ставил задачу. Учитывая, что код доступа к бд никогда не бывает узким метстом. |
|||
|
||||
IgorIV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: нет Всего: 8 |
Раз так, тогда выполняй. Чтобы не превращать топик во флеймовый, gogzor, в твоих же интересах выдать конкретную информацию. Количество пользователей, размер базы, тяжелые запросы и остальное, в том же духе. Разобраться почему так тяжело базе. А пока все думают, что база для тебя черный ящик. Что там внутри ты не знаешь. |
|||
|
||||
Majesty |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 20.3.2005 Где: Almaty, Kazakhsta n Репутация: нет Всего: нет |
Нужен не синглтон, а отложенная инициализация с кеширующей прослойкой. Примерно так:
Нужно добавить парсинг запроса (чтобы не кешировать INSERT/UPDATE/DELETE запросы) и проверку на возврат false из mysql_query (хотя бы возвращать $result = false, если запрос завершился ошибкой). Подключение к базе устанавливается только в том случае, если оно реально нужно. Один и тот же запрос выполняется однократно. Кеш можно сохранять в файлах, в sqlite, в memcached, в apc - где угодно (правильный кеш - тема, достойная отдельного топика). Естественно, все эти телодвижения не заменяют профилирование самих запросов - slow_queries_log и explain в помощь. Если медленные запросы всё-таки нужны, следует вынести их в асинхронный режим (например, выполнять их в кроне, записывая в тот же кеш, чтобы клиенты читали результаты только из кеша). Опять же, профилирование и оптимизация запросов - это отдельная большая тема имеющая мало общего с PHP. |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 1 Всего: 259 |
Majesty,
1) не надо поднимать старые темы 2) когда человек спрашивает совета как правильно отрезать ухо, если у него чешется нос, то не надо подсказывать размер ножа - нужно подсказать почесать нос (на всякий случай: это аллегория) |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |