2009-04-24 17 views
5

मुझे लगता है कि इस प्रकार काम करता है एक आवेदन पत्र है: लिनक्स मशीनों ग्राहकों के लिए पत्र के 28 अलग अलग प्रकार के उत्पन्न करते हैं। अक्षरों को .docx (माइक्रोसॉफ्ट वर्ड प्रारूप) में भेजा जाना चाहिए। एक सचिव एमएस वर्ड टेम्पलेट्स को बनाए रखता है, जो स्वचालित रूप से आवश्यकतानुसार उपयोग किया जाता है। एमएस वर्ड का उपयोग करने से बदलना एक विकल्प नहीं है।मतदान डेटाबेस के विकल्प?

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

हम काम के बारे में जानकारी के लिए एक केंद्रीय डेटाबेस तालिका का उपयोग अलग-अलग राज्यों के समन्वय के लिए ("नया", "संसाधन", "समाप्त" "मुद्रित") ... और साथ ही सही स्थिति की जानकारी देने के लिए।

वैसे भी, मैं ग्राहकों को मतदान डेटाबेस अक्सर पसंद नहीं है, के रूप में वे समय के सबसे अधिक काम नहीं कर रहे देखकर। ग्राहक हर 5 सेकंड में hpoll।

मतदान से बचने के लिए, मैं सभी क्लाइंट मशीनों को भेजे गए संदेश को "कुछ काम करने के लिए कुछ काम करने" या "कुछ काम करने के लिए अपना डेटाबेस जांचें" प्रसारण करना चाहता हूं।

मैं प्रकाशित करें/सदस्यता लें संदेश कतार काम करने के लिए किया जाएगा किसी तरह का लगता है, लेकिन मैं किसी भी बड़े पैमाने पर अतिरिक्त जटिलता नहीं करना चाहती।

वहाँ एक शून्य या शून्य के पास config/सॉफ्टवेयर के रखरखाव टुकड़ा है कि इस लक्ष्य को हासिल होगा है? विकल्प क्या हैं?

एक्स

+0

कौन सा डेटाबेस सिस्टम प्रयोग कर रहे हैं? एस क्यू एल सर्वर? –

+0

यह एक MySQL डेटाबेस है। –

+3

एआर ठीक है। एसक्यूएल सर्वर 2005 के साथ आपके पास एसक्यूएल सर्वर संदेश ब्रोकर है। यह आपके क्लाइंट प्रक्रियाओं को ब्लॉक करने और 0% सीपीयू का उपभोग करने की अनुमति देता है जब तक कि काम करने के लिए कोई काम न हो (क्यू में एक संदेश)। प्रत्येक संदेश लेनदेन है। हालांकि, ओएनसी, आपको इस प्रकार की प्रसंस्करण करने के लिए एसक्यूएल सर्वर की आवश्यकता नहीं है। हालांकि, मैं किसी अन्य की सिफारिश नहीं कर सकता, क्योंकि मैंने उनका उपयोग नहीं किया है; पी –

उत्तर

3

वहाँ एक शून्य या शून्य के पास config/सॉफ्टवेयर के रखरखाव टुकड़ा है कि इस लक्ष्य को हासिल होगा है? विकल्प क्या हैं?

संभवतः, लेकिन कॉन्फ़िगरेशन और कार्यान्वयन समय में आप जो सहेजेंगे, वह आपके मतदान सेवा से अधिक प्रदर्शन को नुकसान पहुंचाएगा। एसक्यूएल सर्वर वास्तव में धक्का करने के लिए नहीं बनाया गया है (वैसे भी आसानी से नहीं)। ऐसी चीजें हैं जिनका उपयोग आप डेटा आउट (प्रतिकृति सेवा, लॉग शिपिंग - icky सामान) को धक्का देने के लिए कर सकते हैं, लेकिन वे अधिक जटिल होंगे और आपकी सरल मतदान सेवा की तुलना में अधिक संसाधनों की आवश्यकता होगी। कुछ विकल्प होगा:

  1. ट्रिगर किसी तरह का जो आदेश-पंक्ति का उपयोग कर अपने निष्पादन कॉल (sp_cmdshell)

  2. एक COM वस्तु जो SQL सर्वर का उपयोग कर खोलने के लिए और का उपयोग कर

  3. चला सकते हैं चलाता है एक वीबीस्क्रिप्ट चलाने के लिए एक एसक्यूएल एजेंट नौकरी (जिसे फिर से "मतदान" माना जाएगा)

ये विकल्प थोड़ा हास्यास्पद हैं आप पहले ही कर चुके हैं बहुत आसान है।

