2011-08-07 3 views
0

私はモバイルアプリで作業しています。サーバーから受信するデータをJSONとして最適化したいと考えています。 3つのリストが返されます(それぞれに独自のクラスのオブジェクトが含まれています。リストのサイズの概算は50,100,170です)。各オブジェクトにはGUID IDがあり、オブジェクトごとにいくつかの関係データがあります。例:小さなデータセットをハッシュしてGuidを圧縮する

o = { Id = "8f088552-5b24-4ba4-a6e5-8958c4353581", 
     RelatedIds = ["19d2e562-0874-473f-8e05-7052e8defd9a", "615b4c47-199a-4f7d-8268-08ed43d9c891", ... ] } 

アイデンティティマップを保存せずにこれらのGuidsを何かのソーターに圧縮する方法はありますか?おそらくハッシュ関数を使用していますか?

答えて

0

いいえ(非暗号化)ハッシュの属性の1つは、それらが衝突することです。hash(a) == hash(b)しかし、a != bです。これらは、多くの等価チェックを行い、多くの誤った結果が予想される場合のパフォーマンスの最適化です(hash(a) != hash(b)ならばa != b)。 GUID->カウンターマップはおそらくここで小さなIDを取得するための最良の方法です。

+0

暗号化ハッシュも衝突します。理論的には – Iridium

+0

です。通常のハッシュは、実際には一貫して衝突します。 –

0

GUIDの16バイト表現をBase 64文字列に変換できます。しかし、プログラミング言語については言及していませんでしたので、私たちはさらに助けません。

ハッシュ関数は一般的にロッシーであるため、ここではハッシュ関数はお勧めできません。

0

hex(base16)をbase64に変換して、すべての句読点を削除できます。 base64を使用する場合は25%、句読点を使用する場合は4バイトを節約する必要があります。

0

HTTP圧縮(有効になっている場合)はおそらくデータを十分に圧縮することに気付きました。データを手動で圧縮する価値はありません。