【发布时间】:2012-07-28 08:24:06
【问题描述】:
我知道这已经讨论过很多次了,我希望针对我的具体情况得到建议。
我在做一个社交网站,理论上应该可以在mysql数据库中记录数十亿张照片。
我想知道将记录的唯一 BIGINT id 替换为像“oij43oj54oi52j43i”这样的字符串 id 是否是个好主意。
优点是:
我可以将照片记录插入到分布在多个服务器上的多个数据库中,这与 BIGINT id 不同,在这种情况下,您需要等待并在插入时从 mysql 获取下一个行号。
如果是 /avatars/oij43oj54oi52j43i.jpg,则不太可能允许用户通过输入整数(如 /avatars/120.jpg)来随机访问图像。我知道这第二部分也可以通过 URL 重写来完成,但会使用一些 CPU/mem。
“photo_cmets”等其他表在引用照片时也可以使用相同的字符串 id,例如 photo_comment_photo_id='oij43oj54oi52j43i';
考虑到这些,使用字符串 ID 是不是一个坏主意?特别是对于我提到的第一个优势,这是一个有效的观点/优势/实践吗?
谢谢。
编辑:确保字符串的唯一性可以通过将用户 ID 附加到字符串来完成,并且可能使用使用时间戳微秒的 php uniqid()。
【问题讨论】:
-
您将如何确保 oij43oj54oi52j43i 是唯一值?自动增量值的设计是有原因的。不要试图模仿已经完美运行的东西,并坚持使用自动增量。
-
@Jocelyn 的唯一性可以通过将照片用户 ID 附加到 php uniqid() 来实现,我编辑了问题以包含此内容。对于用户 25,照片 ID 可能类似于 25oij43oj54oi52j43i
-
请记住,所有辅助键都使用主键,因此请保持您的主键尽可能小。 64 位 int 比 255 个字符的字符串更可取。