Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कतार के रूप में डेटाबेस तालिका का उपयोग करना

मैं प्रत्येक पंक्तिबद्ध वस्तु के लिए विशिष्ट रूप से वृद्धिशील आईडी प्रदान करने के लिए प्राथमिक कुंजी के रूप में एक पहचान फ़ील्ड का उपयोग करता हूं, और उस पर क्लस्टर इंडेक्स चिपकाता हूं। यह उस क्रम का प्रतिनिधित्व करेगा जिसमें आइटम कतारबद्ध थे।

आइटम को संसाधित करते समय क्यू तालिका में रखने के लिए, आपको किसी विशेष आइटम की वर्तमान स्थिति को इंगित करने के लिए "स्थिति" फ़ील्ड की आवश्यकता होगी (उदा. 0=प्रतीक्षा, 1=संसाधित किया जा रहा है, 2=संसाधित)। किसी आइटम को दो बार संसाधित होने से रोकने के लिए इसकी आवश्यकता होती है।

कतार में आइटम संसाधित करते समय, आपको तालिका में अगला आइटम ढूंढना होगा जो वर्तमान में संसाधित नहीं हो रहा है। इसे इस तरह से करने की आवश्यकता होगी ताकि एक ही आइटम को एक ही समय में संसाधित करने के लिए कई प्रक्रियाओं को रोकने के लिए जैसा कि नीचे दिखाया गया है। तालिका संकेत पर ध्यान दें UPDLOCK और READPAST जिन्हें आपको कतारों को लागू करते समय अवगत होना चाहिए।

जैसे एक स्पोक के भीतर, कुछ इस तरह:

DECLARE @NextID INTEGER

BEGIN TRANSACTION

-- Find the next queued item that is waiting to be processed
SELECT TOP 1 @NextID = ID
FROM MyQueueTable WITH (UPDLOCK, READPAST)
WHERE StateField = 0
ORDER BY ID ASC

-- if we've found one, mark it as being processed
IF @NextId IS NOT NULL
    UPDATE MyQueueTable SET Status = 1 WHERE ID = @NextId

COMMIT TRANSACTION

-- If we've got an item from the queue, return to whatever is going to process it
IF @NextId IS NOT NULL
    SELECT * FROM MyQueueTable WHERE ID = @NextID

यदि किसी आइटम को संसाधित करना विफल हो जाता है, तो क्या आप इसे बाद में पुन:प्रयास करने में सक्षम होना चाहते हैं? यदि ऐसा है, तो आपको या तो स्थिति को वापस 0 या कुछ और पर रीसेट करना होगा। इसके लिए अधिक विचार की आवश्यकता होगी।

वैकल्पिक रूप से, डेटाबेस तालिका को कतार के रूप में उपयोग न करें, लेकिन MSMQ जैसा कुछ - मैंने सोचा कि मैं इसे मिश्रण में फेंक दूंगा!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2019 नई सुविधाएँ

  2. SQL सर्वर:कॉलम से पंक्तियों तक

  3. SQL सर्वर के लिए CONCAT_WS ()

  4. SQL सर्वर में पंक्ति-स्तरीय सुरक्षा का परिचय

  5. SQL सर्वर में लोअरकेस को अपरकेस में कैसे बदलें - UPPER ()