gpt4 book ai didi

Java/SQL 创建自定义序列/基于两个序列创建序列

转载 作者:行者123 更新时间:2023-12-02 04:58:24 25 4
gpt4 key购买 nike

我需要创建一个唯一的循环序列,它是两个单独序列的串联。

序列 1 范围为 - 1001 到 1040序列 2 范围为 - 220 到 240

生成序列的逻辑是首先递增序列 2,保持序列 1 不变。一旦序列2达到240,就需要增加序列1。

顺序如下:-

1001-2201001-2211001-222........1001-2401002-2201002-2211002-222................1040-2401001-220

如果只有一个进程/JVM 需要这种排序,那么这非常简单,在这种情况下,我可以只使用两个静态变量并实现这一逻辑。

但是这些序列可以由位于不同 JVM 上的多个进程使用,因此需要是线程安全的。

我的下一个想法是对两者都使用 Oracle DB 序列。但是,由于来自不同系统的多个并行调用,这可能会丢失一些序列号。

有更好的方法吗?

最佳答案

首先,您的两个序列可以轻松映射到简单的整数序列,即:

 1 -> 1001-220
2 -> 1001-221
etc.

要计算给定任何整数值的两个值,请使用以下公式:

n -> TRUNC(1001+n/22) || '-' || (MOD(n-1,21)+220)

例如

26 -> TRUNC(1001+26/22) || '-' || (MOD(26-1,21)+220) -> 1002-224

其次,Oracle 中的序列永远不能保证无间隙;唯一的。要制作无缝序列生成器,您必须引入序列化,例如一把锁,以确保任何时候只有一个 session 可以获取下一个值。

关于Java/SQL 创建自定义序列/基于两个序列创建序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28535420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com