ページ分割と限界突破

1959 ワード

ページ分割と限界突破


🙋‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐


パッチチェックインセットは、1対以上のチェックインを生成し、データの増加を予知できません.
1対多のうち1(1)を基準としてページングを行うことを目的とする.しかし,データはマルチ(N)を基準にrowを生成する.
Orderを基準にページングしたいのですが、マルチ(N)OrderItemにチェックインするとOrderItemが基準になります.この場合、仮想機会は警告ログを残し、すべてのデータベースデータを読み取り、メモリからページを分割しようとします.最悪の場合、障害を引き起こす可能性があります.

きょくげんを突破する


では、ページング+コレクションエンティティを同時に表示するにはどうすればいいのでしょうか.
ほとんどのページング+集合エンティティクエリーの問題は、この方法で解決できます.
まず、ToOne(OneToOne,ManyToOne)関係をすべてパッチします.ここで、ToOne関係では行数は増加しないため、ページングクエリには影響しません.
コレクションは、遅延ロードでクエリーされます.
遅延負荷性能を最適化するために、hibernate.defalut_batch_fetch_size@BatchSizeが採用される.
  • hibernate.defalut batch fetch size:グローバル設定
  • @BaschSize:独立最適化
  • このオプションを使用して、コレクションまたはプロキシオブジェクトが一度に設定したサイズに従って、INクエリーを使用してクエリーを行います.
    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である.