ページ分割と限界突破
1959 ワード
ページ分割と限界突破
🙋‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
パッチチェックインセットは、1対以上のチェックインを生成し、データの増加を予知できません.
1対多のうち1(1)を基準としてページングを行うことを目的とする.しかし,データはマルチ(N)を基準にrowを生成する.
Orderを基準にページングしたいのですが、マルチ(N)OrderItemにチェックインするとOrderItemが基準になります.この場合、仮想機会は警告ログを残し、すべてのデータベースデータを読み取り、メモリからページを分割しようとします.最悪の場合、障害を引き起こす可能性があります.
きょくげんを突破する
では、ページング+コレクションエンティティを同時に表示するにはどうすればいいのでしょうか.
ほとんどのページング+集合エンティティクエリーの問題は、この方法で解決できます.
まず、ToOne(OneToOne,ManyToOne)関係をすべてパッチします.ここで、ToOne関係では行数は増加しないため、ページングクエリには影響しません.
コレクションは、遅延ロードでクエリーされます.
遅延負荷性能を最適化するために、
hibernate.defalut_batch_fetch_size
、@BatchSize
が採用される.spring:
jpa:
properties:
hibernate:
default_batch_fetch_size: 1000
個別に設定したい場合は、@BatchSize
を使用できます.(集合は集合フィールドに適用され、エンティティはエンティティークラスに適用されます)長所
1+N
->1+1
に最適化される.default_batch_fetch_size
のサイズは適切なサイズを選択し、100~1000のサイズを選択することをお勧めします.このポリシーはSQL INセクションを使用し、データベースに基づいてINセクションパラメータを1000に制限します.1000に設定すると、1回に1000個のアプリケーションがデータベースからデータベースにロードされ、データベースの瞬時負荷が増加する可能性があります.ただし、100でも1000でも、アプリケーションは最終的にデータ全体をロードする必要があるため、メモリの使用量は同じです.1000に設定することはパフォーマンス上最高ですが、DBでもアプリケーションでも、負荷がどの程度耐えられるかを一瞬で決めることができます.n/a.結論
ToOne関係は、ページに影響を与えません.したがって、ToOne関係は、パッチアシスタントによってクエリの数を減らすことによって解決され、残りの最適化は
hibernate.default_batch_fetch_size
である.Reference
この問題について(ページ分割と限界突破), 我々は、より多くの情報をここで見つけました https://velog.io/@hoyun7443/페이징과-한계-돌파テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol