JSON против сериализованного массива в базе данных [закрыто]



каковы преимущества и недостатки хранения данных JSON в базе данных MySQL по сравнению с сериализованным массивом?

852   11  

11 ответов:

  1. JSON encode() & расшифруйте()
    • версия PHP >= 5.0.0
      • предел вложенности 20.
    • версия PHP >= 5.2.3
      • предел вложенности 128.
    • версия PHP >= 5.3.0
      • предел вложенности 512.
    • малый след против строки сериализации PHP.
  2. сериализовать() & unserialize()
    • версия PHP >= 4.0.0
      • методы не теряются на объекте типа данных PHP.
      • __пробуждении() магический метод называется на любой объект восстановить. (ОЧЕНЬ МОЩНЫЙ)
      • было отмечено, что это несколько раз лучше base64 encode строки помещаются в базу данных, и в base64 декодировать строка, взятая из базы данных с помощью этой функции, так как есть некоторые проблемы с управляемостью некоторые символы пробела.

выбор за вами.

Pro JSON:

  • данные JSON могут использоваться многими различными языками, а не только PHP
  • данные JSON удобочитаемы и доступны для записи.
  • Он занимает меньше места
  • это быстрее, чтобы закодировать в JSON, чем сериализовать

Pro Сериализованный Массив:

  • это быстрее сделать unserialize, чем JSON декодировать

как показывают комментарии, JSON занимает меньше места, чем a сериализовать массив. Я также проверил, является ли JSON или сериализация быстрее, и, что удивительно, быстрее кодировать JSON, чем сериализовать. Быстрее восстановить, чем в JSON декодирования правда.

это скрипт, который я использовал для тестирования:

<?php 
function runTime(){
      $mtime = microtime(); 
      $mtime = explode(' ', $mtime); 
      $mtime = $mtime[1] + $mtime[0]; 
      return $mtime; 
}
?> 
<pre>
<?php
$start = runTime();

$ser;

for($i=0; $i<1000; $i++){
    $a = array(a => 1, x => 10);
    $ser = serialize($a);
}
$total = runTime() - $start;
echo "Serializing 1000 times took \t$total seconds";
?>

<?php
$start = runTime();

$json;

for($i=0; $i<1000; $i++){
    $a = array(a => 1, x => 10);
    $json = json_encode($a);
}
$total = runTime() - $start;
echo "JSON encoding 1000 times took \t$total seconds";
?>

<?php
$start = runTime();

$ser;

for($i=0; $i<1000; $i++){
    $a = unserialize($ser);
}
$total = runTime() - $start;
echo "Unserializing 1000 times took \t$total seconds";
?>

<?php
$start = runTime();

$json;

for($i=0; $i<1000; $i++){
    $a = json_decode($json);
}
$total = runTime() - $start;
echo "JSON decoding 1000 times took \t$total seconds";
?>
</pre>

переносимость: победитель JSON. JSON поддерживается на более широком спектре платформ, в то время как PHP-де-сериализация поддерживается только (насколько я знаю) PHP. Хотя можно анализировать любой формат на любом языке, JSON имеет больше готовых библиотек.

будущее доказательство: победитель JSON. JSON является "стандартом" в том смысле, что Javascript является стандартом и вряд ли изменится в любое время в будущем. Группа PHP не дала никаких обещаний относительно будущего формата сериализации, и хотя это вряд ли изменится в будущем, тот факт, что одна группа управляет форматом, означает, что вы можете получить будущие данные, которые не читаются.

верность: победитель PHP. Сериализация PHP позволит вам хранить данные с собственными типами данных PHP, включая объекты, определенные пользовательскими классами. JSON позволит вам хранить только общие примитивные типы, списки примитивных типов ("массивы") и объекты пары ключ/значение. Сериализация PHP может предоставить некоторые преимущества здесь, Если вы разработка PHP-приложения.

размер файла: JSON имеет небольшой выигрыш здесь, так как текущий формат сериализации PHP является более подробным (поскольку он хранит больше информации).

производительность: кто знает, это зависит, профиль.

вывод: идите с JSON, если у вас нет веской причины использовать сериализацию PHP .

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

вы используете свои данные только с PHP ? Если да: массивы, если нет: JSON.

Pro Array

  • сеансы использовали сериализацию : я думаю, что это быстрее, чем json_encode/decode (не совсем уверен)
  • многие функции на массивах в PHP (сортировка / слияние/...)

Pro JSON

  • JSON знает на других языках и веб-языках
  • менее подробный в базе данных
  • многие инструменты, такие как XML : JSON Схема

было много таких вопросов по так.

предпочтительный метод для хранения PHP массивов (json_encode vs serialize)

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

используйте json для массивов и связи с Javascript или другим языком. Использование сериализации для объекта или какого-либо внутреннего PHP для работы для текущего запуска скрипта.

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

<?php
mysql_real_escape_string(htmlspecialchars($value))
?>

теперь вы можете хранить это безопасно и декодировать его, когда вы читаете его обратно

JSON бьет сериализацию, как уже указывалось в большинстве ответов. Я думаю, что самое большое преимущество-это независимость от платформы. У вас могут быть другие приложения, которые взаимодействуют с вашей базой данных, и они могут не иметь ничего общего с php.

но и решений нарушение нормализации базы данных. Ваша база данных даже не будет в первая нормальная форма поэтому вы не можете воспользоваться любой функцией базы данных, как, скажем, поиск. Бест подход заключается в использовании объектно-реляционного сопоставления. Есть хорошие библиотеки там - рассмотрим, например,учение ОРМ.

У меня просто была эта большая проблема с сериализация в PHP. Я хранил много данных в одном поле, в котором я использовал unserialize читать.

Что произошло, так это то, что я получил некоторые поврежденные данные в этом поле. Сериализовать сопоставление данных с помощью кодов типа "a", " s " и "N". Если есть поврежденные данные, карта не удалась. Он покажет ошибку php, что функция unserialize не может работать из-за ошибки байтового кода.

Так что моя точка зрения, чтобы избежать сериализовать. Иди с JSON, путь безопаснее, и вы не будете биться головой о будущие проблемы Майоров.

для меня, не более сериализовать.

atm, json_encode () работает только с кодированными данными UTF-8.. поэтому он не может кодировать символы, такие как "ñ", иначе он возвращает NULL

Comments

    Ничего не найдено.