尝试压缩Sha1的大小,也许是制作唯一标识符的更好选择


Try to compress Sha1 down in size, maybe a better option to make unique identifier

我有以下三条信息。组名称、组类型和组排名。

作为一个快速示例

《妈妈的猫》、《猫》、"前十名"

这个例子与我所做的相去甚远,但你已经了解了基本的想法。

群组名称是大量可能值的选择(比如大约20k),群组类型和群组排名是较小的数量(比如每个10个)

试图找到一种更好的方法来为这组东西提供一个简短的唯一标识符,而不是必须使用一个带有巨大丑陋URL的sha1

有更好的主意吗?

对所有语言解决方案都开放,所以我把很多程序员都钉在这里,因为我想不出更好的标签来分配给它。

谢谢。

编辑:不久前我在其他地方找到的一个解决方案是,将SHA-1中的最后几个字符转换为十进制值。不确定这个想法的可靠性和碰撞的可能性。

EDIT2:使用mongoDB并将这个sha1值与成员一起存储在DB中,以使查询变得简单。试图找到在单独的表/集合中创建autoincrement字段的替代解决方案,这意味着在运行更新脚本时会有更多的查询。

对于python映射,您可以使用(grouptype、groupranking、groupname)作为字典键,也可以通过使用grouptype->groupranking->groupname键拆分字典来减小字典的大小。

为了生成唯一的url,grouptype.rank.name有什么问题,或者与/作为分隔符有什么问题-您可以使用有效的url类型函数将每个函数中的无效字符替换为%nn格式。

您可以使用urllib.quote('/'.join([baseurl, grouptype, groupranking, groupname])来生成这样的路径,甚至使用baseurl + urllib.urlencode({'grouptype':grouptype,'groupranking':groupranking,'groupname':groupname})——后者将导致baseurl的典型查询格式?grouptype=任意&。。。。