Mengulangi Jadual MySQL Besar dengan Cekap dengan SQLAlchemy
Apabila mengendalikan set data yang besar, kecekapan memori adalah yang terpenting. Ini adalah benar terutamanya untuk pertanyaan pada subset besar jadual, yang berpotensi menghabiskan sumber memori walaupun semasa menggunakan penjana terbina dalam SQLAlchemy.
Walaupun andaian bahawa penjana terbina dalam bijak mengambil sebahagian daripada data yang boleh diurus, sesetengah pengguna mungkin mengalami masalah ingatan. Untuk menangani perkara ini, mereka menggunakan iterator yang melaksanakan secara manual yang mengambil data dalam kelompok yang lebih kecil.
Walau bagaimanapun, tingkah laku ini tidak tipikal. Sebab penggunaan memori yang berlebihan terletak pada pelaksanaan asas kebanyakan modul DBAPI. Mereka cenderung untuk menimbal sepenuhnya baris semasa ia diambil, menyebabkan keseluruhan set hasil disimpan dalam memori sebelum ia mencapai SQLAlchemy ORM.
Menggabungkan isu ini ialah tingkah laku lalai SQLAlchemy Query yang memuatkan set hasil sepenuhnya sebelum dikembalikan objek kepada pengguna. Walaupun pendekatan ini diperlukan untuk pertanyaan kompleks yang melibatkan penyambungan dan pemuatan yang tidak sabar-sabar, ia boleh menjadi masalah untuk set data yang besar di mana penggunaan memori menjadi kebimbangan.
Untuk mengurangkan isu ingatan ini, SQLAlchemy menyediakan pilihan yang dipanggil yield_per(), yang membolehkan pengguna mengawal saiz kelompok di mana baris dihasilkan. Walau bagaimanapun, pendekatan ini hanya sesuai untuk pertanyaan mudah tanpa sebarang pemuatan yang bersemangat. Selain itu, ia mungkin tidak dapat mengurangkan sepenuhnya kebimbangan ingatan jika DBAPI yang mendasari masih menimpan baris.
Pendekatan alternatif yang menskalakan lebih baik ialah menggunakan penomboran berasaskan fungsi tetingkap. Teknik ini melibatkan mengenal pasti nilai "tetingkap" yang mewakili ketulan jadual yang akan dipilih. Dengan mengeluarkan pernyataan SELECT berasingan untuk setiap tetingkap, pengguna boleh mengambil data dalam kelompok yang lebih terurus.
Pendekatan fungsi tetingkap amat berfaedah kerana ia mengelakkan kemerosotan prestasi yang disebabkan oleh nilai OFFSET yang besar dalam pertanyaan LIMIT. Ia disokong oleh pangkalan data seperti PostgreSQL, Oracle, dan SQL Server.
Dengan menggunakan teknik ini, pembangun boleh mengulangi jadual MySQL yang besar dengan cekap, mencapai kecekapan memori dan pengoptimuman prestasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi Jadual MySQL yang Besar dengan SQLAlchemy dengan Cekap untuk Mengelakkan Isu Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!