PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

@BatchSize là cách sử dụng thông minh hay ngu ngốc?

  1. Có, @BatchSize được dùng với các liên tưởng lười biếng.
  2. Hibernate vẫn sẽ thực thi nhiều câu lệnh trong hầu hết các trang web, ngay cả khi số lượng proxy / bộ sưu tập chưa được khởi tạo nhỏ hơn kích thước lô được chỉ định. Xem câu trả lời này để biết thêm chi tiết. Ngoài ra, nhiều truy vấn nhẹ hơn so với ít truy vấn lớn hơn có thể đóng góp tích cực vào thông lượng chung của hệ thống.
  3. @BatchSize ở cấp độ lớp có nghĩa là kích thước lô được chỉ định cho thực thể sẽ được áp dụng cho tất cả @*ToOne liên kết lười biếng với thực thể đó. Xem ví dụ với Person thực thể trong tài liệu.

Câu hỏi / câu trả lời được liên kết mà bạn cung cấp quan tâm nhiều hơn đến nhu cầu tối ưu hóa và tải chậm nói chung. Tất nhiên, chúng cũng áp dụng ở đây, nhưng chúng không chỉ liên quan đến tải hàng loạt, đây chỉ là một trong những cách tiếp cận khả thi.

Một điều quan trọng khác liên quan đến việc tải háo hức được đề cập trong các câu trả lời được liên kết và điều này cho thấy rằng nếu một thuộc tính luôn được sử dụng thì bạn có thể nhận được hiệu suất tốt hơn bằng cách sử dụng tải háo hức. Điều này nói chung không đúng cho các bộ sưu tập và trong nhiều trường hợp cho cả các liên kết với một.

Ví dụ:giả sử bạn có thực thể sau bscs luôn luôn được sử dụng khi A được sử dụng.

public class A {
  @OneToMany
  private Collection<B> bs;

  @OneToMany
  private Collection<C> cs;
}

Đang háo hức tải bscs rõ ràng là gặp phải vấn đề lựa chọn N + 1 nếu bạn không kết hợp chúng trong một truy vấn duy nhất. Nhưng nếu bạn kết hợp chúng trong một truy vấn, chẳng hạn như:

select a from A
  left join fetch a.bs
  left join fetch a.cs

sau đó bạn tạo sản phẩm đầy đủ của Descartes giữa bscs và trả về count(a.bs) x count(a.cs) các hàng trong tập hợp kết quả cho mỗi a được đọc từng cái một và được tập hợp thành các thực thể của A và bộ sưu tập của họ về bscs .

Tìm nạp hàng loạt sẽ rất tối ưu trong trường hợp này, vì trước tiên bạn sẽ đọc A s, rồi đến bs rồi đến cs , dẫn đến nhiều truy vấn hơn nhưng với tổng lượng dữ liệu được chuyển từ cơ sở dữ liệu ít hơn nhiều. Ngoài ra, các truy vấn riêng biệt đơn giản hơn nhiều so với một truy vấn lớn với các phép nối và cơ sở dữ liệu dễ thực thi và tối ưu hóa hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động tăng trên một phần khóa chính với Entity Framework Core

  2. Cơ chế sao chép vật lý trong PostgreSQL

  3. Tại sao chuỗi id SQL không đồng bộ (cụ thể là sử dụng Postgres)?

  4. Một cách mới để cá nhân hóa việc giám sát PostgreSQL của bạn với Prometheus

  5. Kiểm tra Spring Data JPA không hoạt động đối với phương pháp cập nhật JpaRepository với chú thích @Modizing, tại sao?