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é ?
Réponses
Trop de publicités?- 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.
- Version PHP >= 5.0.0
-
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.
- Version PHP >= 4.0.0
Le choix vous appartient.
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>
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.
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