ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    スポンサーサイト

    このエントリーを含むはてなブックマーク はてなブックマーク - スポンサーサイト あとで読む
    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    PHPで配列を保存するとき、データ容量はserializeとJSONでどちらが少ないか?

    このエントリーを含むはてなブックマーク はてなブックマーク - PHPで配列を保存するとき、データ容量はserializeとJSONでどちらが少ないか? あとで読む
    Amazon APIで取得したレスポンスデータを連想配列に変換して、DBに保存します。
    配列を保存するために、serialize関数でバイナリーデータにした場合と、JSON形式のテキストデータにした場合では、どちらが容量が小さくできるか?調査してみました。

    PHP 配列 保存 JSON serialize 容量 比較 - Google 検索

    PHPで配列をそのままテキストにシリアライズとjson_encodeで行う | 9ineBB

    シリアライズとJSONの違い

    シリアライズされたものをデータベースに保存したい場合はテキスト型ではなくBLOB型に入れなくてはいけないこと、またシリアライズされたものは英数字のみの配列ならJSONよりも容量が大きくなる。JSONの場合はデータベースにテキスト型で保存することが出来る、また英数字のみの配列ならシリアライズより容量を抑えれる、ただマルチバイト文字になると容量はシリアライズよりも大きくなり、デコード時間もシリアライズより掛かる。



    ・英数字のみ → シリアライズ > JSON
    ・マルチバイト文字 → JSON > シリアライズ

    serializeとjson関数の比較 - Web就活日記

    エンコードbyte数比較
    php配列からのエンコード処理ではjson_encodeの方が生成Stringのバイト数が少なく済みそう

    形式       シングルバイト   マルチバイト
    serialize     178919        248926
    json_encode   70008        230024



    ・シリアライズ > JSON

    serialize VS json_encode 〜人類の存亡とか仁義とか全く関係ない戦い〜 | 日記の間 | あかつきのお宿

    json_encodeでマルチバイト文字をエスケープしたときって、「u3042」みたいに、一文字が5バイトになるのよ。通常、UTF-8のマルチバイト文字は3バイトだから、マルチバイト文字を多く含むデータを変換した場合は、json_encodeの方がデータ量が多くなる。



    PHP: 定義済み定数 - Manual

    JSON_UNESCAPED_UNICODE (integer)
    マルチバイト Unicode 文字をそのままの形式で扱います (デフォルトでは \uXXXX にエスケープします)。 PHP 5.4.0 以降で使用可能です。



    PHP5.4以降では、配列をJSON形式にエンコードするとき、マルチバイト文字をエスケープしないオプションが用意されていました。
    「JSON_UNESCAPED_UNICODE」を指定してやれば、マルチバイト文字をそのままDBに保存できるので、データ容量の増加を多少は抑えられるでしょう。

    PHPで配列を保存するとき、容量を小さくしたければ、
    ・JSON形式
    ・マルチバイト文字をエスケープしない設定
    でOKかな?

    (処理速度を重視する場合は、シリアライズでOK)

    ●実験結果

    ・MySQLのテーブルに、JSONデータを保存。
    ・約5000レコードあるテーブル。

    (1) デフォルトの設定(マルチバイト文字をエスケープする)
    (2) JSON_UNESCAPED_UNICODEを設定(マルチバイト文字をエスケープしない)

    (1)だと、テーブルの容量は、92.7MBだった。
    (2)にすると、テーブルの容量は86.8MBに減った。

    92.7 - 86.8 = 5.9MBの減少。
    比率だと、93.6%に圧縮された。つまり、6.4%の削減に貢献した。

    ちょっとだけど、レコード数が増えたら、じわじわと効いてきますね!
    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/1402-932824f6

    FC2Ad

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。