Menggunakan ScrollableResults untuk Mengendalikan Set Data Besar
Apabila bekerja dengan set data yang besar, mengoptimumkan pengambilan data menjadi penting. Dalam senario ini, menggunakan Hibernate's ScrollableResults untuk membaca 90 juta rekod pangkalan data boleh mengakibatkan kehabisan memori akibat percubaan memuatkan keseluruhan dataset ke dalam RAM.
Untuk mengelakkan ini, pendekatan yang disyorkan ialah menggunakan kaedah setFirstResult dan setMaxResults . Semasa mengulangi keputusan, kaedah ini membenarkan spesifikasi bahagian tertentu set data diambil pada satu masa, dengan berkesan mengelakkan kesesakan memori. Walau bagaimanapun, apabila offset meningkat, prestasi mungkin merosot.
Penyelesaian alternatif ialah menggunakan pendekatan pertanyaan SQL tersuai. Dengan mengambil subset data secara berperingkat berdasarkan offset yang semakin meningkat, anda boleh mengurangkan overhed memori. Templat pertanyaan berikut menunjukkan strategi ini:
SELECT * FROM person WHERE id > <offset> AND <other_conditions> ORDER BY id asc LIMIT <batch_size>
Pertanyaan ini mendapatkan semula kumpulan rekod dengan ID yang lebih besar daripada ofset yang ditentukan, menapis berdasarkan sebarang syarat tambahan. Sifat tambahan pendekatan ini memastikan pengambilan data yang cekap tanpa sumber memori yang melampau.
Selain itu, mengoptimumkan pertanyaan MySQL itu sendiri boleh meningkatkan prestasi. Menggunakan indeks yang sesuai dan memastikan keadaan yang dioptimumkan boleh mengurangkan masa pemprosesan dengan ketara, menjadikan kaedah ini penyelesaian yang berdaya maju untuk mengendalikan set data yang besar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan 90 Juta Rekod Pangkalan Data dengan Cekap Tanpa Keletihan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!