Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menstrim Set Keputusan MySQL Besar dengan Cekap pada Musim Bunga untuk Mengelakkan OutOfMemoryErrors?

Bagaimanakah Saya Boleh Menstrim Set Keputusan MySQL Besar dengan Cekap pada Musim Bunga untuk Mengelakkan OutOfMemoryErrors?

DDD
DDDasal
2024-11-30 04:19:12282semak imbas

How Can I Efficiently Stream Large MySQL Result Sets in Spring to Avoid OutOfMemoryErrors?

Menstrim Keputusan MySQL Besar dengan Cekap

Dalam konteks membangunkan aplikasi Spring, mendapatkan semula data daripada jadual MySQL yang besar boleh menimbulkan cabaran yang menggerunkan, berpotensi membawa kepada OutOfMemoryExceptions. Ini kerana kelakuan lalai pemacu MySQL JDBC adalah untuk memuatkan keseluruhan keputusan yang ditetapkan ke dalam memori.

Menetapkan Saiz Ambilan: Satu Ukuran Tidak Mencukupi

Untuk mengurangkan isu ini , pembangun selalunya memilih untuk menetapkan saiz pengambilan menggunakan kaedah statement.setFetchSize(Integer.MIN_VALUE). Walau bagaimanapun, ini sahaja bukan penyelesaian yang komprehensif. Seperti yang dinyatakan dalam dokumentasi Statement#setFetchSize(), saiz pengambilan hanya memberikan petunjuk kepada pemandu, yang mungkin atau mungkin tidak dihormati.

Melawat semula Dokumentasi JDBC MySQL

Menyelidiki dengan lebih mendalam dokumentasi pemacu MySQL JDBC mendedahkan pendekatan yang lebih bernuansa untuk menstrim hasil yang besar. Untuk mendayakan penstriman, pernyataan mesti dibuat seperti berikut:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

Kaveat Penstriman

Melaksanakan pendekatan ini disertakan dengan kaveat tertentu:

  1. Pemprosesan Baris: Adalah penting untuk memproses semua baris dalam set hasil atau tutup ia dengan segera. Kegagalan berbuat demikian akan mengakibatkan pengecualian dilemparkan apabila melaksanakan pertanyaan berikutnya pada sambungan.
  2. Penyelesaian Transaksi: Jika penyata milik transaksi, kunci akan dikeluarkan hanya apabila kedua-dua transaksi dan penyata adalah lengkap. Ini bermakna membaca semua keputusan atau menutup set keputusan adalah perlu.

Fikirkan Semula Peruntukan Memori

Jika menetapkan saiz pengambilan dan tweak penciptaan pernyataan, jangan selesaikan OutOfMemoryError, punca utama mungkin terletak pada penyimpanan data dalam memori Java. Daripada meng-cache keseluruhan set hasil, pertimbangkan untuk memprosesnya dengan segera apabila ia tersedia. Ini mungkin memerlukan pengubahsuaian kod yang banyak, yang mungkin melibatkan penulisan semula yang lengkap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Set Keputusan MySQL Besar dengan Cekap pada Musim Bunga untuk Mengelakkan OutOfMemoryErrors?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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