多个数据库/服务器上的信息的ID

时间:2009-09-18 00:53:20

标签: database database-design auto-increment architecture

我正在开展一个项目,我希望从一开始就尽可能灵活,可扩展。我关注的一个问题是Joshua Schacter在工作中创建者中最好描述的一个问题,他将此作为他希望提前计划的一个细节。

  

扩展到一台计算机,即一个数据库,即使使用复制也非常具有挑战性。那些工具不太对。

     

例如,当您向表中添加内容并对其进行编号时,这意味着您不能再添加第二台计算机,因为这些数字会发生冲突。所以你会怎么做?你必须想出一些完全不同的方法。

     

你有一个中央服务器分发号码集,还是你想出一些不是数字的东西?你是否使用随机数并希望它们永远不会发生碰撞?无论是什么,自动分配的ID都不会飞。

这里有人遇到过这个问题吗?有什么方法可以超越自动递增的ID,还是有办法让它们与多个服务器一起扩展?

2 个答案:

答案 0 :(得分:2)

使用GUID / UUID(全球/通用唯一标识符)。从理论上讲,它保证在多台机器上都是独一无二的。

答案 1 :(得分:1)

GUID,你的碰撞几率是天文数字低。

也可以(我们称之为)SmartGUID(通常称为COMB GUIDS - 请参阅this analysis,特别是第7页),您可以在其中编码GUID中的时间戳,这样您就可以获得记录创建日期信息“免费” - 因此您可以为记录创建日期时间保存一个时间戳列 - 它可以获取从32位整数移动到128位GUID时丢失的一些内容。与常规GUID不同,这些也可以保证是单调的,这对于聚簇索引和排序非常有用。

您还可以将复合键与某种具有常规自动增量标识或自动编号的服务器/数据库ID一起使用。