JSONデータをMySQLデータベースに保存することと、シリアル化された配列の利点と欠点は何ですか?
選択はあなた次第です。
コメントが示すように、JSONはシリアル化配列よりも少ないスペースを使用します。また、JSONまたはSerializingの方が高速かどうかも確認しました。驚くべきことに、JSONエンコードの方がSerializeよりも高速です。ただし、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アプリケーションを開発している場合、シリアル化にはいくつかの利点があります。
ファイルサイズ:PHPの現在のシリアル化形式は(より多くの情報を保存しているので)より冗長であるため、JSONはここでわずかに勝ちます。
パフォーマンス:誰が知っているか、それはプロファイルに依存します。
結論:PHP Serializationを使用する説得力のある理由がない限り、JSONを使用してください。
JSONはより移植性があります。つまり、異なる言語などからより簡単に読み書きできます。PHP直列化された配列を使用した場合、PHPアクセスします。
PHP?のみでデータを使用していますか?はいの場合:配列、いいえの場合:JSON。
プロアレイ
プロJSON
SOにはこのような質問がたくさんありました。
保存する優先メソッドPHP配列(json_encode vs serialize)
つまり、JSONは単純なデータには適していますが、オブジェクトと連想配列の違いを区別しません。シリアル化されたデータは大きくなります。
配列およびJavascriptまたは他の言語との通信にjsonを使用します。オブジェクトに対してシリアル化を使用するか、現在実行中のスクリプトに対して内部のPHP workを使用します。
ほとんどの回答がすでに指摘しているように、JSONはシリアル化に勝っています。最大の利点はプラットフォームの独立性だと思います。他のアプリケーションがデータベースと通信し、PHPとは何の関係もない場合があります。
ただし、bothソリューションはデータベースの正規化に違反します。データベースは 最初の標準形式 にならないため、検索などのデータベース機能を利用できません。より良いアプローチは、 オブジェクトリレーショナルマッピング を使用することです。そこには良いライブラリがあります-例えば doctrine ORM を検討してください。
jSON.stringify(obj)で引用符や特殊文字を回避しようとする場合、データベース固有のエスケープメソッドを使用してPHPで行うことができます。
<?php
mysql_real_escape_string(htmlspecialchars($value))
?>
これを安全に保存し、読み戻すときにデコードできるようになりました
php serializeでこの大きな問題が発生しました。 nserializeを使用して単一のフィールドに大量のデータを保存しました。
起こったのは、そのフィールドでいくつかの破損したデータを得たことです。 「a」、「s」、「N」などのコードでデータをシリアル化してマップします。破損したデータがある場合、マップは失敗しました。バイトコードエラーが原因でunserialize関数が機能しないというphpエラーが表示されます。
したがって、私のポイントはserializeを避けることです。 [〜#〜] json [〜#〜]を使用すると、より安全になり、将来の主要な問題に頭を痛めることはありません。
私にとっては、これ以上serializeはありません。