"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن استخدام SQL Server كقائمة انتظار متزامنة لعدة عملاء؟

كيف يمكن استخدام SQL Server كقائمة انتظار متزامنة لعدة عملاء؟

تم النشر بتاريخ 2024-12-23
تصفح:822

How Can SQL Server Be Used as a Concurrent Queue for Multiple Clients?

استخدام SQL Server كقائمة انتظار متزامنة مع عملاء متعددين

في السيناريو الذي يعمل فيه الجدول كقائمة انتظار، من الضروري تكوينه والاستعلام عنه بطريقة ما يسمح لعدة عملاء بمعالجة عناصر قائمة الانتظار بشكل متزامن.

عند استخدام قفل الصفوف المتشائم مع UPDLOCK وROWLOCK، يمكن لعامل واحد فقط الحصول على القفل ومعالجة الصف. لحل هذه المشكلة وتمكين المعالجة المتزامنة، فكر في الطريقة التالية:

تنفيذ قائمة الانتظار باستخدام جملة OUTPUT

توفر جملة OUTPUT آلية لاسترداد الصف وتعديله ذريًا . فيما يلي كيفية تنفيذ قائمة انتظار باستخدام جملة OUTPUT:

with CTE as (
  SELECT TOP(1) COMMAND, PROCESSED
  FROM TABLE WITH (READPAST)
  WHERE PROCESSED = 0)
UPDATE CTE
  SET PROCESSED = 1
  OUTPUT INSERTED.*;

ينفذ هذا الاستعلام الخطوات التالية بشكل تلقائي:

  1. يستخدم تلميح مع (READPAST) لتخطي أي صفوف مقفلة.
  2. تحديد الجزء العلوي صف يحتوي على PROCESSED=0.
  3. يقوم بتحديث الصف المحدد لوضع علامة عليه كمعالج (PROCESSED=1).
  4. يخرج الصف المحدث، والذي يمكن للعامل استخدامه للمعالجة.

تحسين الفهرس المجمع

لتحسين الأداء بشكل أكبر، من الضروري إنشاء فهرس متفاوت المسافات في العمود "المعالجة". وهذا يضمن تخزين البيانات حسب ترتيب المعالجة.

CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);

تجنب الاستعلامات غير القياسية

للحصول على إنتاجية مثالية، من الضروري تجنب الاستعلام عن جدول قائمة الانتظار باستخدام طرق أخرى غير عملية إلغاء قائمة الانتظار الموضحة أعلاه. قد تؤدي محاولة إلقاء نظرة خاطفة على الجدول أو استخدامه لأغراض إضافية إلى حدوث حالة من الجمود وتدهور الأداء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3