首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用base62 (字母数字)UUID有什么问题吗?

使用base62 (字母数字)UUID有什么问题吗?
EN

Stack Overflow用户
提问于 2017-03-07 21:38:05
回答 3查看 7.1K关注 0票数 9

标准UUID很长,您不能通过双击来选择全部内容。

例如123e4567-e89b-12d3-a456-426655440000

我喜欢更短的身份证。

我喜欢双击一个ID来选择它。

我的问题是:将标准ID编码为22个字符(Ish)长base62字母数字字符串有什么问题吗?

例如71jbvv7LfRKYp19gtRLtkn

编辑:添加上下文

我们需要的是NoSQL数据存储服务(如DynamoDB )中的通用数据存储。碰撞不应该发生,但我的理解是,与UUID的碰撞风险可以忽略不计。标准UUID符合我们的需要所以我想问的是..。标准UUID不存在的base62编码是否存在任何差异、额外风险或不可预见的问题?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 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的更多信息:

票数 4
EN

Stack Overflow用户

发布于 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/

票数 2
EN

Stack Overflow用户

发布于 2017-10-19 07:46:38

您的问题的解决方案通常被命名为Url62,有些项目正在使用此约定。他们正在将普通UUID转换为Base62格式。

如果您正在使用Java进行开发,那么请看一下FriendlyId项目:https://github.com/Devskiller/friendly-id

有关此主题的更多内容:https://medium.com/@huntie/representing-a-uuid-as-a-base-62-hash-id-for-short-pretty-urls-c30e66bf35f9

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42658816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档