通过在小数据集中散列来压缩Guids

时间:2011-08-07 05:03:39

标签: c# hash guid compression

我正在开发移动应用程序,我想优化它从服务器接收的数据(作为JSON)。 返回了3个列表(每个列表包含自己的对象类,近似列表大小为50,100和170)。每个对象都有一个Guid id,每个对象都有一些关系数据。 E.g:

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

有没有办法将这些Guid压缩到某个分类器而不存储身份映射?也许使用哈希函数?

4 个答案:

答案 0 :(得分:0)

您可以将GUID的16字节表示转换为Base 64字符串。但是你没有提到编程语言,所以我们无法进一步帮助。

这里不推荐使用哈希函数,因为哈希函数通常是有损的。

答案 1 :(得分:0)

没有。 (非加密)哈希的一个属性是它们碰撞:hash(a) == hash(b)a != b。它们是一种性能优化,在这种情况下,您进行了大量的等式检查,并且您期望得到许多错误的结果(因为hash(a) != hash(b)然后是a != b)。 GUID->计数器地图可能是在这里获得较小ID的最佳方式。

答案 2 :(得分:0)

您可以将hex(base16)转换为base64,并删除所有标点符号。使用base64时应节省25%,标点符号应节省4个字节。

答案 3 :(得分:0)

考虑到这一点我已经意识到HTTP压缩(如果启用)可能会足够好地压缩这些数据,因此手动压缩数据并不值得。