7赞
907
当前位置:  开发笔记 > 编程语言 > 正文

生成简短的唯一标识符

如何解决《生成简短的唯一标识符》经验,为你挑选了1个好方法。

我正在寻找一种算法,该算法生成适合于两者的标识符,例如URL中的外部使用以及具有以下要求的持久性:

,像最大 8个字符

网址友好,所以没有特殊字符

人性化,例如没有像L/l,0/O这样的暧昧角色

增量快速索引

随机 防止猜测而不知道算法(会很好,但不重要)

独特而无需检查数据库

我查看了各种解决方案,但我发现的所有解决方案都有一些重要的权衡.例如:

GUID:太长,不是增量

GUID base64编码:仍然太长,不是增量

GUID ascii85编码:短,不是增量,太多不合适的字符

GUID编码如base32,base36:短,但信息丢失

梳子GUID:太长,但是增量

所有其他基于随机的:需要检查数据库的唯一性

基于时间:容易在群集或多线程环境中发生冲突


编辑:为什么这个被标记为偏离主题?这些要求描述了可以提供许多合法解决方案的特定问题.事实上,这里的一些解决方案非常好,我正在努力选择一个标记作为答案.



1> Scott Hannen..:

如果可能的话,我会保持用户要求(简短,可读)和数据库要求(增量,快速索引)分开.面向用户的需求发生变化.您不希望必须修改表,因为明天您决定更改面向用户ID的长度或其他细节.

一种方法是使用用户友好的字符生成您的ID,
23456789ABCDEFGHJKLMNPQRSTUVWXYZ并将其随机化.

但是,当插入数据库时​​,不要将该值作为它引用的记录的主键,甚至将其存储在该表中.使用标识主键将其插入自己的表中,然后将该密钥intbigint密钥存储在您的记录中.

这样,您的主表可以具有增量主键.如果您需要通过其"友好"ID引用记录,那么您可以加入友好ID表.

我的猜测是,如果你生成足够高的这些ID,那么你关心的是索引性能,那么人类用户检索这些值的速度就会低很多.因此,友好ID表中随机值的稍慢查找不会成为问题.


推荐阅读
author-avatar
铁骑侠客_685
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有