Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Массив или база?


Автор: godsgame 24.9.2005, 11:07
Итак делаю логи боев для онлайн игры.

файл со всеми вариантами логов занимает 40кб!

как мне лучше делать в игре:
1) загнать все в массив

a[1] = "aaa....";
a[2] = "bbb....';
....

Потом рандомно выбирать один из них и заносить в базу

ИЛИ

2) занести все эти шаблоны в базу:
id, logTemplate

1 aaa....
2 bbb....
3 ccc...

и каждый раз генерить число и выбирать соответствующий шаблон из базы



итак выводы:
1)
+: не нагружает базу, работает я думаю быстрее

минусы:
каждый раз при обновлении боя грузится массив на 40кб!


2)
+: файл боя весит на 40кб меньше!
-: дополнительные 15 запросов в базу (на странице 15 сообщений) (SELECT * FROM `logsTemp` WHERE id=123')


+ко всему этого: есть отдельный модуль для просмотра логов: 15 штук на странице (все выше написаное касалось непосредственно боя). Т.е хорошо бы учесть что люди будут просматривать завершенные логи...


Посоветуйте какоей вариант будет работать быстрее А ГЛАВНОЕ - создаст меньшую нагрузку на дохлый сервер. (можно предложить свой вариант)

Автор: Bikutoru 25.9.2005, 10:41
А заменить запросы типа
Код

(SELECT * FROM `logsTemp` WHERE id=123) x 15 штук

на
Код

(SELECT * FROM `logsTemp` WHERE id IN (123, 133, 145, 145, 678, ...)) x 1 штука

нельзя? Такие запросы (WHERE id IN (...)) выполняться будут достаточно быстро...

Цитата(godsgame @ 24.9.2005, 12:07)
+: файл боя весит на 40кб меньше!

Цитата(godsgame @ 24.9.2005, 12:07)
файл со всеми вариантами логов занимает 40кб!

Вот это не понял...

Автор: godsgame 25.9.2005, 16:37
Bikutoru
хммм...
а что значит IN?

думаю:
Цитата
(SELECT * FROM `logsTemp` WHERE id IN (123, 133, 145, 145, 678, ...)) x 1 штука

будет лучший вариант


Цитата

+: файл боя весит на 40кб меньше!

Цитата (godsgame @ 24.9.2005, 12:07)
файл со всеми вариантами логов занимает 40кб! 

Вот это не понял...



просто если делать массивом, то соответственно в бою будет так:
$a[1] = "takoj-to porazil takogo-to";
$a[2] = "takoj-to porazil takogo-to";
...

т.к файл с шаблонами этих логов занимает около 40кб, то соответственно при добавлении всех этих логов в массив $a - размер файла боя увеличится минимум на 40кб...



И еще такой вопрос: после выполнения SELECT * FROM `logsTemp` WHERE id IN (123, 133, 145, 145, 678, ...)) x 1 штука

результат можно занести в ассоциативный массив?

Автор: AntonioBanderaz 25.9.2005, 23:59
Цитата(godsgame @ 25.9.2005, 16:37)
результат можно занести в ассоциативный массив?

Да конечно можно.
Код

$query = mysql_query("SELECT * FROM `logsTemp` WHERE id IN (123, 133, 145, 145, 678, ...)");
$assocArray = array();
while($row = mysql_fetch_assoc($query) {
      $assocArray[] = $row;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)