标准UUID很长,您不能通过双击来选择全部内容。
例如123e4567-e89b-12d3-a456-426655440000
我喜欢更短的身份证。
我喜欢双击一个ID来选择它。
我的问题是:将标准ID编码为22个字符(Ish)长base62字母数字字符串有什么问题吗?
例如71jbvv7LfRKYp19gtRLtkn
编辑:添加上下文
我们需要的是NoSQL数据存储服务(如DynamoDB )中的通用数据存储。碰撞不应该发生,但我的理解是,与UUID的碰撞风险可以忽略不计。标准UUID符合我们的需要所以我想问的是..。标准UUID不存在的base62编码是否存在任何差异、额外风险或不可预见的问题?
谢谢。
发布于 2020-05-26 20:42:11
我认为这是个好主意,我本人也在为我目前的项目考虑这个问题。
,但只用于外部表示,而不是内部存储。
实际上,UUID基本上只是128位整数,或者是一个16字节或128位的数组。
为了有效地存储DB,应该以二进制形式(例如MySQL中的二进制(16)列)存储。它将节省空间(通常的文本表示为16字节,Base62为36字节,Base62为22字节),并在查询或索引时执行得更快(字符串排序速度不如数字,因为它们依赖排序规则)。
规范表示是一种十六进制编码,根据每组字节的语义(在大多数情况下我们不关心的意思)进行8-4-4-4-12分组。
但这只是一个惯例,一点也不适合人类。因此,我认为Base62这样的不同编码是完全可以接受的,在发生人与人之间的交互时(例如在URL中),或者对于任何基于文本的接口或存储系统(例如HTTP,或者CSV/JSON/XML.中的文件存储),都是完全可以接受的。
在内部,应用程序应该以二进制形式使用它们。我不知道PHP,但例如Java有java.util.UUID类。
对于Java,还有一个非常好的库,它使原始UUID和Base62文本表示之间的转换非常容易:
https://github.com/Devskiller/friendly-id
有关UUID的更多信息:
发布于 2017-03-07 23:07:24
Base62并不像Bas-64那样标准,但是Bas-64将有两个额外的符号,可能不允许通过双击来选择整个事物。
把破折号去掉怎么样?这将使它比原来的短,它将很容易选择双击鼠标。
示例:
123e4567e89b12d3a456426655440000
更新:
碱基-64有两种常见的编码方式: a-zA-Z0-9/+和a-zA-Z0-9_-。如果你选择后者,那就解决了你的选择问题。
另一方面,我认为基数-62比我原先想象的要广泛使用。这里有一个很好的博客,主题是如何使用base-62:http://blog.birdhouse.org/2010/10/24/base62-urls-django/
发布于 2017-10-19 07:46:38
您的问题的解决方案通常被命名为Url62,有些项目正在使用此约定。他们正在将普通UUID转换为Base62格式。
如果您正在使用Java进行开发,那么请看一下FriendlyId项目:https://github.com/Devskiller/friendly-id
https://stackoverflow.com/questions/42658816
复制相似问题