मेरा सुझाव है कि आप टेबल का उपयोग कतारों के रूप में करें। उचित रूप से कार्यान्वित कतारें हजारों समवर्ती उपयोगकर्ताओं और सेवा को प्रति मिनट 1/2 मिलियन एनक्यू/डेक्यू संचालन तक संभाल सकती हैं। SQL सर्वर 2005 तक समाधान बोझिल था और इसमें एक मिश्रण शामिल था SELECT
और एक UPDATE
एक ही लेन-देन में और लॉक संकेतों का सही मिश्रण दें, जैसा कि gbn द्वारा लिंक किए गए लेख में है। सौभाग्य से SQL सर्वर 2005 के बाद से OUTPUT क्लॉज के आगमन के साथ, एक और अधिक सुरुचिपूर्ण समाधान उपलब्ध है, और अब MSDN OUTPUT क्लॉज का उपयोग करने की अनुशंसा करता है:
आप उन अनुप्रयोगों में OUTPUT का उपयोग कर सकते हैं जो तालिकाओं का उपयोग कतारों के रूप में करते हैं, या मध्यवर्ती परिणाम सेट रखने के लिए करते हैं। अर्थात्, एप्लिकेशन तालिका से पंक्तियों को लगातार जोड़ या हटा रहा है
मूल रूप से पहेली के 3 भाग हैं जिन्हें आपको सही तरीके से काम करने के लिए सही करने की आवश्यकता है:
- आपको स्वचालित रूप से डीक्यू करने की आवश्यकता है। आपको पंक्ति ढूंढनी है, किसी भी बंद पंक्तियों को छोड़ना है, और इसे एकल, परमाणु संचालन में 'डीक्यूड' के रूप में चिह्नित करना है, और यह वह जगह है जहां
OUTPUT
खंड चलन में आता है:
with CTE as (
SELECT TOP(1) COMMAND, PROCESSED
FROM TABLE WITH (READPAST)
WHERE PROCESSED = 0)
UPDATE CTE
SET PROCESSED = 1
OUTPUT INSERTED.*;
- आपको होना चाहिए
PROCESSED
. पर सबसे बाईं ओर क्लस्टर इंडेक्स कुंजी के साथ अपनी तालिका की संरचना करें कॉलम। अगरID
प्राथमिक कुंजी का उपयोग किया गया था, फिर इसे क्लस्टर कुंजी में दूसरे कॉलम के रूप में ले जाएं।ID
. पर गैर-संकुल कुंजी रखने पर बहस कॉलम खुला है, लेकिन मैं दृढ़ता से समर्थन करता हूं नहीं कतारों पर कोई द्वितीयक गैर-संकुल अनुक्रमणिका होना:
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
- आपको इस तालिका को किसी अन्य माध्यम से नहीं बल्कि Dequeue द्वारा क्वेरी करनी चाहिए। पीक ऑपरेशंस करने की कोशिश करना या टेबल को कतार और . दोनों के रूप में उपयोग करने का प्रयास करना एक स्टोर के रूप में बहुत संभावना है गतिरोध पैदा करेगा और थ्रूपुट को नाटकीय रूप से धीमा कर देगा।
परमाणु dequeue, READPAST का संयोजन dequeue के लिए तत्वों की खोज पर संकेत देता है और प्रसंस्करण बिट के आधार पर संकुल सूचकांक पर बाईं ओर की कुंजी अत्यधिक समवर्ती भार के तहत एक बहुत ही उच्च थ्रूपुट सुनिश्चित करता है।