Memahami Lelaran Cekap Memori dalam SqlAlchemy
Apabila mengendalikan set data yang besar dalam MySQL menggunakan SqlAlchemy, penggunaan memori boleh menjadi kebimbangan. Sintaks penjana terbina dalam, seperti yang berikut, mungkin tidak cekap memori seperti yang dijangkakan:
for thing in session.query(Things): analyze(thing)
Penggunaan Memori Asas
Kebanyakan baris penampan pelaksanaan DBAPI semasa mereka diambil. Ini bermakna sebelum SqlAlchemy mendapatkan semula hasil pertama, keseluruhan set hasil mungkin berada dalam ingatan.
Gelagat Lalai Query
Objek Pertanyaan SqlAlchemy biasanya memuatkan keseluruhan set hasil ke dalam ingatan sebelum mengembalikan objek. Ini disebabkan oleh pertanyaan yang melibatkan pernyataan SELECT yang tidak remeh. Walau bagaimanapun, Query menawarkan pilihan "yield_per()" untuk mengubah suai tingkah laku ini.
yield_per()
Pilihan "yield_per()" menyebabkan Query menghasilkan baris dalam kelompok dengan saiz yang ditentukan. Ini boleh meningkatkan penggunaan memori, tetapi memerlukan berhati-hati. Ia hanya sesuai jika anda tidak melakukan apa-apa pemuatan koleksi yang bersemangat. Selain itu, jika baris pra-penampan DBAPI, penjimatan memori mungkin terhad.
Pendekatan Fungsi Tetingkap
Alternatif kepada "yield_per()" ialah menggunakan tetingkap pendekatan fungsi. Ini melibatkan pra-mengambil nilai "tetingkap" yang merujuk kepada ketulan jadual dan mengeluarkan pernyataan SELECT individu yang menarik dari tetingkap ini satu demi satu. Pendekatan ini membantu mengelakkan kemerosotan prestasi "LIMIT" dan "OFFSET" untuk ofset besar.
Kesimpulan
Walaupun penjana terbina dalam SqlAlchemy boleh menjadi mudah, ia mungkin tidak selalu memberikan kecekapan ingatan yang optimum. Memahami penggunaan memori yang mendasari dan menggunakan pendekatan alternatif seperti "yield_per()" atau fungsi tetingkap boleh membantu mengurangkan isu ingatan apabila bekerja dengan set data yang besar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulang Melalui Set Data Besar dalam SQLAlchemy Dengan Cekap Tanpa Penggunaan Memori Berlebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!