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

एकाधिक लेनदेन के दौरान डेटाबेस पंक्ति लॉक

ध्वज के साथ आपका समाधान संभव लगता है और मुझे लगता है कि केवल एक चीज की जरूरत है कि ताला समाप्त हो जाए। मूल रूप से जिस तरह से मैं लॉक को आर्किटेक्ट करूंगा, वह यह है कि जब लॉक लिया गया था तो मैं टाइमस्टैम्प लिखूंगा और इसे बनाऊंगा ताकि प्रक्रिया को अपडेट करना पड़े। लॉक हर बार (यानी हर 30 सेकंड में) जबकि यह अभी भी रिकॉर्ड पर काम कर रहा है। यदि प्रक्रिया समाप्त हो जाती है या अन्यथा कार्य पूरा करने में विफल रहता है तो लॉक समाप्त हो जाएगा और अन्य प्रक्रियाएं अनलॉक कर सकती हैं यह समयबाह्य अवधि के दोगुने से अधिक होने पर समाप्त हो जाता है।

जब कोई प्रक्रिया किसी रिकॉर्ड पर काम करना समाप्त कर देती है तो वह लॉक फ़्लैग को साफ़ कर देगी और रिकॉर्ड को संसाधित (फिर से एक और फ़्लैग) के रूप में चिह्नित कर देगी।

आप शायद दो फ़ील्ड रखना चाहेंगे:एक जो टाइमस्टैम्प लॉक ध्वज को संग्रहीत करेगा और दूसरा जो इंगित करेगा कि कौन सी प्रक्रिया लॉक का मालिक है (यदि आप इसकी परवाह करते हैं)। मैं मान रहा हूं कि किसी प्रकार की कुंजी है जिसका उपयोग तालिका में रिकॉर्ड्स को ऑर्डर करने के लिए किया जा सकता है जैसे कि "अगली कार्रवाई" की अवधारणा सार्थक है।

संसाधित करने के लिए अगला रिकॉर्ड प्राप्त करने के लिए आप इस तरह की क्वेरी का उपयोग कर सकते हैं:

 -- find the next available process and "lock" it by updating it's flag
 UPDATE actions_tabe
    SET LockFlag = @timestamp,
        Process = @processname
  WHERE Id IN (SELECT Id
            FROM actions_table
           WHERE LockFlag IS null
             AND IsComplete = '0'
             AND ScheduledTime < now()
           ORDER BY Scheduledtime ASC, Id ASC
           LIMIT 1);

 -- return the Id and Action of the record that was just marked above
 SELECT Id, Action
   FROM actions_table
  WHERE Process = @processname

नमूना पहेली यहाँ:http://sqlfiddle.com/#!11/9c120/26 /1




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मानदंड का उपयोग करके नेस्टेड क्वेरी को हाइबरनेट करें

  2. पीजी-वादे के साथ बहु-पंक्ति सम्मिलित करें

  3. पोस्टग्रेज में डीएसटी के लिए लेखांकन, अनुसूचित वस्तुओं का चयन करते समय

  4. 15 मिनट की विंडो के लिए डेटा चुनें - PostgreSQL

  5. पोस्टग्रेज में डेटाबेस कैसे स्विच करें?