Quels sont les avantages et les inconvénients du stockage des données JSON dans la base de données MySQL par rapport au tableau sérialisé?
Le choix t'appartient.
Comme les commentaires l'indiquent, JSON prend moins d'espace qu'un tableau de sérialisation. J'ai également vérifié si JSON ou la sérialisation est plus rapide, et étonnamment, il est plus rapide d'encoder JSON que de sérialiser. Il est cependant 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é: Winner JSON. JSON est pris en charge sur une plus grande variété de plates-formes, tandis que PHP la dé-sérialisation n'est pris en charge (pour autant que je sache) que par PHP. Bien qu'il soit possible d'analyser l'un ou l'autre format dans n'importe quelle langue, JSON a plus de bibliothèques pré-construites.
Future Proof: Gagnant JSON. JSON est un "standard", dans le sens où Javascript est un standard, et il est peu probable qu'il change à tout moment à l'avenir. Le groupe PHP n'a fait aucune promesse quant à l'avenir du format de sérialisation, et même s'il est peu probable qu'il change à l'avenir, le fait qu'un seul groupe contrôle le format signifie que vous pouvez vous retrouver avec le futur des données illisibles.
Fidelity: Gagnant PHP. PHP la sérialisation vous permettra de stocker des données avec des types de données natifs PHP, y compris des objets définis par des classes personnalisées. JSON vous permettra uniquement de stocker des types primitifs génériques, listes de types primitifs ("tableaux") et d'objets clé/paire de valeurs. PHP La sérialisation peut offrir certains avantages ici si vous développez une application PHP).
Taille du fichier: JSON a une légère victoire ici, car le format de sérialisation actuel de PHP est plus détaillé (car il stocke plus d'informations).
Performance: Qui sait, cela dépend du profil.
Conclusion: optez pour JSON sauf si vous avez une raison impérieuse d'utiliser PHP Serialization.
JSON est plus portable, c'est-à-dire que vous pouvez plus facilement y lire/écrire à partir de différentes langues, etc. Si vous utilisez PHP tableaux sérialisés, vous ne pourrez utiliser facilement PHP pour y accéder.
Utilisez-vous vos données uniquement avec PHP? Si oui: tableaux, si non: JSON.
Pro Array
Pro JSON
Il y avait beaucoup de telles questions sur SO.
Méthode préférée pour stocker PHP tableaux (json_encode vs serialize)
En bref: JSON est meilleur pour les données simples, mais il ne fait pas de différence entre l'objet et le tableau associatif. Les données sérialisées sont plus volumineuses.
Utilisez json for pour les tableaux et la communication avec Javascript ou une autre langue. Utilisez serialize pour objet ou tout PHP travail interne pour le script en cours d'exécution).
JSON bat la sérialisation comme la plupart des réponses l'ont déjà souligné. Je pense que le plus grand avantage est son indépendance de plate-forme. Il se peut que d'autres applications communiquent avec votre base de données et qu'elles n'aient rien à voir avec php.
Mais les deux solutions violent la normalisation de la base de données . Votre base de données ne sera même pas en première forme normale vous ne pouvez donc pas profiter d'une fonctionnalité de base de données comme, par exemple, la recherche. Une meilleure approche consiste à utiliser mappage relationnel objet . Il existe de bonnes bibliothèques - pensez par exemple à doctrine ORM .
si vous essayez de contourner les guillemets et les caractères spéciaux dans votre JSON.stringify (obj), vous pouvez le faire dans PHP en utilisant ses méthodes d'échappement spécifiques à la base de données.
<?php
mysql_real_escape_string(htmlspecialchars($value))
?>
vous pouvez maintenant le stocker en toute sécurité et le décoder lorsque vous le lisez
Je viens d'avoir ce gros problème avec php sérialiser. J'ai stocké beaucoup de données dans un seul champ dans lequel j'ai utilisé nserialize pour lire.
Ce qui s'est passé, c'est que j'ai obtenu des données corrompues dans ce domaine. Sérialiser mapper les données avec des codes comme "a", "s" et "N". S'il y a des données corrompues, la carte a échoué. Il affichera une erreur php que la fonction de désérialisation ne peut pas fonctionner en raison d'une erreur de code d'octet.
Mon point est donc d'éviter sérialiser. Allez avec JSON , bien plus sûr et vous ne vous cognerez pas sur les futurs problèmes majeurs.
Pour moi, pas plus sérialiser.