Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menstrim Set Hasil Besar dengan Cekap daripada MySQL untuk Mengelakkan OutOfMemoryErrors?

Bagaimanakah Saya Boleh Menstrim Set Hasil Besar dengan Cekap daripada MySQL untuk Mengelakkan OutOfMemoryErrors?

Barbara Streisand
Barbara Streisandasal
2024-11-27 08:14:11646semak imbas

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

Menstrim Set Hasil Besar daripada MySQL

Mendapatkan semula set hasil besar daripada MySQL boleh mencabar, terutamanya jika memori aplikasi terhad. Isu ini sering dihadapi apabila pemacu JDBC cuba memuatkan keseluruhan jadual ke dalam memori, membawa kepada OutOfMemoryException.

Menggunakan setFetchSize()

Satu penyelesaian biasa untuk ini masalahnya ialah menggunakan kaedah setFetchSize() untuk mengehadkan bilangan baris yang diambil daripada pangkalan data. Walau bagaimanapun, pendekatan ini sahaja tidak selalu mencukupi, kerana pemacu MySQL JDBC memerlukan tetapan tambahan untuk mendayakan penstriman.

Mencipta Kenyataan Hadapan Sahaja, Baca Sahaja

Untuk mendayakan penstriman set hasil dalam MySQL, pernyataan perlu dibuat dengan tetapan berikut:

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

Tetapan Saiz Ambil

Setelah penyataan dibuat, kaedah setFetchSize() harus digunakan untuk memberi petunjuk kepada pemandu bahawa set hasil yang besar boleh diambil:

stmt.setFetchSize(Integer.MIN_VALUE);

Kaveat Penstriman

Adalah penting untuk menjadi mengetahui tentang had dan kaveat penstriman set hasil:

  • Seluruh set hasil mesti dibaca atau ditutup sebelum mengeluarkan sebarang pertanyaan lain pada sambungan yang sama.
  • Isu penguncian mungkin timbul jika penyata digunakan dalam urus niaga. Kunci dilepaskan hanya apabila transaksi selesai atau semua keputusan belum selesai dibaca atau set keputusan ditutup.

Pertimbangan Tambahan

Jika OutOfMemoryError berterusan walaupun menggunakan tetapan di atas, ia mungkin menunjukkan bahawa aplikasi tidak memproses data serta-merta apabila ia tersedia. Ini memerlukan penstrukturan semula kod untuk memproses data secara berperingkat-peringkat untuk mengelak daripada menyimpan keseluruhan hasil yang ditetapkan dalam ingatan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Set Hasil Besar dengan Cekap daripada MySQL 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