2010-03-23 15 views
5

जिस एप्लिकेशन पर मैं काम कर रहा हूं उसका एक हिस्सा एक एसएफएफ है जो कुछ 80 प्रश्नों के साथ एक परीक्षण दिखाता है। प्रत्येक प्रश्न SQL सर्वर में WebORB और ASP.NET के माध्यम से सहेजा जाता है।डाटाबेस या एमएसएमक्यू का उपयोग कर कतार में?

यदि कोई उम्मीदवार परीक्षा समाप्त करता है, तो सत्र को सत्यापित करने की आवश्यकता होती है। समस्या यह है कि कभी-कभी 350 उम्मीदवार एक ही पल में अपना परीक्षण पूरा करते हैं, और वेब सर्वर और सीपीयू सर्वर पर सीपीयू विस्फोट (350 सत्यापन एक साथ)।

अब, मुझे यहां कतार कैसे लागू करना चाहिए? डेटाबेस में, एक सारणी है जिसमें प्रत्येक सत्र के लिए रिकॉर्ड होता है। एक कॉलम स्थिति रखती है। 1 समाप्त हो गया है, 2 मान्य है।

मैं (के रूप में मैं इसे देख, शायद आप अन्य प्रस्ताव है) को दो तरह से पंक्तिबद्ध को लागू कर सकते हैं:

  • कि स्थिति 1. साथ रिकॉर्ड के लिए तालिका की जाँच करता है एक प्रक्रिया यदि यह एक पाता है, यह सत्यापित करता है सत्र। इसलिए, सत्र एक के बाद मान्य हैं।
  • यदि कोई उम्मीदवार अपना सत्र समाप्त करता है, तो एक संदेश एमएसएमक्यू कतार में भेजा जाता है। एक और प्रक्रिया कतार को सुनती है और सत्रों को एक के बाद मान्य करती है।

अब:

  • क्या सबसे अच्छा तरीका हो सकता है?
  • आप प्रक्रिया को कहां शुरू करेंगे जो सत्र मान्य करेगा? आपके global.asax (application_start) में? एक विंडोज़ सेवा के रूप में? Application_start में शुरू की गई वेबसाइट की जड़ पर एक exe के रूप में?

मेरे लिए, तालिका का उपयोग करके और स्थिति 1 के साथ रिकॉर्ड की तलाश करना सबसे आसान तरीका लगता है।

उत्तर

4

एमएसएमक्यू दृष्टिकोण decouples सत्यापन तर्क सेवा और डेटाबेस से आपका वेब-फेस एप्लिकेशन।

यह कई फायदे हैं, जिनमें से कुछ लाता है:

  • यह स्थितियों में, जहां मान्यता तर्क प्रति सेकंड 5 सत्र संभाल कर सकते हैं संभाल करने के लिए आसान होगा, और यह एक बार में सभी 300 प्राप्त करता है। अन्यथा आपको कॉम्प्लेक्टेड टाइमआउट, पुनः प्रयास, इत्यादि को संभालना होगा।

  • शेष एप्लिकेशन को बाधित किए बिना सत्यापन सेवा पर रखरखाव करना आसान होगा। जब सत्यापन सेवा कम हो जाती है, तो संदेश एमएसएमक्यू में कतारबद्ध होंगे, और जैसे ही इसे लाया जाता है, फिर से संसाधित हो जाएगा।

  • उपरोक्त जैसा ही डेटाबेस रखरखाव के लिए लागू होता है।

1

validating क्या है? अपनी कतारबद्ध रणनीति पर काम करने से पहले, मैं जितनी जल्दी हो सके validating बनाने की कोशिश करता हूं, जिसमें इसे सेट करने के साथ-साथ यह पहले से ऐसा नहीं है।

+0

मैंने सेट आधारित गुगल किया है, लेकिन मुझे पूरा यकीन नहीं है कि इसका मतलब क्या है। मैंने यथासंभव तेज़ी से सत्यापन किया है (अब प्रति सत्र 500ms पर) लेकिन फिर भी, यदि 350 उम्मीदवार एक ही समय में मान्य होते हैं, तो यह 175 सेकंड बनाता है। हालांकि, यह भारित है, इसलिए वास्तव में यह 350/4 सेकंड है। यह काम करता है लेकिन कुछ मिनटों के लिए वेबसर्वर का सीपीयू 100% के करीब जाता है। डेटाबेस प्रोग्रामिंग के संबंध में "सेट आधारित" संचालन का उपयोग करके –

+1

