Welche Vor- und Nachteile hat das Speichern von JSON-Daten in einer MySQL-Datenbank im Vergleich zu einem serialisierten Array?
Antworten:
Es ist deine Entscheidung.
Wie aus den Kommentaren hervorgeht, nimmt JSON weniger Speicherplatz ein als ein Serialisierungsarray. Ich habe auch überprüft, ob JSON oder Serialisierung schneller ist, und überraschenderweise ist die JSON-Codierung schneller als die Serialisierung. Unserialisieren ist jedoch schneller als JSON-Dekodieren.
Dies ist das Skript, das ich zum Testen verwendet habe:
<?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ät: Gewinner JSON. JSON wird auf einer größeren Vielfalt von Plattformen unterstützt, während die PHP-De-Serialisierung (soweit ich weiß) nur von PHP unterstützt wird. Während es möglich ist, beide Formate in jeder Sprache zu analysieren, verfügt JSON über mehr vorgefertigte Bibliotheken.
Zukunftssicher: Gewinner JSON. JSON ist ein "Standard" in dem Sinne, dass Javascript ein Standard ist und sich in Zukunft wahrscheinlich nicht ändern wird. Die PHP-Gruppe hat keine Zusagen bezüglich der Zukunft des Serialisierungsformats gemacht, und obwohl es unwahrscheinlich ist, dass sich dies in Zukunft ändert, bedeutet die Tatsache, dass eine einzelne Gruppe das Format steuert, dass Sie möglicherweise zukünftige Daten erhalten, die nicht lesbar sind.
Treue: Gewinner PHP. Mit der PHP-Serialisierung können Sie Daten mit nativen PHP-Datentypen speichern, einschließlich Objekten, die von benutzerdefinierten Klassen definiert wurden. Mit JSON können Sie nur generische primitive Typen, Listen primitiver Typen ("Arrays") und Schlüssel / Wert-Paar-Objekte speichern. Die PHP-Serialisierung kann hier einige Vorteile bieten, wenn Sie eine PHP-Anwendung entwickeln.
Dateigröße: JSON hat hier einen leichten Gewinn, da das aktuelle Serialisierungsformat von PHP ausführlicher ist (da mehr Informationen gespeichert werden).
Leistung: Wer weiß, es kommt auf das Profil an.
Fazit: Entscheiden Sie sich für JSON, es sei denn, Sie haben einen zwingenden Grund, die PHP-Serialisierung zu verwenden.
JSON ist portabler, dh Sie können es leichter aus verschiedenen Sprachen usw. lesen / schreiben. Wenn Sie PHP-serialisierte Arrays verwenden, können Sie nur PHP verwenden, um darauf zuzugreifen.
Verwenden Sie Ihre Daten nur mit PHP? Wenn ja: Arrays, wenn nein: JSON.
Pro Array
Pro JSON
Es gab viele solcher Fragen zu SO.
Bevorzugte Methode zum Speichern von PHP-Arrays (json_encode vs serialize)
Kurz gesagt: JSON ist besser für einfache Daten, unterscheidet jedoch nicht zwischen Objekt und assoziativem Array. Serialisierte Daten sind größer.
Wenn Sie versuchen, Anführungszeichen und Sonderzeichen in Ihrer JSON.stringify (obj) zu umgehen, können Sie dies in PHP mithilfe der datenbankspezifischen Escape-Methoden tun.
<?php
mysql_real_escape_string(htmlspecialchars($value))
?>
Sie können dies jetzt sicher speichern und dekodieren, wenn Sie es wieder vorlesen
JSON schlägt die Serialisierung, wie die meisten Antworten bereits gezeigt haben. Ich denke, der größte Vorteil ist die Plattformunabhängigkeit. Möglicherweise kommunizieren andere Anwendungen mit Ihrer Datenbank und sie haben möglicherweise nichts mit PHP zu tun.
Aber beide Lösungen verletzen Datenbank Normalisierung . Ihre Datenbank befindet sich nicht einmal in der ersten normalen Form, sodass Sie keine Datenbankfunktion wie beispielsweise die Suche nutzen können. Ein besserer Ansatz ist die Verwendung der objektrelationalen Zuordnung . Es gibt gute Bibliotheken da draußen - denken Sie zum Beispiel an die Lehre ORM .
Ich hatte gerade dieses große Problem mit PHP Serialize . Ich habe viele Daten in einem einzigen Feld gespeichert, in dem ich unserialize zum Lesen verwendet habe.
Was passiert ist, dass ich einige beschädigte Daten in diesem Feld habe. Serialize ordne die Daten mit Codes wie 'a', 's' und 'N' zu. Wenn beschädigte Daten vorhanden sind, ist die Zuordnung fehlgeschlagen. Es wird ein PHP-Fehler angezeigt, dass die Funktion Unserialize aufgrund eines Bytecode-Fehlers nicht funktioniert.
Mein Punkt ist es also, eine Serialisierung zu vermeiden . Gehen Sie mit JSON , viel sicherer und Sie werden sich bei zukünftigen Majors-Problemen nicht den Kopf zerbrechen.
Für mich keine Serialisierung mehr .