1

我知道这已经讨论过很多次了,我希望能针对我的具体情况得到建议。

我在一个社交网站上工作,理论上应该可以在 mysql 数据库中记录数十亿张照片。

我想知道将记录的唯一 BIGINT id 替换为像“oij43oj54oi52j43i”这样的字符串 id 是否是个好主意。

优点是:

  1. 我可以将照片记录插入到分布在多个服务器上的多个数据库中,这与 BIGINT id 不同,您需要在插入时等待并从 mysql 获取下一个行号。

  2. 如果是 /avatars/oij43oj54oi52j43i.jpg,则不太可能允许用户通过输入像 /avatars/120.jpg 这样的整数来随机访问图像。我知道第二部分也可以通过 URL 重写来完成,但会使用一些 CPU/内存。

其他表(如“photo_comments”)在引用照片时也可以使用相同的字符串 id,例如 photo_comment_photo_id='oij43oj54oi52j43i';

考虑到这些,使用字符串 ID 是不是一个坏主意?特别是对于我提到的第一个优势,这是一个有效的观点/优势/实践吗?

谢谢你。

编辑:确保字符串是唯一的可以通过将用户 ID 附加到字符串来完成,并且可能使用使用时间戳微秒的php uniqid() 。

4

1 回答 1

3

如果你正在构建这样的东西,你应该从 Instagram 获取一个页面并使用 UUID 而不是顺序 ID。这些有很多优点,但最大的一个是它们是可扩展的和可分片的。

大多数语言都有一个简单的 UUID 库,甚至 MySQL 也有一个 UUID 生成器,可以作为最后的手段。

Instagram 的版本不是纯粹的 UUID,而是一个 64 位版本的足够类似的东西。

基本上你应该在 Instagram 阅读这篇关于分片和 ID 的文章以获取灵感。

于 2012-07-30T17:54:50.273 回答