Sql 在Node.js中插入多个ID递增的条目时重复密钥

Sql 在Node.js中插入多个ID递增的条目时重复密钥,sql,node.js,duplicates,increment,hana,Sql,Node.js,Duplicates,Increment,Hana,最近我遇到了一个问题。我会尽量把它描述得既好又简单 在BEFORE INSERT处理程序中,我只获取主体,对于id的生成,我从DB中已经存在的条目中获取下一个可用数字除以10,然后将其分配给正在插入的新条目 问题是,当我试图进行批处理并同时执行多个请求时,它会失败,并出现重复密钥错误 我在插入之前将HanaDB,node.js与cds自定义处理程序一起使用,但就我所看到的而言,这个问题与我使用的任何技术都没有特别的关系 有人知道我如何避免这种情况,但仍然保留递增ID的逻辑吗? (据我所知,我只能

最近我遇到了一个问题。我会尽量把它描述得既好又简单

在BEFORE INSERT处理程序中,我只获取主体,对于id的生成,我从DB中已经存在的条目中获取下一个可用数字除以10,然后将其分配给正在插入的新条目

问题是,当我试图进行批处理并同时执行多个请求时,它会失败,并出现重复密钥错误

我在插入之前将HanaDB,node.js与cds自定义处理程序一起使用,但就我所看到的而言,这个问题与我使用的任何技术都没有特别的关系

有人知道我如何避免这种情况,但仍然保留递增ID的逻辑吗? (据我所知,我只能访问BEFORE INSERT处理程序)

假设我有一个UserItems表,其中有一个条目。(由用户和项目组成的主键)

现在我想同时添加两个以上的用户项,因此输出如下:

USER    ITEM    DESCRIPTION

1001    10      nice description
1001    20      nice description 2
1001    30      nice description 3
但是,由于这是通过一个自定义处理程序(中间件)实现的,该处理程序获取下一个可用数字除以10(20,然后再除以30),并且由于请求是并行进行的,因此它会抛出重复密钥错误

基本上,中间件查看现有数据,它获取id 20,插入一个条目,但是当第三个用户项的另一个请求到来时,当代码在数据库中查找以获取另一个id时,它将只看到一个条目

1001    10      nice description

并且也将获得下一个可用的id 20,但它不正常,因为它将被分配到上一个条目。

这似乎是手动生成id的经典问题。 避免此类问题的一种行之有效的方法是使用自动生成的键/序列或使用guid

试图保证共享数据结构(数据库表)中的有序和无间隙序列需要某种形式的锁定。 这使得它成为处理应用程序中插入内容的瓶颈

所提到的序列工作锁更少,并且只保证唯一的、递增的数字,但这些数字不会更少。 如果应用程序中的ID除了唯一性之外没有固有的意义,那么使用序列是最简单的方法


当然,你的观点是正确的,这与你使用的科技产品无关。此问题是此处使用的事务模型的直接后果。

示例数据、所需结果和适当的数据库标记都有助于您的解释。
1001    10      nice description