Anda terjebak dengan polling dengan tumpukan teknologi Anda saat ini. MySQL tidak memiliki cara yang baik untuk mengirimkan pemberitahuan kepada Anda bahwa ada sesuatu yang baru untuk dilihat.
(Anda dapat mempertimbangkan untuk menambahkan subsistem antrian pesan, seperti RabbitMQ misalnya, tetapi itu akan membutuhkan perubahan besar pada struktur aplikasi Anda).
Beberapa pedoman untuk menangani pemungutan suara dengan biaya seminimal mungkin.
-
Tetapkan ekspektasi pengguna pada latensi beberapa detik pada pesan, bukan milidetik.
-
Kueri sesering yang diperlukan untuk memenuhi ekspektasi latensi.
-
Hindari meminta banyak data dengan setiap kueri. Bagaimana Anda bisa melakukannya?
sebuah. Simpan stempel waktu terbaru setiap kali Anda menjalankan kueri
b. Jangan gunakan
SELECT *
. Alih-alih berikan nama kolom yang sebenarnya Anda butuhkan. Ini memungkinkan pengoptimal MySQL membantu memangkas biaya kueri Anda.c. Buat kueri Anda melakukan
SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
jadi Anda hanya mendapatkan item baru dari meja Anda, secara berurutan. Jika sistem Anda tidak terlalu sibuk, SELECT ini sering kali tidak mengembalikan baris. Itu bagus.d. Pastikan Anda memiliki indeks multikolom pada stempel waktu dan kolom lain dalam pernyataan SELECT Anda. Ini disebut indeks penutup .
e. Tepat setelah Anda membuka koneksi ke MySQL, keluarkan pernyataan SQL ini. Ini memungkinkan MySQL mengambil data Anda dengan lebih sedikit pertengkaran dengan klien MySQL lain yang menyisipkan baris ke tabel.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Jika Anda melakukan ini dengan AJAX dari browser pengguna Anda, Anda ingin menyertakan stempel waktu terbaru dalam permintaan AJAX sehingga Anda dapat mengirimkan item baru yang dibutuhkan ke setiap browser pengguna.