2010-09-29 20 views
6

मेरे पास एक सॉफ्टवेयर सिस्टम है जो एकाधिक मशीनों पर एक साथ ओसीआर करता है। वर्तमान प्रणाली निम्नानुसार काम करती है:डिज़ाइन दिशानिर्देश वितरित कंप्यूटिंग

  1. ऑब्जेक्ट होने की आवश्यकता वाले सभी दस्तावेज़ डीबी में एक तालिका में डाले गए हैं।
  2. प्रत्येक ग्राहक ओसीआर मशीन उस तालिका को पूल करती है और जब भी ओसीआर के लिए डेटा मिलता है, तो यह तालिका को ताला लगाता है और एन नहीं चुनता है। ओसीआर के लिए फाइलों का। लॉकिंग परमाणुता के लिए प्रयोग किया जाता है।
  3. प्रत्येक दस्तावेज़ ocred के बाद, दस्तावेज़ की स्थिति पूर्ण के रूप में अद्यतन किया जाता है।

मुझे पता है कि एक सिंक्रनाइज़ेशन स्थान के रूप में डेटाबेस सेट करने के लिए यह एक गंभीर गलती है। यह ठीक चल रहा है लेकिन कभी-कभी मैं डेटाबेस पर मृत ताला देख सकता हूं ..

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

उत्तर

5

ठीक है, आपके पास तालिका में एक कॉलम हो सकता है जो कहता है कि रिकॉर्ड वर्तमान में संसाधित हो रहा है या नहीं। एक लेनदेन के भीतर, उस डेटा के लिए डेटा प्राप्त करें जिसे वर्तमान में संसाधित नहीं किया जा रहा है, और यह रिकॉर्ड करने के लिए रिकॉर्ड अपडेट करें कि अब इसे संसाधित किया जा रहा है। विवाद कैसे संभाला जाएगा इसका विवरण आपके द्वारा बनाए गए लेन-देन और आपके द्वारा उपयोग किए जाने वाले डेटाबेस पर निर्भर करेगा, लेकिन मुझे संदेह है कि लेन-देन इसके दिल में होना चाहिए।

है कि आप यह सोचते हैं है वास्तव में कुछ विवरण के एक संदेश कतार एक डेटाबेस के बजाय का उपयोग करना चाहते। आप डाटाबेस के साथ के साथ संदेश कतार का उपयोग करने पर विचार कर सकते हैं ... और कुछ डेटाबेस में कतारें बनाई गई हैं, जो भी उपयोगी हो सकती हैं। यहां तक ​​कि यदि आप डेटाबेस में रिकॉर्ड भी चाहते थे, तो आप केवल आईडी के कतार प्राप्त कर सकते हैं - क्लाइंट केवल अगले आइटम को कतार से खींच सकते हैं, फिर डेटा प्राप्त कर सकते हैं। आप अभी भी उस समय को रिकॉर्ड करना चाहते हैं जिस पर आइटम कतार से खींचा गया था, ताकि यदि ग्राहक क्रैश हो या ऐसा कुछ हो, तो बैच जॉब किसी भी असफल नौकरियों को रख सकता है (उदाहरण के लिए जो एक दिन पहले उठाए गए थे लेकिन डॉन ' टी अभी तक परिणाम नहीं है) कतार में वापस।

+0

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

+0

@ Int3: क्यों नहीं? मैं डेटा संसाधित करते समय लेनदेन को खोलने का सुझाव नहीं दे रहा हूं - बस इसे प्रगति के रूप में चिह्नित करते समय। –

2

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

+0

एमएसएमक्यू अच्छा लगता है जो जॉन स्कीट द्वारा भी सुझाया जाता है। – crypted

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