|
|
1
5
可能有点离题,但请看一下 Twitter's snowflake . 他们说是:
更不用说其他功能(HA等)。你要么刻划他们的算法,要么就按原样使用它。 整个uid最多只占用64位空间,因此我想索引是非常有效的-请参阅 http://www.mysqlperformanceblog.com/2006/10/03/long-primary-key-for-innodb-tables/ (反例)。 |
|
|
2
3
我认为你可能需要更具体地说明你要解决的问题(实际问题是什么-为什么不自动增加?,您建议的模式是什么?等等)。 要回答您的内部问题:
不按顺序插入的风险至少有两倍:
所以,我认为只要您大致是连续的,那么至少(1)不需要考虑主键索引(对于任何唯一索引都可能是这样)。你只需要担心(2)。 我为什么说理解这个问题很重要,是除了长相外还有很多方法可以做到这一点。例如,MySQL中的bigint比您可能使用的任何数据类型都要小,但其范围为18 Quintillion。您可以一次为工作节点分配N千个密钥空间的“块”,并保证不重复。如果一个工作节点崩溃,并且没有使用它分配的所有块,那又是什么呢?没关系。 |
|
|
3
2
|
|
|
4
1
我要做的是使用一个固定宽度的字符字段,并将一个随机的UUID字符串垂直于当前时间(毫秒)。这很好,因为即使您的服务器在同一毫秒内被访问两次,它仍然(可能)是唯一的。我想如果你有 大量的 服务器加载这可能会提供多个ID,但如果担心这一点,您可以检查是否已经创建了具有此UUID的行。 PHP:
这是我在(很少使用)服务器上使用的。但对于更大的负载来说,它应该能够承受更大的负载。如我所说,为了克服创建两个相同的键的微小可能性,请检查它是否已被使用,并分配一个新的键。(这种情况不应该太频繁) |