提问人:WattMonki 提问时间:12/29/2021 最后编辑:WattMonki 更新时间:12/30/2021 访问量:131
在记录创建过程中,是否可以为多个用户提供连续的、有序的编号?[已结束]
Is it possible to have sequential, ordered numbers for multiple users during record creation? [closed]
问:
一般来说,无论是在 Java 中还是在数据库设计中,是否有可能有一个记录,其中字段可以处于连续的、有序的数字中,彼此之间没有间隙?就像您有多个用户并且您都提交了表单一样,是否可以将记录按顺序标记为 1、2、3、4...n,并且没有间隙?
我知道我们在数据库设计中有一个序列,允许字段/列的唯一性,但是在多个用户并且没有序列化的情况下,仍然存在差距的风险。在Java或数据库设计中,有没有一些东西可以毫无间隙地合并序列?
这已经困扰了我几个月,我无法弄清楚。
答:
1赞
The Impaler
12/29/2021
#1
当然可以,但这样的功能通常与交互式多用户/多线程应用程序的逻辑相冲突,理想情况下,交互式多用户/多线程应用程序会立即产生结果。如果这不是您的情况,那么一个简单的触发器就是解决方案。
另一方面,如果您需要立竿见影的结果,请继续阅读。您可能需要实现延迟过程,以有序的方式分配这些数字,而不是在表中插入每一行时以交互方式进行分配。例如,您可以将每个新数据插入记录在“待处理”表或队列中,以便进一步处理。
有很多选择,但在我的头顶上,你可以:
- 在后台使用每 5 分钟运行一次的进程,并处理所有挂起的行。
- 如果使用队列,则可以有一个反应式进程,该进程持续运行并等待行处理和分配编号,一次一个。
- 如果可以选择,您甚至可以延迟夜间流程的所有号码分配。
为了获得更高的性能,您可以并行实现上述任何解决方案,即使能够在单独的硬件中,如果您能够以某种方式对数据进行分区。例如,所有以 (partition #1) 结尾的 ID 将由节点/进程 #1 处理,然后以 (partition #2) 结尾的 ID 可以由节点/进程 #2 处理,依此类推。01-03
04-07
正如你所看到的,数据库中没有内置任何用于你的用例的东西,但是如果你能放宽一些限制,比如在5分钟的延迟下执行数字分配,就有很多很好的解决方案。
评论
0赞
Gilbert Le Blanc
12/29/2021
此外,如果要长时间保持序列,则永远无法删除行。但是,您可以使用布尔列将行标记为已删除。
评论