首先,我想确保我知道这样一个事实,即重新散列是一个明智的话题。但是我想听听你的一些意见,你会在这里采取什么方法。
我正在构建一个分布式应用程序,其中节点远程创建由 UUID 标识的实体。最终,所有实体都应该聚集在一个专用的排水节点上,该排水节点使用这些 UUID 存储所有实体。
现在我想创建额外的标识符,这对人类用户来说更方便。对 UUID 进行 Base64 编码仍会创建 22 个字符的 ID,这不适合人类使用。所以我需要一些类似 URL 缩短服务的东西。应用双射函数无济于事,因为它们不会降低信息价值。当然,我知道我需要丢失信息才能缩短 id。而且我也知道哈希信息的任何减少都会增加冲突的可能性。我被困住了,为了为人类创建更短的 ID,减少信息的最合适方法是什么。
以下是一些先决条件:我将提供通过我的数据存储映射 {UUID,shorted ID} 的能力。我仍然更喜欢非集中式解决方案。我可能永远不需要超过一百万个 ID (~2^20)。
以下是我到目前为止的想法:
自动递增的 ID:如果我使用某种自动递增的 id,我可以将此 id 转换为混淆字符串并传递它。这将是最简单的方法,只要周围的键很少,键就不会很长。但是,我必须引入一个我并不真正想要的中心化实体。- 缩短 UUID:我可以只取原始 128 位 uuid 的一些位。那么我至少应该考虑UUID的版本。或者这还有什么问题吗?
- 重新散列UUID:我可以在我的初始 UUID 上应用第二个散列算法并存储映射。
还有其他方法吗?什么是有利的?
提前致谢!