База или массив, нагрузка.

  • Автор темы Автор темы Opik
  • Дата начала Дата начала

Opik

Новичок
База или массив, нагрузка.

Есть проект, многопользовательская игра.
Как лучше хранить инфу, например о вещах.
В массиве:
PHP:
$item['roba1'] = array('imageType' => 'armor', 'cost' => '2'...); 
$item['roba2'] = array('imageType' => 'armor', 'cost' => '10'...);
Или в базе с теми же полями, с тем учетом что вещей может быть очень много и вызываются эти данные часто.
На что лучше реагиет маньше сервер, т.е что более ресурсоемко? Думаю больше жрет база. Но всё же хочется услышать ваше мнение или альтернативные решения( менее ресурсоемкие).
 
1) В массиве данные не хранятся - в твоём примере данные (если их надо сохранить) - будут храниться в файле, который потом будет обрабатываться php, что при большом количестве игроков и данных - изврат. К тому же этот вариант - однозначное отсутствие гибкости - выборка, сортировка, статистика и т.д.

2) Собственно ответ - база. Плюс учи матчасть.
 
В смысле будет файл
items.php
PHP:
<?
$item['roba1'] = array('imageType' => 'armor', 'cost' => '2'...); 
$item['roba2'] = array('imageType' => 'armor', 'cost' => '10'...);
?>
Парсить ничего не нужно. забыл учесть в первом посте.
 
В данном случае будет целесообразно использовать хранение хар-к вещей в массивах. ИМХО это очевидно и существенно снизит нагрузку на вашу БД. Единственное думаю придется увеличить размер операвтивной памяти, хотя все зависит от объема информации, которая будет храниться в массивах.
 
В дальшейшем может достигнуть порядка 1000 элементов. А так спасибо за мнение.
 
Вот тебе рекурсивная функция, которая из массива любой вложенности составит строку.

PHP:
function array_to_string($array)
{
  foreach($array as $key=>$value)
  {
    if(is_array($value))
      $str[] = "'".$key."'=>".array_to_string($value);
    else
      $str[] = "'".$key."'=>'".$value."'";
  }
  return 'array('.implode(',', $str).')';
}

Такой вариант хранения данных вполне оправдан, если не нужны сложные выборки.
 
> функция, которая из массива любой вложенности составит строку
называется [m]serialize[/m] и, соответственно, используется в паре с [m]unserialize[/m]
А генерировать скрипты скриптами нет никакой необходимости.

> Думаю больше жрет база.
Ананасов или рябчиков?
 
SiMM
Спасибо что просвятил.

Кстати немного потестировал на скорость - функция serialize работает миниммум на порядок быстрее рекурсии.
 
Автор оригинала: SiMM
> А генерировать скрипты скриптами нет никакой необходимости.
1. Поясните пожалуйста ваши слова или хотябы к чему это относится. Помоему в данной теме никто не предлагал генерировать скрипты скриптами, речь шла о хранении небольшого объема данных в массивах скрипта, как альтернатива.

Автор оригинала: SiMM
> Думаю больше жрет база.
Ананасов или рябчиков?
2. Ребята, ну сколько можно издеваться над новичками? Скоро вообще нельзя будет вопрос свой задать на этом форуме. Мало того, что унизят, высмеют, так еще ничего дельного не скажут. Наверняка автор не совсем точно выразился, но ИМХО тема серьезная.
 
Разгильдяй

Генерировать скрипты скриптами означает собрать строку вида "<?php $array = array('key'=>'value'); ?>" и записать ее в файл например "array.php". Это и есть php-скрипт, хотя кроме массива в нем ничего нет.
 
uchenik

я перечитал тут все... тебе уже сто раз сказали - БД тебя спасет. Не надо никакие извраты на файлы делать, а то что ты тут городишь - ЧУШЬ....

P.S. завязывай с играми, ни к чему хорошему не приведет.

P.P.S. послушай SiMM'a - у него в этом ГОРАЗДО больше опыту.... и не мудри!
 
Мутник
"P.S. завязывай с играми, ни к чему хорошему не приведет." Ну это я сам буду пешать.
"P.P.S. послушай SiMM'a" - А я что то не вижу, что он сказал.
"> функция, которая из массива любой вложенности составит строку
называется serialize и, соответственно, используется в паре с unserialize
А генерировать скрипты скриптами нет никакой необходимости." ко мне этот никак не относится, ибо отвечал он uchenik'y на array_to_string
"> Думаю больше жрет база.
Ананасов или рябчиков? "
Или тут совет? специально для всех буду писать теперь, как для дебилов.
"Думаю больше оперативной памяти употребляет база => База больше нагружает сервер."
 
> Думаю больше оперативной памяти употребляет база => База больше нагружает сервер.
А ты не думай. Возьми да сравни.

> В дальшейшем может достигнуть порядка 1000 элементов.
Вот на этой величине и сравнивай. Только не забывай, что составить SQL-запрос зачастую куда проще, чем написать туеву хучу кода, его реализующего.
 
Автор оригинала: Разгильдяй
В данном случае будет целесообразно использовать хранение хар-к вещей в массивах. ИМХО это очевидно и существенно снизит нагрузку на вашу БД.
Снизит, конечно снизит. И вообще - зачем это все с этими базами носятся? Ведь насколько проще - массив и всё - существенное снижение нагрузки.
Очевидно? А если вообще базой не пользоваться - какая красота - нагрузка на неё ноль.

-~{}~ 06.05.05 09:51:

"Думаю больше оперативной памяти употребляет база => База больше нагружает сервер."
Вот представь себе ситуацию - у тебя 1000 игроков. И у каждого вот такой вот массив "снаряжение". Что будет, если ты захочешь добавить туда дополнительную характеристику? Для всех сразу? Или изменить название предмета?
Не изобретай велосипед - все инструменты уже давно придуманы - любая доступная сейчас база данных для таких задач на порядок эффективнее.
 
Сверху