我理解如何使用auto_increment,但它是如何在内部工作的? 我想到了不同场景中的情侣问题:
对于单节点数据库,是否使用互斥锁来锁定整个表,同时递增计数器并将值分配给一行,以防止竞争条件?这样做不是性能问题吗?如果没有,当多个请求同时进入时,它如何保证生成唯一ID?
对于复制的数据库,主 - 主服务器或主 - 从服务器,将自动增量ID的所有副本上的整个数据库表锁定是没有意义的,是吗? / p>
对于分发的数据库(例如Cassandra),实际上不可能有自动增量功能,是吗?因为DB正在为快速WRITE独立工作。
您如何设计支持auto_increment的分布式系统?
答案 0 :(得分:3)
对于MS SQL Server,服务器在内存中缓存许多IDENTITY
值,这些值通过插入记录来消耗(参见TechNet article)。
在复制方案中,MS SQL Server要求GUID
用作主键,因此此处不会自动增加。不过,你仍然可以使用SEQUENCE
来进行(额外的)自动增量。
请注意,IDENTITY
(即自动增量)和SEQUENCE
均不保证连续数字。