2014-01-26 2 views
1

Просто натолкнулся на serialize() в php. Многие базы данных хранят данные в сериализованной форме, так любопытно узнать, что больше usefun json или сериализовать и почему?Что более эффективно использовать Json_encode для данных или для сериализации данных и хранения в базе данных?

Json Data->["Math","Language","Science","History"] 
serialized Data->a:4:{i:0;s:4:"Math";i:1;s:8:"Language";i:2;s:7:"Science";i:3;s:7:"History";} 
+3

Не все может быть преобразовано в JSON. Если вы хотите сохранить фактические экземпляры объекта, вам придется использовать 'serialize'. Если все, что вы хотите сохранить, это простые типы данных (т. Е. 'Array' 'и' stdClass'es), вы будете в порядке с 'json_encode'. –

+0

Почему бы не «base64_encode» и «base64_decode» вместо этого? –

+0

Шанкар. Я верю в сериализацию или json - это скорость, чтобы не шифровать. Base64 одновременно громоздкий, медленный, но он ничего не ускоряет. –

ответ

4

Serialize() - это собственный PHP-метод хранения данных в текстовых строках. Он может даже хранить объекты. И он имеет специальные обозначения для объектов. JSON, это его очередь, является Обозначением объекта JavaScript. В принципе, то же самое. Но они используются в разных областях.

JSON обычно используется для онлайн-обмена данными - отправка данных в/из сценариев AJAX, многочисленные API и т. Д. Он оказался намного легче и читабельнее, чем XML, поэтому он конкурирует с ним за наиболее часто используемый стандарт передачи данных для API-интерфейсы. Он также широко используется в конфигурационных файлах, например, для Composter - где читаемость является одним из лучших требований. Визуальная читаемость и простая структура делают JSON лучшим способом общения между различными платформами и языками программирования. Эта последняя фраза важна.

PHP Сериализация используется в тех случаях, когда вы сохраняете данные в PHP и, вы также восстанавливаете данные на PHP. Скажем, вы можете сохранить массивы или объект $ user в сеансе PHP, а затем восстановить их обратно. Или сохраните многомерный массив в поле MySQL, а затем восстановите его точно так же, как и в переменной $ array. В большинстве случаев сериализованные данные не намного короче/легче JSON, и обычно они не занимают меньше места - однако, они теряют удобочитаемость. Но есть довольно мощные трюки, с которыми он сталкивается в PHP: он сохраняет типы данных, имена классов, параметры видимости и т. Д. Также см. __sleep() и __wakeup() методы магического класса, позволяющие экономить объекты «на лету» и создавать специальные конструкторы для их восстановления, снова, на лету.

В вашем конкретном случае, если вы храните данные в базе данных MySQL с помощью PHP, а затем читаете его обратно на PHP - тогда сериализация PHP будет лучшим способом использования. Если вы не хотите получать доступ к этим данным с другими языками или редактировать вручную/визуально.

+0

«Сериализованные данные намного короче/легче JSON и занимают меньше места» - учитывая пример айзера, я считаю, что это рука. Можете ли вы привести пример, когда это так? –

+0

Jan Dvorak: Это зависит от того, что именно вы хотите сохранить. В принципе, не будет никакого достаточного увеличения размера и хранения простого массива чисел или строк - JSON бьет serialize(). Но! С serialize() вы сохраните типы! Serialize() сохраняет типы данных для правильного восстановления, имена классов и даже сохраняет атрибуты видимости свойств - независимо от того, являются ли они общедоступными или частными. Это стоит немало. –

+1

Тогда _that_ следует упомянуть в ответе, а не об улучшении размера, которое вы даже не считаете значимым или имеете пример. Я полностью согласен с тем, что «сохранение типов объектов» является существенным преимуществом. –

0

завершить ответ Олега, я хотел бы предложить вам посетить эту ссылку Цель СССР сравнений между json_encode и сериализацию методов PHP:

http://www.shozab.com/php-serialization-vs-json-encoding-for-an-array

Он показывает, как сериализации, как правило, медленнее, но не рекомендуется для всех ситуаций ,

И, наконец, здесь у вас есть еще один разговор с большим вкладом в StackOverflow:

Serialize or json in PHP?

Надеется, что это будет интересно для вас.

Смежные вопросы