Хранение большого массива в базе данных - PullRequest
1 голос
/ 17 июля 2009

У меня очень длинный список пунктов маршрута с целочисленными значениями. Я думал о создании базы данных с каждым из этих предметов, как пятьдесят столбцов, но это казалось немного скучным, и маршрут может измениться. Есть ли лучший способ хранить эти пары имя => значение в базе данных? Сериализация кажется немного грубой, я думал о создании базы данных itinerary_items с именами, столбцами значений и размещением данных там. Какое лучшее решение?

Ответы [ 7 ]

5 голосов
/ 17 июля 2009

Почему бы не сохранить их как похожие свойства в таблице. то есть

| id| name       | value        |
+---+------------+--------------+
| 1 | array_key  | array_value  |
| 2 | array_key2 | array_value2 |

Если требуется несколько экземпляров массива, всегда можно добавить дополнительный ключ для отслеживания экземпляров:

| id| name       | value        | instance_key |
+---+------------+--------------+--------------+
| 1 | array_key  | array_value  | 1            |
| 2 | array_key2 | array_value2 | 1            |
| 3 | array_key  | array_value  | 2            |
| 4 | array_key2 | array_value2 | 2            |

Проблема с подходом использования такого рода решений заключается в том, что данные имеют тенденцию быть более менее читаемыми человеком, и может быть много дополнительных объединений, если у вас несколько свойств объекта.

3 голосов
/ 17 июля 2009

Сколько у вас записей? Сотни? Тысячи?

Если количество ваших записей меньше 500, тогда я не думаю, что вам вообще следует выбирать базу данных. Вы можете сохранить это в файле XML. Это время NoSQL :).

Не то чтобы я поддерживал движение, но база данных кажется чрезмерным для вашего требования.

2 голосов
/ 17 июля 2009

Если данные, которые вы храните, не используются для поиска в базе данных, а обновляются только в коде приложения, то я бы склонялся к тому, чтобы просто хранить их как большой двоичный объект. Если вы, скорее всего, обновите его части и вам не нужно будет читать полный набор данных для значимых обновлений, тогда вам следует использовать отдельную таблицу со столбцами, такими как id, user_id, key, value.

2 голосов
/ 17 июля 2009

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

0 голосов
/ 27 июля 2009

Ваш лучший и самый простой способ - использовать сериализацию.

0 голосов
/ 18 июля 2009

Я использовал JSON для такого рода вещей в прошлом, используя PHP5 json_encode () и json_decode () функции: http://uk.php.net/json_encode

Все, что вам нужно сделать, это ввести текстовое поле в вашу базу данных и вставить в него закодированный массив JSON. Если нет необходимости искать данные, которые вы храните, это довольно эффективный способ хранения данных, потому что вы можете легко и быстро преобразовать строку JSON обратно в массив PHP и вывести ее по мере необходимости.

Вы также можете заглянуть в YAML, хотя PHP, похоже, еще не имеет встроенного набора функций для анализа YAML, поэтому требуется внешний класс: http://railsforphp.com/2008/01/08/php-meet-yaml/ http://railsforphp.com/2008/01/08/php-meet-yaml/

0 голосов
/ 17 июля 2009

Запишите цикл for, чтобы создать оператор INSERT, затем просто выполните запрос, чтобы сохранить массив в таблицу со столбцами ключа и значения. Чтобы воссоздать массив, извлеките его из таблицы и используйте другой цикл for для повторной вставки значений в массив.

Единственная проблема, которую я вижу в этом типе настройки, состоит в том, что если вы планируете иметь несколько экземпляров массива, и все эти экземпляры должны быть сохранены, так как таблица базы данных может представлять только один экземпляр массива.

Если планируется иметь несколько экземпляров, лучшим способом будет сериализация и сохранение в столбце BLOB или TEXT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...