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

एकाधिक क्लाइंट के साथ डीबी कतार के रूप में SQL सर्वर का उपयोग करना

मेरा सुझाव है कि आप टेबल का उपयोग कतारों के रूप में करें। उचित रूप से कार्यान्वित कतारें हजारों समवर्ती उपयोगकर्ताओं और सेवा को प्रति मिनट 1/2 मिलियन एनक्यू/डेक्यू संचालन तक संभाल सकती हैं। SQL सर्वर 2005 तक समाधान बोझिल था और इसमें एक मिश्रण शामिल था SELECT और एक UPDATE एक ही लेन-देन में और लॉक संकेतों का सही मिश्रण दें, जैसा कि gbn द्वारा लिंक किए गए लेख में है। सौभाग्य से SQL सर्वर 2005 के बाद से OUTPUT क्लॉज के आगमन के साथ, एक और अधिक सुरुचिपूर्ण समाधान उपलब्ध है, और अब MSDN OUTPUT क्लॉज का उपयोग करने की अनुशंसा करता है:

<ब्लॉकक्वॉट>

आप उन अनुप्रयोगों में OUTPUT का उपयोग कर सकते हैं जो तालिकाओं का उपयोग कतारों के रूप में करते हैं, या मध्यवर्ती परिणाम सेट रखने के लिए करते हैं। अर्थात्, एप्लिकेशन तालिका से पंक्तियों को लगातार जोड़ या हटा रहा है

मूल रूप से पहेली के 3 भाग हैं जिन्हें आपको सही तरीके से काम करने के लिए सही करने की आवश्यकता है:

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

परमाणु dequeue, READPAST का संयोजन dequeue के लिए तत्वों की खोज पर संकेत देता है और प्रसंस्करण बिट के आधार पर संकुल सूचकांक पर बाईं ओर की कुंजी अत्यधिक समवर्ती भार के तहत एक बहुत ही उच्च थ्रूपुट सुनिश्चित करता है।



  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 सर्वर 2008:मैं उपयोगकर्ता नाम को विशेषाधिकार कैसे प्रदान करूं?

  2. आशावादी बनाम निराशावादी लॉकिंग

  3. एसक्यूएल में कुल मिनट के लिए डेटाटाइम

  4. SQL सर्वर में तिथियों की तुलना कैसे करें

  5. SQL सर्वर में 1/1/1753 का क्या महत्व है?