Menstrim Set Hasil Besar dengan MySQL
Apabila bekerja dengan jadual besar dalam MySQL, penggunaan sumber dan ralat memori yang berlebihan boleh timbul disebabkan oleh lalai tingkah laku pemandu JDBC memuatkan keseluruhan set hasil ke dalam ingatan. Untuk mengurangkan perkara ini, adalah penting untuk melaksanakan teknik yang betul untuk menstrim data dan bukannya memuatkannya sekaligus.
Pendekatan
Soalan yang disediakan mencadangkan penggunaan statement.setFetchSize(Integer .MIN_VALUE); untuk mengehadkan pemuatan data, tetapi ini sahaja tidak mencukupi. Menurut dokumentasi pemacu MySQL JDBC, menetapkan keputusan yang ditetapkan kepada TYPE_FORWARD_ONLY dan CONCUR_READ_ONLY diperlukan untuk penstriman yang berkesan:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendekatan ini mempunyai potensi kelemahan:
Pertimbangan Lanjut
Jika menetapkan keputusan yang ditetapkan sebagai TYPE_FORWARD_ONLY dan CONCUR_READ_ONLY tidak menyelesaikan masalah ingatan, punca asas mungkin menjadi storan data dalam ingatan Java sebelum ia diproses. Untuk menangani perkara ini, pemprosesan segera data semasa ia masuk diperlukan, yang mungkin melibatkan pengubahsuaian kod yang ketara. Untuk mendapatkan maklumat lanjut, rujuk pautan yang disediakan dalam jawapan, yang menangani isu yang sama.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Set Keputusan MySQL Besar dengan Cekap untuk Mengelakkan Ralat Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!