तब होता है जब आप एक डेटाबेस डेटाबेस जारी करते हैं, जैसे कि UPDATE और यह आपकी सभी पंक्तियों को प्रभावित करता है, प्रत्येक पंक्ति पर लूपिंग के विपरीत और प्रत्येक पर एक अलग अद्यतन करने के विपरीत। मैंने "डेटाबेस सेट आधारित प्रसंस्करण" पर एक Google किया है और यहां शीर्ष पर से दो लेख हैं: http://www.codeproject.com/KB/database/SetAndProceduralSQL.aspx और http://weblogs.sqlteam.com/jeffs /archive/2007/04/30/60192.aspx –

3

यदि आपके पास एमएसएमक्यू का उपयोग करने का अनुभव नहीं है और कोई बुनियादी ढांचा स्थापित नहीं है, तो मैं इसके खिलाफ सलाह दूंगा। निश्चित रूप से, यह माइक्रोसॉफ्ट मंच पर क्यूइंग करने का "उचित" तरीका हो सकता है, लेकिन यह बहुत सीधी आगे नहीं है और इसमें काफी सीखने की वक्र है।

विंडोज सेवा बनाने के लिए भी यही है; इसे तब तक न करें जब तक कि आप इससे परिचित न हों। इस तरह के साधारण मामलों के लिए मैं तर्क दूंगा कि दर्द पुरस्कारों से बड़ा है।

सबसे सरल समाधान शायद तालिका का उपयोग करना होगा और वैश्विक पृष्ठभूमि में शुरू होने वाली पृष्ठभूमि थ्रेड पर प्रक्रिया को चलाने के लिए होगा। आप शायद एक व्यवस्थापक पृष्ठ भी बनाना चाहते हैं जो प्रक्रिया के बारे में कुछ स्थिति जानकारी (लंबित नौकरियों की संख्या इत्यादि) की रिपोर्ट कर सकता है और यदि किसी कारण से यह विफल हो जाता है तो प्रक्रिया को पुनरारंभ करने के लिए एक बटन हो सकता है।

0

मैं हाल ही में अपने आप की जांच कर रहा हूं इसलिए मेरे निष्कर्षों का उल्लेख करना चाहता था। आपके आवेदन की तुलना में डेटाबेस का स्थान यह तय करने का एक बड़ा कारक है कि कौन सा विकल्प तेज़ है।

मैंने स्थानीय डेटाबेस एमएसएमक्यू संदेश में सटीक उसी डेटा को लॉगिंग करने के विरुद्ध 100 डेटाबेस प्रविष्टियों को सम्मिलित करने में लगाए गए समय को सम्मिलित करने का परीक्षण किया। इसके बाद मैंने कई बार इस परीक्षण को करने के परिणामों का औसत लिया।

मुझे जो मिला वह यह था कि जब डेटाबेस स्थानीय नेटवर्क पर होता है, तो एक पंक्ति डालने से एमएसएमक्यू पर लॉग इन करने से 4 गुना तेज होता है।

जब डेटाबेस को एक सभ्य इंटरनेट कनेक्शन पर पहुंचाया जा रहा था, तो डेटाबेस में एक पंक्ति डालने से एमएसएमक्यू में लॉगिंग करने से 6 गुना धीमी थी।

तो:

स्थानीय डेटाबेस - डीबी तेजी से होता है, अन्यथा MSMQ है।

+0

मैं इस राय के लिए झुकाव, मुझे वही लगा। मैंने डेटाबेस में 100 रिकॉर्ड डालने की कोशिश की जो मेरे नेटवर्क में मेरे नेटवर्क में है और फिर मैंने अपने लैपटॉप में निजी एमएसएमक्यू बनाया और ऐसा ही किया। एमएसएमक्यू ने डाटाबेस से 1.5 गुना अधिक समय लिया। मुझे लगता है कि एमएसएमक्यू अच्छा है जब आपके पास एक ही स्थान पर डेटा लिखना चाहते हैं। –

+0

मैंने इस उद्धरण पर ठोकर खाई: "एसएसबी ट्रांसएक्ट मोड में एमएसएमक्यू की तुलना में काफी तेज़ होगा। अगर एमएनएमक्यू अप्रतिबंधित मोड (सर्वश्रेष्ठ प्रयास, अनियंत्रित, डिलीवरी) में काम करने के लिए तेज़ होगा। तो ... क्या यह निर्दिष्ट करना संभव है कि क्या आपके परीक्षण एक ट्रांज़ेक्टेड कतार या एक अप्रतिबंधित व्यक्ति के साथ निष्पादित किए गए थे? – Mario