Concurrency dalam MySQL: Mengoptimumkan Pemilikan Tugasan dengan Satu Pertanyaan
Apabila berurusan dengan pelaksanaan tugas serentak dalam MySQL, adalah penting untuk menentukan pemilikan dengan cekap dan dapatkan semula parameter yang diperlukan untuk setiap tugas. Pendekatan tradisional melibatkan pertanyaan KEMASKINI dan PILIH yang berasingan, yang boleh membawa kepada keadaan perlumbaan. Artikel ini meneroka penyelesaian yang lebih optimum menggunakan pertanyaan tunggal untuk menyelesaikan kedua-dua tugasan.
Latar Belakang
Dalam sistem pengurusan tugas biasa, setiap tugasan diwakili oleh baris dalam jadual pangkalan data. Apl mengakses pangkalan data menggunakan API C asli MySQL, mengikut aliran kerja yang serupa dengan ini:
Jika pertanyaan SELECT mengembalikan baris, apl telah berjaya menuntut pemilikan tugas dan mendapatkan semula parameter yang diperlukan.
Pengoptimuman Pertanyaan Tunggal
Cabarannya terletak pada mengelakkan keadaan perlumbaan di mana berbilang apl cuba menuntut tugas yang sama secara serentak . Untuk menangani perkara ini, kami boleh memanfaatkan keupayaan KEMASKINI berbilang jadual MySQL.
<code class="sql">UPDATE `tasks` SET `guid` = (SELECT `id` FROM `history` ORDER BY `id` DESC LIMIT 1) WHERE `guid` = 0 LIMIT 1;</code>
Dalam pertanyaan ini, kami mula-mula mengenal pasti ID maksimum (pengecam unik) daripada jadual sejarah, yang menyimpan rekod semua tugasan sebelumnya cubaan mendakwa. Kami kemudian menggunakan ID maksimum ini untuk mengemas kini jadual tugas, menetapkan GUID tugas yang tidak dituntut (dengan GUID=0) kepada ID maksimum.
Dengan mengehadkan kemas kini kepada satu baris, kami memastikan bahawa hanya satu apl pekerja berjaya menuntut tugas. Selain itu, sebagai sebahagian daripada pertanyaan yang sama, kami boleh mendapatkan semula parameter untuk tugas yang dituntut menggunakan subkueri berkorelasi atau operasi JOIN.
Dengan menggunakan pendekatan pertanyaan tunggal yang dioptimumkan ini, kami bukan sahaja menghapuskan keadaan perlumbaan tetapi juga meningkatkan prestasi keseluruhan dengan mengurangkan bilangan perjalanan pergi balik rangkaian dan mengunci perbalahan.
Atas ialah kandungan terperinci Bagaimanakah Pertanyaan MySQL Tunggal Boleh Mengendalikan Kedua-dua Pemilikan Tugasan dan Pengambilan Parameter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!