在记录创建过程中,是否可以为多个用户提供连续的、有序的编号?[已结束]

Is it possible to have sequential, ordered numbers for multiple users during record creation? [closed]

提问人:WattMonki 提问时间:12/29/2021 最后编辑:WattMonki 更新时间:12/30/2021 访问量:131

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

1年前关闭。

一般来说,无论是在 Java 中还是在数据库设计中,是否有可能有一个记录,其中字段可以处于连续的、有序的数字中,彼此之间没有间隙?就像您有多个用户并且您都提交了表单一样,是否可以将记录按顺序标记为 1、2、3、4...n,并且没有间隙?

我知道我们在数据库设计中有一个序列,允许字段/列的唯一性,但是在多个用户并且没有序列化的情况下,仍然存在差距的风险。在Java或数据库设计中,有没有一些东西可以毫无间隙地合并序列?

这已经困扰了我几个月,我无法弄清楚。

Java 数据库 并发 服务器端 多用户

评论

2赞 RamblinRose 12/29/2021
理论上是的。一切皆有可能。但正如所提出的那样,这是一个非常广泛的问题,OP 将客户端和服务器的关注点混合在一起。发布代码尝试。
0赞 Basil Bourque 12/29/2021
如果重写以专注于一个场景,这可能是一个很好的问题。一般来说,在 Stack Overflow 上提出“一般”问题并不合适。

答:

1赞 The Impaler 12/29/2021 #1

当然可以,但这样的功能通常与交互式多用户/多线程应用程序的逻辑相冲突,理想情况下,交互式多用户/多线程应用程序会立即产生结果。如果这不是您的情况,那么一个简单的触发器就是解决方案。

另一方面,如果您需要立竿见影的结果,请继续阅读。您可能需要实现延迟过程,以有序的方式分配这些数字,而不是在表中插入每一行时以交互方式进行分配。例如,您可以将每个新数据插入记录在“待处理”表或队列中,以便进一步处理。

有很多选择,但在我的头顶上,你可以:

  • 在后台使用每 5 分钟运行一次的进程,并处理所有挂起的行。
  • 如果使用队列,则可以有一个反应式进程,该进程持续运行并等待行处理和分配编号,一次一个。
  • 如果可以选择,您甚至可以延迟夜间流程的所有号码分配。

为了获得更高的性能,您可以并行实现上述任何解决方案,即使能够在单独的硬件中,如果您能够以某种方式对数据进行分区。例如,所有以 (partition #1) 结尾的 ID 将由节点/进程 #1 处理,然后以 (partition #2) 结尾的 ID 可以由节点/进程 #2 处理,依此类推。01-0304-07

正如你所看到的,数据库中没有内置任何用于你的用例的东西,但是如果你能放宽一些限制,比如在5分钟的延迟下执行数字分配,就有很多很好的解决方案。

评论

0赞 Gilbert Le Blanc 12/29/2021
此外,如果要长时间保持序列,则永远无法删除行。但是,您可以使用布尔列将行标记为已删除。