我一直在搜索,但我找不到任何关于此的信息。
stackoverflow或facebook如何在那里生成BIGINT id?它们在所有表格中始终是唯一的。
例如:
id | table
1 user table
2 photo table
3 feed table
4 user table <... next was 4 and not 2
这是否有任何文件?我认为不会有两个插入来保存每个表类型的记录,然后将id分配给表,因为这会减慢插入过程,对性能也是如此。
还有其他例子可供使用:
https://www.percona.com/blog/2008/04/02/stored-function-to-generate-sequences/ http://devzone.zend.com/1786/mysql-sequence-generator/
答案 0 :(得分:0)
如果你需要一个全局bigint作为所有表的pk,你可能需要一个单独的表来存储pk?
并首先在此表中插入记录以获取bigint,然后插入到成员表中。
然而,在第二个想法中,这样做的好处是什么?
如果您真的希望这种情况发生,可以采用以下简单的解决方案:
对你的表进行一般性研究,他们的成长速度有多快,然后为他们分配bigint,例如:
user_table 1,000,000 - 1,999,999 photo_table 2,000,000 - 2,999,999 ...
当bigint接近耗尽时,只需在表中插入一个新的空白行就可以为它们分配一个新的范围,bigint将从新的bigint值中自动增加1
答案 1 :(得分:0)
通常你没有。而且不想。当你说stackoverflow和facebook生成的id在所有表中始终是唯一的时,你就会做出一个假设。这是一个不正确的假设。仅仅因为一个id用于users表并不意味着相同的数字不能用于问题表中完全不相关的问题id。 id在它们自己的表的上下文中是唯一的,但它们并不强制它在每个表中都是唯一的。
案例:question 771743和user 771743具有相同的ID,但不相关。