1) Подскажите плиз, каким образом выделяется место для хранения значения поля в БД MySQL. Например, при создании новой записи и определении типа поля как Text 64 кб под ее значение место резервируются сразу или динамически, по мере использования? т.е. если я использую всего 1 кб, то для хранения значения поля все-равно будет использоваться 64 кб ? или все-же 1кб? Вопрос возник из-за ограничения по размеру базы на халявном хостинге. 2) Есть ли какой-нибудь способ хранить массивы в MySQL? Или прейдется преобразовывать в строку? Массивов для каждого из пользователей планируется много
1. динамически. 2. База данных - это уже и есть массив. сделай нужную таблицу, и в её ячейки записывай значения элементов массива
1. Цитата из мануала: 2. Массив суть набор значений. Каждое значение - отдельная строка в спец. таблице. Ну или одной строкой в том же BLOB/TEXT с заведомо определенными разделителями.
Для каждого пользователя делать свои таблицы? (У каждого пользователя свои массивы) Не будет ли в этом случае заметных тормозов, если нужно часто обращаться к массиву и сохранять изменения значений? Ведь каждый раз прейдется загружать значение всего массива заново (всю строку) и после отображения пользователю и изменений записывать обратно, опять же всю строку. Например в массиве около 1000 элементов по 5 цифр+разделитель. Нужно поменять значение одного элемента массива, записать его в базу, для этого прейдется записывать заново весь массив 1000*6 байт итого 5,86 кб. Гм... да вообще-то, не сильно заметно, пожалуй остановлюсь на этом способе. Сначала хотел использовать implode(), explode(), ну раз уж есть спец функции... Нашел про serialize(), unserialize() (deserialize() - нету). Всем пасиба!
Если так, то лучше сделать таблицу для массивов. Можно для каждого юзверя, можно одну, но с primary key из двух столбцов (userid, array_index). Тогда придется вносить только измененные данные.
Здорово! Вот только не сильно-ли увеличится время поиска при этом? Ведь записей будет 1000*кол-во пользователей...
Kortez что хранится в массивах? расскажи, вообще, подробнее о структуре приложения и данных, которые будут храниться в базе. и специалисты подскажут тебе оптимальное решение.
нет, таблица будет одна на всех. И содержать она будет не массивы, а ячейки. База данных для того и придумана - чтобы хранить структурированную информацию. Второй раз стрируктурировать её - только создавать лишние сложности. База данных предоставляет удобный доступ к каждой ячейке. Зачем этот доступ усложнять?
Пытаюсь сделать онлайн игру (надо же с чего-то начинать ) Для хранения инфы о имеющихся в инвентаре персонажа вещах есть массив $inventory=array(); В котором элемент массива $inventory[1234]=5678; Обозначает, что в инвентаре лежит 5678 шт вещей типа 1234. (например 5678 ед. эбонитовой руды). Нужно записать массив в БД, обеспечив наиболее быстрый доступ к данным. Вот и вся задача Пока остановился все-же на первом способе...