2011-08-07 30 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", ... ] } 

有沒有辦法將這些Guid壓縮到某種分揀機而不存儲標識圖?也許使用散列函數?

回答

0

編號(非密碼)哈希屬性之一是它們碰撞:hash(a) == hash(b)但是a != b。如果您正在進行大量平等檢查並且您期望獲得許多錯誤結果(因爲如果hash(a) != hash(b)然後a != b),則它們是性能優化。一個GUID-> counter map可能是在這裏獲得較小ID的最好方法。

+0

密碼哈希也相互衝突。 – Iridium

+0

理論上。常規哈希在實踐中不斷碰撞。 –

0

您可以將GUID的16字節表示形式轉換爲Base 64字符串。但是你沒有提到編程語言,所以我們不能進一步提供幫助。

這裏不推薦使用哈希函數,因爲哈希函數通常是有損的。

0

您可以將十六進制(base16)轉換爲base64,並刪除所有標點符號。您應該使用base64節省25%,另外4個字節用於標點符號。

0

想一想,我已經意識到HTTP壓縮(如果啓用的話)可能會將數據壓縮得足夠好,所以手動壓縮數據並不值得。