2011-08-07 32 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压缩(如果启用的话)可能会将数据压缩得足够好,所以手动压缩数据并不值得。