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

INSERTs के साथ समवर्ती परिदृश्य

आपकी समस्या "सिंक्रनाइज़ेशन लॉक क्या होना चाहिए" . के प्रश्न पर उबलती है . आपके प्रश्न से ऐसा लगता है कि बुकिंग किसी विशिष्ट वस्तु की बुकिंग नहीं है। लेकिन मान लेते हैं, कि एक उपयोगकर्ता एक विशिष्ट होटल के कमरे की बुकिंग कर रहा है, इसलिए आपको दो समस्याओं को हल करने की आवश्यकता है:

  • ओवरबुकिंग को रोकें (जैसे दो लोगों के लिए एक ही चीज़ बुक करना)
  • समानांतर खाते की स्थिति के गलत आकलन को रोकें

इसलिए जब कोई उपयोगकर्ता उस बिंदु पर पहुंच जाता है, जब वह पुष्टि करें . को हिट करने वाला होता है बटन, यह एक संभावित परिदृश्य है जिसे आप लागू कर सकते हैं:

  1. लेन-देन शुरू करें

  2. उपयोगकर्ता प्रविष्टि को लॉक करें ताकि समानांतर प्रक्रियाएं अवरुद्ध हो जाएं

    SELECT * FROM user FOR UPDATE WHERE id = :id

  3. खाते की शेष राशि की फिर से जाँच करें और अपर्याप्त धनराशि होने पर अपवाद / रोलबैक फेंक दें

  4. ओवरबुकिंग को रोकने के लिए बुक किए जाने वाले आइटम को लॉक करें

    SELECT * FROM room FOR UPDATE WHERE id = :id

  5. बुकिंग उपलब्धता की दोबारा जांच करें और अगर आइटम पहले से बुक है तो अपवाद/रोलबैक फेंक दें

  6. बुकिंग प्रविष्टि बनाएं और उपयोगकर्ता के खाते से धनराशि घटाएं

  7. लेन-देन करें (सभी ताले जारी किए जाएंगे)

यदि, आपके मामले में, आपको ओवरबुकिंग की जांच करने की आवश्यकता नहीं है, तो बस चरण 4 और 5 को छोड़ दें / अनदेखा करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में मॉड () कैसे काम करता है

  2. MySQL, Postgres और Aurora के लिए सर्वर रहित GraphQL API कैसे बनाएं?

  3. PostgreSQL INSERT को एनम की एक सरणी में शामिल करें

  4. अगले अनुक्रम संख्या के साथ एक ग्रेल बनाई गई फ़ाइल में एक सम्मिलित कैसे सेट करें?

  5. तालिका में एक ही कॉलम के दो रिकॉर्ड घटाएं