我试图理解为什么auto-increment pattern is bad when scaling。
我也读过this article。其中有这样的词:
我试图找出在分片中_id
重复的确切情况。
还有一个问题:非主要键的自动增量怎么办?这样安全吗?
非常感谢!
答案 0 :(得分:3)
为了保证自动增量值是唯一的,ID创建必须在单个主机上的单个线程上进行(即使使用多个线程,ID创建点必须阻止其他线程)。因此,在100个服务器的集群中,必须在100个服务器中的1个线程上的1个线程上创建ID。这不仅仅是一个性能瓶颈,2个自动增量ID的创建可能会相互阻塞,这就是您引用的引文中提到的竞争条件。
应该注意的是,像Oracle和SQL Server这样的事务性RDBMS系统已经解决了竞争条件问题,但是没有解决性能瓶颈的问题。
所以:不,如果您预计需要扩展系统,请不要在非主键中使用自动增量。