За последние 24 часа нас посетили 17657 программистов и 1279 роботов. Сейчас ищут 1414 программистов ...

Пара вопросов по БД

Тема в разделе "PHP и базы данных", создана пользователем Kortez, 22 окт 2006.

  1. Kortez

    Kortez Активный пользователь

    С нами с:
    16 окт 2006
    Сообщения:
    33
    Симпатии:
    0
    1) Подскажите плиз, каким образом выделяется место для хранения значения поля в БД MySQL.
    Например, при создании новой записи и определении типа поля как Text 64 кб под ее значение место резервируются сразу или динамически, по мере использования?
    т.е. если я использую всего 1 кб, то для хранения значения поля все-равно будет использоваться 64 кб ? или все-же 1кб?

    Вопрос возник из-за ограничения по размеру базы на халявном хостинге.

    2) Есть ли какой-нибудь способ хранить массивы в MySQL?
    Или прейдется преобразовывать в строку?
    Массивов для каждого из пользователей планируется много :(
     
  2. 1. динамически.
    2. База данных - это уже и есть массив. сделай нужную таблицу, и в её ячейки записывай значения элементов массива
     
  3. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    1. Цитата из мануала:
    2. Массив суть набор значений. Каждое значение - отдельная строка в спец. таблице. Ну или одной строкой в том же BLOB/TEXT с заведомо определенными разделителями.
     
  4. Anonymous

    Anonymous Guest

    еще в копилку про массивы - есть ф-ии serialize(), deserialize()
     
  5. Kortez

    Kortez Активный пользователь

    С нами с:
    16 окт 2006
    Сообщения:
    33
    Симпатии:
    0
    Для каждого пользователя делать свои таблицы? (У каждого пользователя свои массивы)

    Не будет ли в этом случае заметных тормозов, если нужно часто обращаться к массиву и сохранять изменения значений?

    Ведь каждый раз прейдется загружать значение всего массива заново (всю строку) и после отображения пользователю и изменений записывать обратно, опять же всю строку.

    Например в массиве около 1000 элементов по 5 цифр+разделитель. Нужно поменять значение одного элемента массива, записать его в базу, для этого прейдется записывать заново весь массив 1000*6 байт итого 5,86 кб.

    Гм... да вообще-то, не сильно заметно, пожалуй остановлюсь на этом способе.

    Сначала хотел использовать implode(), explode(), ну раз уж есть спец функции...
    Нашел про serialize(), unserialize() (deserialize() - нету).

    Всем пасиба!
     
  6. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Если так, то лучше сделать таблицу для массивов. Можно для каждого юзверя, можно одну, но с primary key из двух столбцов (userid, array_index).
    Тогда придется вносить только измененные данные.
     
  7. Anonymous

    Anonymous Guest

    Правда, виноват.
     
  8. Kortez

    Kortez Активный пользователь

    С нами с:
    16 окт 2006
    Сообщения:
    33
    Симпатии:
    0
    Здорово! Вот только не сильно-ли увеличится время поиска при этом? Ведь записей будет 1000*кол-во пользователей...
     
  9. Kortez
    что хранится в массивах?
    расскажи, вообще, подробнее о структуре приложения и данных, которые будут храниться в базе.
    и специалисты подскажут тебе оптимальное решение.
     
  10. нет, таблица будет одна на всех.
    И содержать она будет не массивы, а ячейки.

    База данных для того и придумана - чтобы хранить структурированную информацию. Второй раз стрируктурировать её - только создавать лишние сложности.
    База данных предоставляет удобный доступ к каждой ячейке. Зачем этот доступ усложнять?
     
  11. Kortez

    Kortez Активный пользователь

    С нами с:
    16 окт 2006
    Сообщения:
    33
    Симпатии:
    0
    Пытаюсь сделать онлайн игру (надо же с чего-то начинать :))
    Для хранения инфы о имеющихся в инвентаре персонажа вещах есть массив $inventory=array();
    В котором элемент массива $inventory[1234]=5678;
    Обозначает, что в инвентаре лежит 5678 шт вещей типа 1234.
    (например 5678 ед. эбонитовой руды).
    Нужно записать массив в БД, обеспечив наиболее быстрый доступ к данным.

    Вот и вся задача :)

    Пока остановился все-же на первом способе...
     
  12. наиболее быстрый доступ к данным обеспечивает использование механизмов базы данных.
     
  13. Anonymous

    Anonymous Guest

    Чебурген+1
     
  14. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Не хранить предметы с количеством 0. Судя по смыслу, много строк должно исчезнуть.