2017-11-17 14 views
0

以下のJSONファイルの保存には163バイト必要です。値が「」区切り文字で文字列として一緒に入れて、 『_』されている場合はストレージの最適化:JSONと区切り文字付きの文字列

{ 
    "locations": [ 
    { 
     "station": 6, 
     "category": 1034, 
     "type": 5 
    }, 
    { 
     "station": 3, 
     "category": 1171, 
     "type": 7 
    }, 
    ] 
} 

しかし、6_1034_5,3_1171_7はわずか17バイトがかかります。

このアプローチの問題点は何ですか?

ありがとうございます。

+1

形式が文書化されている限り、一般的にCSVとして知られているこの方法に問題はありません。これは、JSONよりもはるかに自己記述性が低いためです。 – Touffy

+1

あなたのセパレータを含む可能性のある文字列を格納していないので、行を爆発させたり、配列インデックスを操作したりするのに気をつけなければ安全ですアプリケーション言語に応じて異なります。私はwebsocket通信でバイトを保存するのに似た何かをしました、私のユースケースではbwの使用量を約25%減らしました。 –

答えて

1

このようなアプローチで見た問題は、主に保守性を中心にしています。

区切られたアプローチでは、ロケーション項目のプロパティは序数によって識別されます。すべての数字があるので、最初のセグメントがステーション、カテゴリ、またはタイプのいずれであるかを知らせるものはありません。それを事前に知っていなければなりません。あなたのコードベースに新しい人がそれを知らないかもしれないし、バグを導入するかもしれません。

現在のところ、すべてのデータは整数であり、エンコードとデコードが比較的簡単で、デリミタと競合するリスクはありません。ただし、ユーザーが入力したテキストをある時点で追加する必要がある場合は、区切り文字を含むテキストが表示される危険性があります。その場合、デリミタを確実に検出できるように、エスケープ/エンコーディングの仕組みを考案する必要があります。これは簡単に思えるかもしれませんが、あなたが疑うよりも難しいです。私はそれが間違って何度も行われたのを見ました。

XMLやJSONなどのよく知られている構造化テキスト形式を使用すると、すべての種類のテキストを処理するためのルールを完全に開発し、テストし、読み書きするための完全に開発されたライブラリがあります。

状況に応じて、ストレージの量に対するこの懸念は、マイクロ最適化である可能性があります。容量計算(X項目に実際のストレージがどれくらい必要かなど)を試して、予想されるアイテム数と使用可能なストレージの予想容量を比較することができます。

関連する問題