сериализация против SQLite в Php - PullRequest
1 голос
/ 07 февраля 2011

Я хочу хранить массивы в файле.Я использую CSV (fgetcsv, fputcsv), но получил массу ошибок, связанных с локалью.Я не могу продолжать использовать это.Я работал с сериализацией, но редактировать очень сложно.Также есть ошибка, связанная с \r.

Я искал лучший и международный способ хранения переменных в файле.

SQLite мог бы решить.Интересно, производительность SQLite по сравнению с MySQL или базовой сериализации.Также, если есть ошибки, я столкнусь.

Примечания:

  1. Массивы - это двухмерные массивы.То же, что table->field s в структуре БД.
  2. Я не хочу требовать установки дополнительной программы, переносимость - это реальная проблема, так как люди могут установить на любой сервер, PHP, MySQL должно быть достаточно.
  3. Почему я не хочухранить в MySQL, потому что я буду использовать эту структуру для обслуживания кеша.Конечный продукт, который я хочу опубликовать, большую часть времени мог работать без БД.
  4. Я написал базовую структуру, используя fgetcsv & fputcvs.Есть ошибка!Это лишает некоторых символов.Вот почему я ищу альтернативу.Я не хочу изобретать все колесо с самого начала, но парни из PHP не разбираются в программировании: пожалуйста, просмотрите: http://bugs.php.net/bug.php?id=48507

Ответы [ 6 ]

7 голосов
/ 14 февраля 2011

Возможно, у вас есть возможность кэшировать ваши данные как настоящий PHP. Функция var_export предоставляет вам представление данных в PHP. У него есть некоторое ограничение, которого у serialize нет, когда речь идет о циклических ссылках, но, с другой стороны, его легче понять, поскольку вы уже знаете синтаксис.

3 голосов
/ 18 февраля 2011

Может быть json_encode() и json_decode() хорошо для вас? Sqlite не является хорошим решением для многомерных массивов.

2 голосов
/ 15 февраля 2011

Рассматривали ли вы использование YAML,

Вы можете найти веб-сайт YAML здесь и небольшую библиотеку для обработки YAML здесь

1 голос
/ 07 февраля 2011

Да, вам нужно его сериализовать. Тогда вы можете хранить все, что захотите. SQLite, MySQL, PGSQL, плоский файл и т. Д. Поскольку вы его сериализуете, не должно быть проблем с локалью.

[править]

Конечно, вы должны сериализовать и PHP-объект, который вы пытаетесь сохранить. И вы не должны редактировать его напрямую через носитель. Вы должны десериализовать его и манипулировать им через PHP.

[править]

Поскольку вы заявили, что не хотите использовать сервер базы данных, вы должны использовать плоский файл.

Я бы использовал SQLite. Если вы не хотите этого делать, вам нужно создать свой собственный анализатор файлов. Вы можете сохранить один объект на файл и идентифицировать объекты по имени файла.

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

Просто для повторения, вам нужно сериализовать данные перед использованием любого метода хранения. Это не сериализация против SQLite. Это serilaize + SQLite. Вам необходимо сериализовать его, затем вставить в базу данных SQLite и сериализовать данные, а затем сохранить их в сеансе.

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

0 голосов
/ 20 февраля 2011

Вы имеете в виду что-то вроде метода do_put () здесь ? Просто обратите внимание на раздел «CACHE CONTENT» ... Выходной файл кэша выглядит так:

<?php
$value = <<<FILEINFO_26
a:13:{s:4:"f_id";i:26;s:6:"f_hash";s:32:"d07288e848cc6219b7a793b0532f8fed";s:11:"f_extension";s:3:"jpg";s:6:"f_name";s:7:"214.jpg";s:6:"f_size";i:12902;s:10:"f_duration";N;s:6:"f_mime";s:10:"image/jpeg";s:11:"f_os_compat";N;s:9:"f_version";s:4:"NULL";s:14:"f_architecture";s:2:"32";s:7:"f_extra";N;s:11:"f_timestamp";i:1276516112;s:12:"f_dimensions";a:2:{s:5:"width";s:3:"180";s:6:"height";s:3:"227";}}
FILEINFO_26;

$is_array = 1;    

$ttl = 0; 
?> 

Он использует serialize () и может также хранить кэш в Db ... Source здесь .

0 голосов
/ 15 февраля 2011

Если вы намереваетесь использовать массивы в качестве списков, наборов или хэшей, взгляните на хранилище значений ключей redis .

Это невероятно быстро, сделано для такого использования, и есть много PHP-привязок.

...