自动增量如何在数据库内部工作?

时间:2016-02-20 20:51:40

标签: database distributed

我理解如何使用auto_increment,但它是如何在内部工作的? 我想到了不同场景中的情侣问题:

  1. 对于单节点数据库,是否使用互斥锁来锁定整个表,同时递增计数器并将值分配给一行,以防止竞争条件?这样做不是性能问题吗?如果没有,当多个请求同时进入时,它如何保证生成唯一ID?

  2. 对于复制的数据库,主 - 主服务器或主 - 从服务器,将自动增量ID的所有副本上的整个数据库表锁定是没有意义的,是吗? / p>

  3. 对于分发的数据库(例如Cassandra),实际上不可能有自动增量功能,是吗?因为DB正在为快速WRITE独立工作。

  4. 您如何设计支持auto_increment的分布式系统?

1 个答案:

答案 0 :(得分:3)

对于MS SQL Server,服务器在内存中缓存许多IDENTITY值,这些值通过插入记录来消耗(参见TechNet article)。

在复制方案中,MS SQL Server要求GUID用作主键,因此此处不会自动增加。不过,你仍然可以使用SEQUENCE来进行(额外的)自动增量。

请注意,IDENTITY(即自动增量)和SEQUENCE均不保证连续数字。