stw*_*ite 18 php mysql facebook unique
在搜索了SO和其他网站之后,我未能找到Facebook,Twitter和Pinterest如何生成ID的确凿证据.需要这样做的原因是为了避免网址冲突.移动到一个完全不同的ID将阻止这种情况,因为不会有数十亿的记录.
如果你以Pinterest为例,前几个数字与用户id有关,最后6个左右的数字代表save 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
Run Code Online (Sandbox Code Playgroud)
上面的 Flickr 评论非常有用。我们也使用分片。我们有一个 bigint (int64) 定位器字段。它是通过组合 int (int32) 数据库 ID 和 int (int32) 身份字段生成的。
如果您知道数据库最大值将为 int16(很有可能),则可以将 int16 (smallint) 数据库 ID 和 int32 (int) 用户 ID 以及 int16 (smallint) 操作 ID 组合起来。我不知道您的申请的合理数字。但是为数据库 ID 保留一些部分,即使它只是tinyint,这样您就知道如果您添加更多数据库,将来是安全的。
| 归档时间: |
|
| 查看次数: |
10985 次 |
| 最近记录: |