在我们的app中,每当我们创建一个新实体时,我们都会调用Oracle来获取实体id的下一个序列。 我们正在使用OracleSequenceMaxValueIncrementer。
但是我们希望减少对oracle的调用次数。
我正在考虑增加序列表上的“Incremented By”值。现在它是1。 因此,如果我们将增加到10,我们可以每10次调用oracle,而不是每次我们需要一个新的序列。 我希望使用OracleSequenceMaxValueIncrementer在代码中获取“Incremented by”值,但它不支持它,因此需要执行常规查询。
这是一个常见的解决方案吗,我猜常见问题?
其他信息: 我们用于获取下一个序列的服务被所有实体使用,其中对于每个人,存在可以具有不同“递增”的不同序列表。这就是为什么我写的我将首先查询数据库以检索特定实体的“递增”。
答案 0 :(得分:1)
您可以缓存序列,这将保留内存中每个会话的序列号,用于避免争用。
ALTER SEQUENCE customers_seq
CACHE 5;
<强> CACHE 强> 指定数据库预分配的序列值的数量,并保留在内存中以便更快地访问。该整数值可以有28个或更少的数字。此参数的最小值为2.对于循环的序列,此值必须小于循环中的值的数量。您不能缓存超过给定循环序列号的值。因此,CACHE允许的最大值必须小于由以下公式确定的值:
<强>参考:强> https://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314