php - 如何生成唯一的仅整数 ID,如 Facebook Twitter

标签 php mysql facebook unique

在搜索 SO 和其他网站后,我未能找到关于 Facebook、Twitter 和 Pinterest 如何生成其 ID 的确凿证据。需要这样做的原因是为了避免 url 冲突。移动到一个完全不同的 ID 将防止这种情况发生,因为不会有千万亿条记录。

  • Facebook.com/username/posts/362095193814294
  • Pinterest.com/pin/62487513549577588
  • Twitter.com/#!/username/status/17994686627061761

如果您以 Pinterest 为例,前几位数字与用户 ID 相关,后 6 位左右的数字表示可能是自动递增的保存 ID。

要创建一个类似但不是唯一的 ID,我可以使用:base_convert(user_id.save_id, 16, 10)。这里的问题是它不是唯一的,例如:base_convert(15.211, 16, 10) vs. base_convert(152.11, 16, 10)。这两个是一样的。简单地合并两组唯一的数字仍然会产生重复的结果。将 uniqid() 加入混合中将基本上修复重复项,但这似乎不是一个好习惯。

更新:Twitter 似乎使用了这个:https://github.com/twitter/snowflake

对生成上述示例的唯一 ID 有何建议?

最佳答案

假设您的 ID 都是数字。用字符 A 分隔它们(因为它肯定不会出现在原始 ID 中)并进行从 base-11 到 base-10 的基本转换。

对于您所做的示例,我们现在得到了不同的结果:

echo base_convert("15A211", 11, 10); //247820
echo base_convert("152A11", 11, 10); //238140

关于php - 如何生成唯一的仅整数 ID,如 Facebook Twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301835/

相关文章:

选择地区时,PHP 从数据库中填充数据

php - 更新查询的问题

Facebook:在 Android 上刷新 AccessToken

Facebook 不允许发布照片 url,它指的是 Facebook 的服务器

java - Facebook open graph get 'me' 有效,但 'me?fields=name' 返回 oAuth 错误

php - CDBCriteria 联接不返回所选的第二个和第三个表的数据

php - 每次在 CodeIgniter 中加载页面时运行一个函数

php - 在特定时间从数据库中删除一行

php - 简写 IF/ELSE 条件 PHP - 我做错了什么?

php - Yii2 访问连接表列