![]() |
|
|
![]()
|
|
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 3 Всего: 29 |
Какое ПО можно использовать для высоко-посещаемых онлайн игр?
Имею проект http://chess.wolf-ware.ru/ : PHP5, MySQL5, виртуальный хостинг, посещаемость - до 50 человек в сутки, одновременно до 10 игроков. Сайт начинает сильно тормозить при одновременном пребывании в игре более 5-10 игроков из-за блокировки таблиц при UPDATE. Другой пример: http://carnage.ru/ Pearl, БД?, сервер?, посещаемость - тысячи игроков в день, одновременно до 1000 человек. При более частом обращении к серверу по таймеру тормоза отсутствуют вообще. Вопрос. Что следует использовать, чтобы получить такую же "выносливую" онлайн-игру, как "Carnage"? P.S. Может ли существенно изменить ситуацию переход на PostregeSQL - там, кажется, таблицы не блокируются?.. |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: нет Всего: 73 |
Wolf1994,
Ну, тут либо хостинг Г (дешевым VPS свойственно сильно тупить при работе с базой)... Либо код кривой... -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 3 Всего: 29 |
Vasay,
хостинг неплохой - Бизнес тариф от http://vingrad.hosting.ru/ . С основным сайтом http://wolf-ware.ru/ работает идеально. Код, IMHO, тоже не очень кривой - сами скрипты не тормозят, дело в MySQL: при записи хода игрока в базу идёт запрос "UPDATE", при этом запросе блокируется таблица и создаётся очередь из запросов, при большом количестве игроков на сайте. Вопрос. Возможно ли в принципе иметь онлайн игру на MySQL? Это сообщение отредактировал(а) Wolf1994 - 5.6.2008, 14:07 |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
Возможно.
|
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: нет Всего: 73 |
Wolf1994,
Сколько записей в базе, какие индексы, как идет поиск того, для чего делаем UPDATE ? ИМХО 10 человек онлайн в шахматах - это минимальная нагрузка. Без кода и структуры таблицы ничего сказать нельзя. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Wolf1994 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 3 Всего: 29 |
600 записей в таблице, индексов нет... "как идет поиск того, для чего делаем UPDATE ?" - не понял...
Код... AJAX срабатывает каждые 15 сек. Ход делается раз в 2-3 цикла. При этом выполняется один UPDATE вида:
- в массиве $update_ar около 7 записей. Вот точный запрос:
Это сообщение отредактировал(а) Wolf1994 - 5.6.2008, 14:38 |
||||
|
|||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
Я думаю, что, как минимум, один индекс есть.
|
|||
|
||||
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 3 Всего: 29 |
Возможно. Я в этом не силён. Просто создал таблицу, никаких дополнительных индексов на неё не ставил. Создавал без указаний относительно индексов.
Это сообщение отредактировал(а) Wolf1994 - 5.6.2008, 16:03 |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: нет Всего: 73 |
Wolf1994,
Посмотри, сколько идет по времени поиск по таблице (если искать id) И кинь сюда SQL код создания таблицы. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Wolf1994 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 3 Всего: 29 |
P.S. Поставил индекс на `id`. |
||||
|
|||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: нет Всего: 73 |
0.0006 - это достаточно быстро.
А сколько времени занимает твой update? И попробуй засечь в пхп на что тратится время. п.с. ты используешь mysql_pconnect или mysql_ connect ? Нигде не забываешь, случаем, закрывать соединение? -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
Откуда информация про блокировку таблиц?
Вообще, 600 строк - это вообще ничто. оно и с индексами, и без индексов, и с апдейтами, и без апдейтов по определению должно летать. А база игроков есть? А в ней сколько строк?
Все-таки, этот вопрос меня убивает. Что предыдущий клиент, что этот. |
|||
|
||||
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 3 Всего: 29 |
Использую "mysql_ connect". По окончании скрипта не закрываю - кажется, "mysql_close ()" выполняется автоматически по отработке скрипта?
4000 Просмотр "Процессов" в PMA - накапливаются процессы с "UPDATE" с состоянием "locked".
|
|||
|
||||
| Vasay |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: нет Всего: 73 |
Wolf1994,
закрывать, вообще-то надо, да и mysql_pconnect ИМХО предпочтительней. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
||||
|
|||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
Vasay, все наоборот. Закрывать не надо, pconnect не нужен.
Wolf1994, то, что накапливаются апдейты - это вообще ни о чем не говорит. они могут просто стоять в очереди и ждать другого. А вот 4000 юзеров - это уже что-то. 4000 * 600 - уже прилично выходит. В общем, надо заниматься первичным профайлингом. берёшь, и меряешь с помощью microtime, сколько времени у тебя выполняется каждый запрос. Каждый. Без догадок и рассуждений что тот блокирует, а этот тебе показывают. Просто каждый. Выясняешь, какой именно тормозит. потом с ним разбираться Картинка эта, что у тебя в подписи, в динамике рисуется? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |