我正在编写一个将部署在 n 个节点上的应用程序。应用程序实体类使用 SEQUENCE 生成策略来生成主键。因为,会有批量插入;我们还将给出分配大小。
关注的是应用程序何时部署在 n 个节点上,以及两个节点是否同时从数据库中定义的序列请求下一个序列:
- 不会有任何竞争条件吗?
- 或者该序列是否也有一些轻量级锁定机制来按顺序服务请求,就像 IDENTITY 策略中发生的那样?
- 或者顺序不是解决这个问题的正确方法?
请帮忙。谢谢!
最佳答案
将 Sequence 视为一个表,其中有一列存储表示当前 id 的整数。每次插入新条目时,下一个操作都会在事务中发生:
- 读取 SEQUENCE 表中的当前值
- 该值将作为 ID 分配给新条目
- SEQUENCE 中的值递增
回答您的问题
- 并发问题由数据库解决。
- 由于插入发生在事务中(简单插入和批量插入),因此数据库引擎通过事务强制执行 ID 生成的一致性(更准确地说是通过事务的隔离级别)。确保您的数据库引擎支持事务。
- 假设您的数据库引擎支持事务,序列是正确的解决方案。
关于java - 数据库序列如何管理竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350858/