【发布时间】:2012-09-10 20:59:41
【问题描述】:
我不希望我的数据库 id 是连续的,所以我尝试使用以下代码生成 uid:
$bin = openssl_random_pseudo_bytes(12);
$hex = bin2hex($bin);
return base_convert($hex, 16, 36);
我的问题是:我需要多少字节才能使 id 足够独特以处理大量记录(如 twitter)?
【问题讨论】:
-
您为什么不希望您的数据库 ID 是连续的?如果这只是为了显示,我建议您找到一种方法来显示它们,但在您的数据库中保留顺序 ID。
-
@Brad 这样更安全,让我可以隐藏我的应用程序的增长。
-
@hugo_leonardo,重复数据?不,我根本不建议这样做!只需以不同的方式显示您的 ID。您的 ID 与安全性有什么关系?没有。我建议您仔细检查您的假设并重新评估您正在尝试做的事情。
-
如果您有非常大的数据,您可能希望在使用 bigint 而不是字符串作为主键时节省空间和周期。就像@Brad 说的那样,在显示它们之前以某种方式散列它们。如果您使用 uuids 作为 PK,您将失去范围查询、按查询排序和范围分区(分片、...)的效率
-
@hugo_leonardo,看看 Dan 的回答。他的回答正是我的建议。您不存储这些值......它们仅用于显示。您在数据库中存储的是顺序 ID。
标签: php unique uniqueidentifier