यदि आप बहुत से चक्र या कुछ का उपयोग करके मतदान सेवा के बारे में चिंतित हैं - तो आप हमेशा इसे वापस थ्रोटल कर सकते हैं - हर मिनट मतदान, हर 10 मिनट, या यहां तक ​​कि दिन में एक बार भी एक बार उचित हो सकता है - यह एक व्यवसाय होगा निर्णय, तो किसी को व्यवसाय में किसी से पूछें कि इसे कितनी तेजी से होना चाहिए।

सरल मतदान सेवाओं काफी आम है, क्योंकि वे कर रहे हैं, अच्छी तरह से सरल हैं ...। इसके अलावा वे भी कम ओवरहेड, दूरस्थ रूप से स्थिर, और त्रुटि सहनशील हैं। नीचे की तरफ यह है कि सावधानीपूर्वक नियंत्रित नहीं होने पर वे डेटाबेस को धूल में हथौड़ा कर सकते हैं।

3

एक संदेश कतार, अच्छी तरह से काम कर सकते हैं के रूप में वे आम तौर पर सेटअप कर रहे हैं संसाधनों को बर्बाद बिना कुछ समय के लिए ब्लॉक करने के लिए सक्षम होने के लिए। लेकिन MySQL के साथ, मुझे नहीं लगता कि यह एक विकल्प है।

तुम सिर्फ डीबी पर भार को कम करना चाहते हैं, तो आप एक ही पंक्ति के साथ एक मेज बना सकते हैं: नवीनतम काम आईडी। फिर ग्राहकों को यह देखने के लिए कि उन्हें वास्तविक तालिका के खिलाफ पूर्ण मतदान चलाने की आवश्यकता है, उनकी अंतिम आईडी से इसकी तुलना करने की आवश्यकता है। अगर यह अब एक मुद्दा है, तो इस तरह ओवरहेड बहुत कम किया जाना चाहिए।

+1

आपका मतदान सिर्फ 'तालिका तालिका' का उपयोग करने के लिए कर सकता है यह पता लगाने के लिए कि एक तालिका आखिरी बार अपडेट की गई थी और एक नई तालिका बनाने से बचें। –

5

क्या कोई उद्देश्य प्रमाण है कि सर्वर पर कोई महत्वपूर्ण भार लगाया जा रहा है? अगर यह काम करता है, तो मैं सुनिश्चित करता हूं कि यहां हल करने में वास्तव में एक समस्या है।

यह सब कुछ आसान ढंग से चलने के लिए अच्छा होना चाहिए कि आप उन चीजों को देख रहे हैं जो संभवतः बेहतर हो सकते हैं!

+0

इसे रखने का अच्छा तरीका। उस पर उपरोक्त :) – Jasmine

1

Postgres और (CouchDB की तरह या वस्तु भंडार) एसक्यूएल सर्वर के विपरीत, MySQL डेटाबेस घटनाओं उत्सर्जन नहीं करेगा। हालांकि कुछ कोडिंग पैटर्न हैं जिनका उपयोग आप इसे अनुकरण करने के लिए कर सकते हैं।

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

आपको लगता है कि माईसाम परिवर्तन तालिका के लिए सबसे अच्छा विकल्प है क्योंकि यह अधिकतर लिख रहा है (या यहां तक ​​कि स्मृति यदि आपको डेटाबेस सर्वर आउटेज के बीच की घटनाओं को जारी रखने की आवश्यकता नहीं है)। हालांकि, ध्यान रखें कि मेमोरी और मेमरी और माईसैम दोनों में केवल पूर्ण-टेबल ताले हैं, इसलिए एक मेमोरी और माईसैम तालिका में डालने के दौरान इनो डीबी टेबल पर आपका ट्रिगर बोतल की गर्दन पर हो सकता है। यदि आप किसी अन्य InnoDB तालिका के साथ ऑन डिलीट कैस्केड का उपयोग कर रहे हैं (उसी इंजन का उपयोग करने के लिए दोनों टेबलों की आवश्यकता है) तो आपको परिवर्तन तालिका के लिए InnoDB की भी आवश्यकता हो सकती है।

तुम भी अंतिम अद्यतन समय की जाँच करने के तालिका में परिवर्तन की हो, तो प्रदर्शन करने के लिए कुछ जांच करने के लिए SHOW TABLE STATUS का उपयोग हो सकता है। InnoDB तालिकाओं के लिए यह सुविधा wont work

ये लेख और अधिक गहराई में वर्णन करता है MySQL में कतारों को लागू करने और यहां तक ​​कि मतदान से बचने के लिए वैकल्पिक तरीकों में से कुछ!

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