Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menggunakan SQL Server sebagai antrian DB dengan banyak klien

Saya sarankan Anda pergi ke Menggunakan tabel sebagai Antrian. Antrian yang diterapkan dengan benar dapat menangani ribuan pengguna dan layanan secara bersamaan setinggi 1/2 Juta operasi enqueue/dequeue per menit. Sampai SQL Server 2005 solusinya rumit dan melibatkan pencampuran SELECT dan UPDATE dalam satu transaksi dan berikan campuran yang tepat dari petunjuk kunci, seperti dalam artikel yang ditautkan oleh gbn. Untungnya sejak SQL Server 2005 dengan munculnya klausa OUTPUT, solusi yang jauh lebih elegan tersedia, dan sekarang MSDN merekomendasikan penggunaan klausa OUTPUT:

Anda dapat menggunakan OUTPUT dalam aplikasi yang menggunakan tabel sebagai antrian, atau untuk menyimpan kumpulan hasil menengah. Artinya, aplikasi terus menambahkan atau menghapus baris dari tabel

Pada dasarnya ada 3 bagian teka-teki yang harus Anda selesaikan dengan benar agar dapat bekerja secara bersamaan:

  1. Anda perlu melakukan dequeue secara otomatis. Anda harus menemukan baris, melewati setiap baris yang terkunci, dan menandainya sebagai 'dequeued' dalam satu operasi atom, dan di sinilah OUTPUT klausa mulai berlaku:
    with CTE as (
      SELECT TOP(1) COMMAND, PROCESSED
      FROM TABLE WITH (READPAST)
      WHERE PROCESSED = 0)
    UPDATE CTE
      SET PROCESSED = 1
      OUTPUT INSERTED.*;
  1. Anda harus susun tabel Anda dengan kunci indeks berkerumun paling kiri pada PROCESSED kolom. Jika ID digunakan kunci utama, lalu pindahkan sebagai kolom kedua di kunci berkerumun. Perdebatan apakah akan menyimpan kunci non-cluster pada ID kolom terbuka, tapi saya sangat mendukung tidak memiliki indeks non-cluster sekunder di atas antrian:
    CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
  1. Anda tidak boleh menanyakan tabel ini dengan cara lain selain dengan Dequeue. Mencoba melakukan operasi Peek atau mencoba menggunakan tabel baik sebagai Antrian dan sebagai toko akan sangat mungkin menyebabkan kebuntuan dan akan memperlambat throughput secara dramatis.

Kombinasi dequeue atomik, petunjuk READPAST pada elemen pencarian untuk dequeue dan kunci paling kiri pada indeks berkerumun berdasarkan bit pemrosesan memastikan throughput yang sangat tinggi di bawah beban yang sangat bersamaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperkenalkan Fitur Baru - Analisis Deadlock

  2. Batasan tabel silang MS SQL Server

  3. EXP() Contoh di SQL Server

  4. Bagaimana cara melewatkan parameter Bernilai Tabel dari java ke prosedur tersimpan server sql?

  5. Daftar Fungsi Tanggal dan Waktu di SQL Server (T-SQL)