Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memproses 90 Juta Rekod dengan Cekap dengan Hibernate Tanpa Kehabisan Memori?

Bagaimanakah Saya Boleh Memproses 90 Juta Rekod dengan Cekap dengan Hibernate Tanpa Kehabisan Memori?

Susan Sarandon
Lepaskan: 2024-12-03 16:34:12
asal
264 orang telah melayarinya

How Can I Efficiently Process 90 Million Records with Hibernate Without Running Out of Memory?

Menggunakan Hibernate's ScrollableResults untuk Membaca 90 Juta Rekod Secara Berperingkat

Antaramuka ScrollableResults Hibernate menyediakan cara untuk mengulangi hasil pertanyaan tanpa memuatkan keseluruhan keputusan yang ditetapkan ke dalam memori. Walau bagaimanapun, seperti yang ditonjolkan oleh soalan ini, menggunakan ScrollableResults dengan bilangan rekod yang banyak boleh membawa kepada isu memori jika pemacu MySQL Connector/J digunakan.

Dalam kes sedemikian, satu-satunya pilihan praktikal adalah untuk mengulangi hasil carian. dalam kelompok menggunakan kaedah setFirstResult dan setMaxResults. Walaupun pendekatan ini mungkin kelihatan tidak cekap, terutamanya apabila menangani offset yang besar, ia adalah cara yang paling boleh dipercayai untuk mengelakkan masalah ingatan.

Sebaik-baiknya, sesi tanpa kewarganegaraan harus digunakan untuk mengelakkan sebarang caching peringkat sesi atau isu penjejakan kotor .

Satu lagi potensi pengoptimuman ialah menggunakan medan id sebagai lajur terakhir indeks dan mengubah suai pertanyaan untuk mendapatkan sekumpulan rekod pada satu masa, menggunakan id tertinggi kumpulan sebelumnya sebagai titik permulaan. Ini boleh meningkatkan prestasi jika syarat_lain dalam pertanyaan menggunakan syarat kesamarataan.

Dengan mengubah suai pertanyaan seperti berikut:

select * 
from person 
where id > <max_id_of_last_batch> and <other_conditions> 
order by id asc  
limit <batch_size>
Salin selepas log masuk

anda boleh mengelakkan prestasi yang dicetuskan disebabkan oleh memuatkan offset yang besar dan mencapai lebih banyak proses lelaran yang cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memproses 90 Juta Rekod dengan Cekap dengan Hibernate Tanpa Kehabisan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan