Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какая база нужна для онлайн игры? 
V
    Опции темы
Wolf1994
Дата 5.6.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 - там, кажется, таблицы не блокируются?..
PM MAIL WWW   Вверх
Vasay
Дата 5.6.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



Wolf1994, 

Ну, тут либо хостинг Г (дешевым VPS свойственно сильно тупить при работе с базой)... Либо код кривой...



--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Wolf1994
Дата 5.6.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM MAIL WWW   Вверх
Feldmarschall
Дата 5.6.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Возможно.
PM   Вверх
Vasay
Дата 5.6.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



Wolf1994, 

Сколько записей в базе, какие индексы, как идет поиск того, для чего делаем UPDATE ?

ИМХО 10 человек онлайн в шахматах - это минимальная нагрузка.

Без кода и структуры таблицы ничего сказать нельзя. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Wolf1994
Дата 5.6.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 3
Всего: 29



600 записей в таблице, индексов нет... "как идет поиск того, для чего делаем UPDATE ?" - не понял...

Код... AJAX срабатывает каждые 15 сек. Ход делается раз в 2-3 цикла. При этом выполняется один UPDATE вида:
Код

 $sql="UPDATE `$tchess` SET ".implode (",", $update_ar)." WHERE `id`='".$game_id."'";

- в массиве $update_ar около 7 записей.

Вот точный запрос:
Код

UPDATE `chess_games` SET `turn`='black',`log`=CONCAT(`log`,'[white]: 7|5|5|5|white-footman|\n'),`white_move`='5|7|5|5',`black_time`='1212665681',`chat`='1212665681 Wolf [white]: white-footman E2 - E4\n',`white_talk`='1212665681 Wolf [white]: white-footman E2 - E4\n' WHERE `id`='2422' 


Это сообщение отредактировал(а) Wolf1994 - 5.6.2008, 14:38
PM MAIL WWW   Вверх
Feldmarschall
Дата 5.6.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Я думаю, что, как минимум, один индекс есть.
PM   Вверх
Wolf1994
Дата 5.6.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 3
Всего: 29



Возможно. Я в этом не силён. Просто создал таблицу, никаких дополнительных индексов на неё не ставил. Создавал без указаний относительно индексов.

Это сообщение отредактировал(а) Wolf1994 - 5.6.2008, 16:03
PM MAIL WWW   Вверх
Vasay
Дата 5.6.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



Wolf1994, 

Посмотри, сколько идет по времени поиск по таблице (если искать id)
И кинь сюда SQL код создания таблицы.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Wolf1994
Дата 5.6.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 3
Всего: 29



Цитата

Показывает записи 0 - 0 (1 всего, Запрос занял 0.0006 сек)
SQL-запрос: SELECT *
FROM `chess_games`
WHERE `id` =2422
LIMIT 0 , 30


Код

CREATE TABLE `chess_games` (
  `id` bigint(20) NOT NULL default '0',
  `desk` text NOT NULL,
  `chat` text NOT NULL,
  `white_talk` text NOT NULL,
  `black_talk` text NOT NULL,
  `log` text NOT NULL,
  `white_move` text NOT NULL,
  `black_move` text NOT NULL,
  `note` text NOT NULL,
  `turn` text NOT NULL,
  `player1_id` bigint(20) NOT NULL,
  `player2_id` bigint(20) NOT NULL,
  `start_date` int(11) NOT NULL,
  `end_date` int(11) NOT NULL,
  `time_out` int(11) NOT NULL,
  `result` text NOT NULL,
  `white_time` int(11) NOT NULL,
  `black_time` int(11) NOT NULL,
  `white_rock` int(11) NOT NULL,
  `black_rock` int(11) NOT NULL,
  `white_call` int(11) NOT NULL,
  `black_call` int(11) NOT NULL,
  `gross` tinyint(1) NOT NULL,
  `gross_ref` text NOT NULL,
  `bet` int(3) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


P.S. Поставил индекс на `id`.
PM MAIL WWW   Вверх
Vasay
Дата 5.6.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



0.0006 - это достаточно быстро.

А сколько времени занимает твой update?

И попробуй засечь в пхп  на что тратится время. 

п.с. ты используешь mysql_pconnect или mysql_ connect ? Нигде не забываешь, случаем, закрывать соединение?



--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Feldmarschall
Дата 5.6.2008, 16:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Откуда информация про блокировку таблиц?
Вообще, 600 строк - это вообще ничто. оно и с индексами, и без индексов, и с апдейтами, и без апдейтов по определению должно летать. 
А база игроков есть? А в ней сколько строк?

Цитата(Wolf1994 @  5.6.2008,  13:44 Найти цитируемый пост)
то следует использовать, чтобы получить такую же "выносливую" онлайн-игру, как "Carnage"?

Все-таки, этот вопрос меня убивает. Что предыдущий клиент, что этот. 

PM   Вверх
Wolf1994
Дата 5.6.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 3
Всего: 29



Использую "mysql_ connect". По окончании скрипта не закрываю - кажется, "mysql_close ()" выполняется автоматически по отработке скрипта?

Цитата(Feldmarschall @  5.6.2008,  16:54 Найти цитируемый пост)
А база игроков есть? А в ней сколько строк?

4000

Цитата(Feldmarschall @  5.6.2008,  16:54 Найти цитируемый пост)
Откуда информация про блокировку таблиц?

Просмотр "Процессов" в PMA - накапливаются процессы с "UPDATE" с состоянием "locked".

Цитата(Vasay @  5.6.2008,  16:39 Найти цитируемый пост)
А сколько времени занимает твой update?

Цитата

Затронутые ряды: 1 (Запрос занял 0.0026 сек)
SQL-запрос: UPDATE `chess_games` SET `turn` = 'black',
`log` = CONCAT( `log` , '[white]: 7|5|5|5|white-footman|\n' ) ,
`white_move` = '5|7|5|5',
`black_time` = '1212665681',
`chat` = '1212665681 Wolf [white]: white-footman E2 - E4\n',
`white_talk` = '1212665681 Wolf [white]: white-footman E2 - E4\n' WHERE `id` = '2422'

PM MAIL WWW   Вверх
Vasay
Дата 5.6.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



Wolf1994, 

Цитата

Использую "mysql_ connect". По окончании скрипта не закрываю


Цитата

накапливаются процессы с "UPDATE" с состоянием "locked".


закрывать, вообще-то надо, да и mysql_pconnect ИМХО предпочтительней.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Feldmarschall
Дата 6.6.2008, 07:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Vasay, все наоборот. Закрывать не надо, pconnect не нужен.


Wolf1994, то, что накапливаются апдейты - это вообще ни о чем не говорит. они могут просто стоять в очереди и ждать другого.

А вот 4000 юзеров - это уже что-то. 4000 * 600 - уже прилично выходит.
В общем, надо заниматься первичным профайлингом. берёшь, и меряешь с помощью microtime, сколько времени у тебя выполняется каждый запрос. Каждый. Без догадок и рассуждений что тот блокирует, а этот тебе показывают. Просто каждый. Выясняешь, какой именно тормозит.
потом с ним разбираться

Картинка эта, что у тебя в подписи, в динамике рисуется?
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.