SequenceGenerator.allocationSize @ JPAは何を意味するのでしょうか?

疑惑はターン:

私は多くのことを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の「増分量」と同じであるようです。

どちらが正しいのですか?仕事、でもそれは20に設定していない私はH2 / JPAでテストしているので、このallocationSizeはない、シーケンスの次の値が20増加しません。

私はまた、SQLの「キャッシュ」について混乱します。

要約すると、例えば以下取ります。

CREATE SEQUENCE ITEM_ID_SEQ START WITH 1 INCREMENT BY 100 cache 30;

違い何百BY INCREMENTキャッシュ30、およびJPAのallocationSizeが

感謝します。

サイモン・マルティネリ:

設定値の簡単な説明をここに:

allocationSize

データベースサーバーへのラウンドトリップを最小限にするために、IDがグループに割り当てられています。各配分のIDの数はallocationSize属性によって指定されます。

与えられた配分のIDの一部が使用できない可能性があります。したがって、この戦略は、シーケンス値にギャップが生じない保証するものではありません。

デフォルトは50です。

INCREMENT BY

シーケンス番号の間隔を指定します。

この整数値は、任意の正または負の整数であることができるが、それは0にすることはできません。

この値が負の場合、シーケンスは下降します。値が正であれば、シーケンスが上昇。1にこの句を省略した場合、間隔はデフォルト。

キャッシュ

データベース事前に割り当てシーケンスのどのように多くの値を指定し、より高速なアクセスのためにメモリに保持します。

システム障害が発生した場合、コミットさDML文で使用されていないキャッシュ済みシーケンス値はすべて失われます。失われた値の潜在的な数は、CACHEパラメータの値に等しいです。

結論

allocationSizeとINCREMENT BYが同じ値を持つ必要があります。より多くの数は、データベースのラウンドトリップが減少します。

キャッシュは、DBのパフォーマンスの最適化であり、すべてのデータベース・タイプでは使用できません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=202015&siteId=1