我google了很多,发现许多人说allocationSize
在After 'allocationSize' is reached, the next id will be retrieved from the database sequence again
意味着'https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/seq-generator.html'。
这意味着jpa文件。
The amount to increment by when allocating sequence numbers from the sequence
它似乎与sql中的'increment by'相同。
哪一个是对的?由于我在h2 / jpa中测试过,这个allocationSize不起作用,即使它设置为20,序列的下一个值也不会增加20。
我也对sql中的'cache'感到困惑。
总之,以下为例。
CREATE SEQUENCE ITEM_ID_SEQ START WITH 1 INCREMENT BY 100 cache 30;
INCREMENT BY 100,缓存30和jpa的allocationSize有什么区别。
谢谢。
这里是配置值的简短说明:
allocationSize
为了最小化到数据库服务器的往返,ID将按组分配。每个分配中的ID数由allocationSize属性指定。
可能不会使用给定分配中的某些ID。因此,该策略不保证序列值不会有间隙。
默认值为50。
增量
指定序列号之间的间隔。
此整数值可以是任何正整数或负整数,但不能为0。
如果此值为负,则序列下降。如果值为正,则序列上升。如果省略此子句,则间隔默认为1。
CACHE
指定数据库预分配的序列值的数量,并保留在内存中以便更快地访问。
如果发生系统故障,则所有未在已提交的DML语句中使用的高速缓存序列值都将丢失。潜在的丢失值数等于CACHE参数的值。
结论
allocationSize和INCREMENT BY必须具有相同的值。数字越大,数据库往返越少。
缓存是数据库性能优化,不适用于所有数据库类型。