PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

@BatchSize penggunaan yang cerdas atau bodoh?

  1. Ya, @BatchSize dimaksudkan untuk digunakan dengan asosiasi malas.
  2. Hibernate akan tetap mengeksekusi beberapa pernyataan di sebagian besar situasi, meskipun jumlah proxy/koleksi yang tidak diinisialisasi kurang dari ukuran batch yang ditentukan. Lihat jawaban ini untuk lebih jelasnya. Selain itu, kueri yang lebih ringan dibandingkan dengan kueri yang lebih kecil dapat berkontribusi positif pada throughput sistem secara keseluruhan.
  3. @BatchSize pada tingkat kelas berarti ukuran batch yang ditentukan untuk entitas akan diterapkan untuk semua @*ToOne asosiasi malas dengan entitas itu. Lihat contoh dengan Person entitas dalam dokumentasi.

Pertanyaan/jawaban tertaut yang Anda berikan lebih memperhatikan kebutuhan pengoptimalan dan pemuatan lambat secara umum. Mereka berlaku di sini juga tentu saja, tetapi mereka tidak terkait dengan pemuatan batch saja, yang merupakan salah satu pendekatan yang mungkin.

Hal penting lainnya berkaitan dengan pemuatan bersemangat yang disebutkan dalam jawaban tertaut dan yang menunjukkan bahwa jika properti selalu digunakan maka Anda mungkin mendapatkan kinerja yang lebih baik dengan menggunakan pemuatan bersemangat. Ini secara umum tidak benar untuk koleksi dan dalam banyak situasi untuk asosiasi satu-satu.

Misalnya, Anda memiliki entitas berikut yang bs dan cs adalah selalu digunakan saat A digunakan.

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

  @OneToMany
  private Collection<C> cs;
}

Memuat bs . dengan penuh semangat dan cs jelas menderita masalah pemilihan N+1 jika Anda tidak bergabung dengan mereka dalam satu kueri. Tetapi jika Anda menggabungkannya dalam satu kueri, misalnya seperti:

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

lalu Anda membuat produk Cartesian lengkap antara bs dan cs dan mengembalikan count(a.bs) x count(a.cs) baris dalam hasil yang ditetapkan untuk setiap a yang dibaca satu per satu dan dirangkai menjadi entitas A dan koleksi bs their mereka dan cs .

Pengambilan batch akan sangat optimal dalam situasi ini, karena Anda terlebih dahulu membaca A s, lalu bs lalu cs , menghasilkan lebih banyak kueri tetapi dengan jumlah total data yang ditransfer dari database jauh lebih sedikit. Selain itu, kueri terpisah jauh lebih sederhana daripada kueri besar dengan gabungan dan lebih mudah untuk dieksekusi dan dioptimalkan basis data.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql -bash:psql:perintah tidak ditemukan

  2. pgadmin4 :server aplikasi postgresql tidak dapat dihubungi.

  3. Postgres:mengonversi satu baris menjadi beberapa baris (unpivot)

  4. Menggunakan fungsi jendela dalam pernyataan pembaruan

  5. Bagaimana cara mengikat variabel SQL di PHP?