私は多くのことを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のパフォーマンスの最適化であり、すべてのデータベース・タイプでは使用できません。