2011-01-13 14 views
8

कुछ समय पहले, मैंने ट्रेड सृजन को संभालने के लिए एकाधिक उपयोगकर्ताओं द्वारा उपयोग किया जाने वाला एक एप्लीकेशन लिखा था। मैंने कुछ समय के लिए विकास नहीं किया है, और मुझे याद नहीं है कि मैंने उपयोगकर्ताओं के बीच सहमति कैसे प्रबंधित की। इस प्रकार, मैं डिजाइन के मामले में कुछ सलाह ले रहा हूं। प्रति उपयोगकर्ताडेटाबेस एक्सेस एप्लिकेशन में concurrency प्रबंधित करने का सबसे अच्छा तरीका क्या है?

  • एक भारी ग्राहक:

    मूल आवेदन निम्नलिखित विशेषताएं था।

  • एक एकल डेटाबेस।
  • प्रत्येक उपयोगकर्ता के लिए ट्रेडों को सम्मिलित/अपडेट/हटाने के लिए डेटाबेस तक पहुंच।
  • ट्रेड तालिका को प्रतिबिंबित करने वाले एप्लिकेशन में एक ग्रिड। जब भी कोई कोई सौदा बदलता है तो उस ग्रिड को अपडेट किया जा रहा है।
  • मैं WPF का उपयोग कर रहा हूं।

    1. हूँ मैं सोच रहा था कि मैं प्रत्येक अनुप्रयोग के लिए डेटाबेस के लिए कनेक्शन के बारे में परवाह नहीं करना चाहिए में ठीक करें:

यहाँ मैं क्या सोच रहा हूँ? ध्यान में रखते हुए कि प्रत्येक में एक सिंगलटन है, मैं उम्मीद करता हूं कि प्रति ग्राहक एक कनेक्शन बिना किसी समस्या के होगा।

  • मैं पहुंच के संगामिति को रोकने के बारे में जाना कैसे कर सकते हैं? मुझे लगता है कि डेटा को संशोधित करते समय मुझे लॉक करना चाहिए, हालांकि याद नहीं है कि कैसे करें।

  • मैं कैसे जब भी अपने डेटाबेस (किसी अन्य उपयोगकर्ता द्वारा, उदाहरण के लिए) अद्यतन किया जाता है अपने आप अपडेट होने ग्रिड स्थापित करूँ?

  • आपकी मदद के लिए अग्रिम धन्यवाद!

    +3

    क्या डेटाबेस का प्रकार? –

    +0

    यूआई के रूप में आप क्या उपयोग कर रहे हैं? ASP.NET? WinForms? WPF? सिल्वरलाइट? – Jeff

    +0

    मैं WPF का उपयोग कर रहा हूं। मैंने इसे विवरण में जोड़ा। धन्यवाद – Goul

    उत्तर

    2
    1. कनेक्शन # को कम करने के लिए कनेक्शन पूलिंग का लाभ उठाने पर विचार करें। देखें: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

    2. जितनी देर हो सके लॉक करें और जितनी जल्दी हो सके समेकन को अधिकतम करने के लिए रिलीज़ करें। आप ट्रांज़ेक्शनस्कोप का उपयोग कर सकते हैं (देखें: http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx और http://blogs.msdn.com/b/dbrowne/archive/2010/05/21/using-new-transactionscope-considered-harmful.aspx) यदि आपके पास एकाधिक डीबी क्रियाएं हैं जिन्हें स्थिरता प्रबंधित करने के लिए एक साथ जाने की आवश्यकता है या उन्हें डीबी संग्रहीत प्रो में प्रबंधित करें। अपनी क्वेरी को सरल रखें। कैसे काम पर ताला लगा है और कैसे संसाधन विवाद और गतिरोध को कम करने को समझने के लिए निम्नलिखित सुझावों का पालन करें: http://www.devx.com/gethelpon/10MinuteSolution/16488

    3. मैं नहीं कर रहा हूँ यकीन है कि अन्य db, लेकिन SQL के लिए, आप एसक्यूएल निर्भरता का उपयोग कर सकते हैं, को देखने के http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx

    +0

    उत्तर जिमी के लिए धन्यवाद! यह मेरे सभी सवालों पर कुछ रोशनी डाला, लेखों के लिए धन्यवाद। – Goul

    3

    कन्करेंसी आमतौर पर ताले का उपयोग कर डीबीएमएस द्वारा दी जाती है। ताले एक प्रकार का सेमफोर होते हैं जो एक निश्चित संसाधन को विशेष लॉक प्रदान करते हैं और अन्य पहुंच को प्रतिबंधित या कतारबद्ध करने की अनुमति देते हैं (केवल उस मामले में प्रतिबंधित है जब आप असामान्य रीड का उपयोग करते हैं)।

    कनेक्शन की संख्या, जबकि आप ऊंचाइयों जहाँ आप अपने DBMS की max_connections सेटिंग पर स्पर्श हो सकता है की पूर्ति नहीं हो अपने आप में एक समस्या पैदा नहीं करता है। अन्यथा, आपको रखरखाव प्रयोजनों के लिए या इसे बंद करने के लिए उससे कनेक्ट करने में कोई समस्या हो सकती है।

    DBMSes आमतौर पर या तो तालिका ताले (MyISAM) या पंक्ति ताले (InnoDB, अधिकांश अन्य DBMSes) की एक अवधारणा का उपयोग करें। लॉक का प्रकार लॉक की मात्रा निर्धारित करता है। टेबल ताले बहुत तेज हो सकते हैं लेकिन आमतौर पर पंक्ति स्तर ताले से कम माना जाता है।

    पंक्ति स्तर ताले लेन-देन (अस्पष्ट या स्पष्ट) के अंदर होते हैं। जब मैन्युअल रूप से लेनदेन शुरू होता है, तो आप अपना लेनदेन क्षेत्र शुरू करते हैं। जब तक आप लेनदेन के दायरे को मैन्युअल रूप से बंद नहीं करते हैं, तब तक आपके द्वारा किए गए सभी परिवर्तन इस सटीक लेन-देन के गुण होंगे। आपके द्वारा किए गए परिवर्तन ACID paradigm का भी पालन करेंगे।

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

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

    +0

    आपकी मदद टीएमई के लिए धन्यवाद, यह बहुत ही निर्देशक है और मुझे समेकन तंत्र का अच्छा जवाब दे रहा है। चीयर्स – Goul

    संबंधित मुद्दे

     संबंधित मुद्दे