我希望缩短数据库条目的UUID,以便使URL安全和可共享为永久链接。虽然我们可以拥有一个单独的缓存表"指针"对于那些字符较少的人,我想知道是否有更好的方法?
我能想到的最好的方法是base64
编码它们而不是十六进制编码它们。这会将它们从32个字符缩短到22个左右。但是如果可能的话,我想尝试将这个字符设置为低于14个字符。 :/
答案 0 :(得分:1)
我将在这里采取一些快速的数学计算,所以如果我错了请纠正我。 UUID是最基本的128位值(ref)。这意味着有2 ^ 128种可能性。
根据RFC 3986,
URI中允许但没有保留的字符 目的被称为无保留。这些包括大写和小写 字母,十进制数字,连字符,句号,下划线和波浪号。
所以在朋友之间,我们可以说这是我们可以在URL中使用的66个未保留的ASCII字符(26 + 26 + 10 + 4)。
解决equation 2 ^ 128 - 66 ^ x = 0,x约为21.18,这意味着,就像你用base64的想法所说的那样,至少需要22个未保留的ASCII字符来对网址进行编码。 UUID(此时)和更少的字符不能100%使用。
话虽如此,表面上(在视觉上,在浏览器中)可能会使用unicode字符来表示更大部分的hexibits(例如example.com/uuid/☂☎♞ʤ☯......),但是基础URL将比32-hexibit UUID长得多,因为允许的URL字符受RFC限制。然而,这肯定是疯狂的,并且需要一些简洁的算法来很好地编码UUID。