70 votes

JSON et tableau sérialisé dans une base de données

Quels sont les avantages et les inconvénients du stockage de données JSON dans une base de données MySQL par rapport à un tableau sérialisé ?

93voto

Mark Tomlin Points 2165
  1. JSON encoder () & décoder ()
    • Version PHP >= 5.0.0
      • Limite d'emboîtement de 20.
    • Version PHP >= 5.2.3
      • Limite d'emboîtement de 128.
    • Version PHP >= 5.3.0
      • Limite d'emboîtement de 512.
    • Faible encombrement par rapport aux chaînes sérialisées de PHP.
  2. sérialiser () & désérialiser ()
    • Version PHP >= 4.0.0
      • Les méthodes ne sont pas perdues sur PHP Datatype Object.
      • Méthode magique __wakeup() appelée sur tout objet en cours de désérialisation. (TRÈS PUISSANT)
      • Il a été noté qu'il est parfois préférable que la encoder en base64 dans la base de données, et décodage base64 sont retirées de la base de données avec cette fonction, car il y a quelques problèmes avec la gestion de certains caractères d'espace blanc.

Le choix vous appartient.

84voto

Marius Points 27452

Pro JSON :

  • Les données JSON peuvent être utilisées par de nombreux langages différents, et pas seulement par PHP.
  • Les données JSON peuvent être lues et écrites par l'homme.
  • Il prend moins de place
  • Il est plus rapide d'encoder le JSON que de le sérialiser.

Pro Serialized Array :

  • Il est plus rapide de désérialiser que de décoder JSON.

Comme l'indiquent les commentaires, JSON prend moins de place qu'un tableau sérialisé. J'ai également vérifié si JSON ou Serializing est plus rapide, et étonnamment, il est plus rapide d'encoder JSON que de Serialize. En revanche, il est plus rapide de désérialiser que de décoder JSON.

Voici le script que j'ai utilisé pour tester :

<?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>

29voto

Alan Storm Points 82442

Portabilité : Gagner JSON. JSON est supporté par une plus grande variété de plateformes, alors que la dé-sérialisation PHP n'est supportée (pour autant que je sache) que par PHP. Bien qu'il soit possible d'analyser l'un ou l'autre des formats dans n'importe quel langage, JSON dispose de plus de bibliothèques prédéfinies.

A l'épreuve du futur : Vaincre JSON. JSON est une "norme", dans le sens où Javascript est une norme, et n'est pas susceptible de changer à l'avenir. Le groupe PHP n'a fait aucune promesse quant à l'avenir du format de sérialisation, et bien qu'il soit peu probable qu'il change à l'avenir, le fait qu'un seul groupe contrôle le format signifie que vous pouvez vous retrouver avec des données futures illisibles.

Fidélité : Gagnant PHP. La sérialisation PHP vous permettra de stocker des données avec les types de données natifs de PHP, y compris les objets définis par des classes personnalisées. JSON vous permettra uniquement de stocker des types primitifs génériques, des listes de types primitifs ("tableaux") et des objets de type paire clé/valeur. La sérialisation PHP peut offrir quelques avantages ici si vous développez une application PHP.

Taille du fichier : JSON a un léger avantage ici, car le format de sérialisation actuel de PHP est plus verbeux (car il stocke plus d'informations).

Performance : Qui sait, ça dépend, profil.

Conclusion : Utilisez JSON, sauf si vous avez une raison impérieuse d'utiliser la sérialisation PHP.

7voto

Tom Haigh Points 32314

JSON est plus portable, c'est-à-dire qu'il est plus facile de le lire et de l'écrire à partir de différents langages, etc. Si vous utilisez des tableaux sérialisés en PHP, vous ne pourrez utiliser que PHP pour y accéder.

7voto

mere-teresa Points 275

Utilisez-vous vos données uniquement avec PHP ? Si oui : tableaux, si non : JSON.

Pro Array

  • les sessions ont utilisé la sérialisation : je pense que c'est plus rapide que json_encode/decode (pas tout à fait sûr)
  • de nombreuses fonctions sur les tableaux en PHP (trier/fusionner/...)

Pro JSON

  • JSON est connu dans d'autres langues et langages web
  • moins verbeux dans la base de données
  • de nombreux outils, comme XML : JSON SChema

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X