Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengambil 90 Juta Rekod dengan Cekap daripada MySQL Menggunakan Hibernate Tanpa Kehabisan Memori?

Bagaimanakah Saya Boleh Mengambil 90 Juta Rekod dengan Cekap daripada MySQL Menggunakan Hibernate Tanpa Kehabisan Memori?

DDD
Lepaskan: 2024-12-05 13:00:11
asal
593 orang telah melayarinya

How Can I Efficiently Fetch 90 Million Records from MySQL Using Hibernate Without Running Out of Memory?

Strategi Pengoptimuman untuk Membaca Set Hasil Besar dengan Hibernate

Artikel ini menangani cabaran membaca 90 juta rekod daripada pangkalan data MySQL menggunakan Hibernate tanpa melebihkan RAM.

ScrollableResults Had

Pada mulanya, pengguna cuba menggunakan Hibernate's ScrollableResults untuk menstrimkan hasil secara berperingkat. Walau bagaimanapun, pustaka MySQL Connector/J tidak menyediakan keupayaan menatal sebenar dan memuatkan keseluruhan set hasil ke dalam memori, membawa kepada pengecualian OutOfMemoryError.

setFirstResult/setMaxResults vs. ScrollableResults

Sebagai penyelesaian, pengguna mempertimbangkan untuk menggunakan setFirstResult dan setMaxResults untuk mengambil kumpulan hasil secara berulang. Walau bagaimanapun, pendekatan ini boleh menjadi tidak cekap, terutamanya untuk set hasil yang besar, disebabkan oleh overhed untuk memulakan pertanyaan baharu untuk setiap kelompok.

Pencapaian Kelompok Dioptimumkan menggunakan Native SQL

Penyelesaian paling optimum yang dicadangkan oleh responden adalah untuk keluar dari MySQL J/Connector dan menggunakan batching pertanyaan:

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

Pertanyaan ini mengambil kumpulan rekod berdasarkan ID maksimum yang ditentukan sebelum ini daripada kumpulan sebelumnya dan memesannya mengikut ID dalam tertib menaik. Parameter batch_size menentukan bilangan rekod untuk diambil pada satu masa. Pendekatan ini memastikan bahawa hanya bilangan rekod yang boleh diurus diproses dalam ingatan, mengelakkan keletihan memori.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengambil 90 Juta Rekod dengan Cekap daripada MySQL Menggunakan 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan