2009-11-20 29 views
6

क्या सबसे अच्छी रणनीति एक डाटाबेस सर्वर के सभी ग्राहकों को सिंक्रनाइज़ रखने के लिए है?वास्तविक समय तुल्यकालन

परिदृश्य एक डाटाबेस सर्वर और ग्राहकों है कि यह करने के लिए कनेक्ट, देखने और डेटा को संशोधित करने की एक गतिशील शामिल होता है।

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

अब मैं एक फायरबर्ड डेटाबेस सर्वर का उपयोग कर रहा हूं, लेकिन मैं नौकरी के लिए सबसे अच्छी तकनीक को अपनाने के लिए तैयार हूं, इसलिए मैं जानना चाहता हूं कि इस तरह के परिदृश्य के लिए पहले से ही मौजूदा ढांचा है, डेटाबेस डेटाबेस क्या इसका उपयोग होता है और इसमें क्या शामिल है?

+0

क्या आपकी उम्मीद है कि क्लाइंट को कहा जाएगा कि किसी भी तरह से उन्हें "धक्का" (अधिक शायद अधिसूचना), या बल्कि (और अधिक आसानी से किया गया ...) बदल जाता है कि ताज़ा करने पर, परिणाम सेट में आगे बढ़ते हुए और आम तौर पर पूछताछ डेटाबेस को फिर से नवीनतम डेटा मिलेगा? – mjv

+0

मैं एक डेटाबेस परिदृश्य में और सोच रहा हूं, क्योंकि मेरा फ्रंट एंड डब्ल्यूपीएफ में है। – luvieere

उत्तर

5

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

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

देखें http://www.firebirdsql.org/doc/whitepapers/events_paper.pdf

आप क्या ग्राहक मंच या भाषा का उपयोग कर रहे उल्लेख नहीं है, इसलिए मैं विशिष्ट API आप का प्रयोग करेंगे सलाह नहीं दे सकते। मैं आपको जिस भाषा का उपयोग कर रहा हूं उसके आधार पर आपको "फायरबर्ड इवेंट जावा" या "फायरबर्ड इवेंट php" या इसी तरह के उदाहरण के लिए Google का सुझाव देता है।

http://www.firebirdsql.org/index.php?op=devel&sub=netprovider&id=examples#3


:


जब से तुम एक टिप्पणी है कि आप WPF का उपयोग कर रहे में कहते हैं, यहाँ कुछ .NET अनुप्रयोग एक घटना की अधिसूचना के लिए पंजीकरण कोड का एक कोड नमूना के लिए एक लिंक है

अपनी टिप्पणी पुन: हाँ, Firebird घटना तंत्र जानकारी ले जाने के लिए अपनी क्षमता में सीमित है। यह जरूरी है क्योंकि किसी भी जानकारी को ले जाया जा सकता है या वापस लुढ़का जा सकता है। उदाहरण के लिए यदि कोई ट्रिगर एक ईवेंट पोस्ट करता है लेकिन फिर ट्रिगर उत्पन्न करने वाला ऑपरेशन एक बाधा का उल्लंघन करता है, ऑपरेशन को रद्द करता है लेकिन घटना नहीं। तो घटनाएं केवल एक तरह का "संकेत" हो सकती हैं कि कुछ ब्याज हो सकता है। अन्य ग्राहकों को उस समय अपने डेटा को रीफ्रेश करने की आवश्यकता है, लेकिन उन्हें यह नहीं बताया जाता कि क्या देखना है। यह मतदान से कम से कम बेहतर है।

तो आप मूल रूप से एक प्रकाशन/सब्सक्राइब तंत्र का वर्णन कर रहे हैं - संदेश कतार। मुझे यकीन नहीं है कि मैं एक संदेश कतार लागू करने के लिए एक आरडीबीएमएस का उपयोग करूंगा। यह किया जा सकता है, लेकिन आप मूल रूप से पहिया reinventing कर रहे हैं।

  • Microsoft MSMQ
  • RabbitMQ (खुले मुक्त स्रोत)
  • Apache ActiveMQ (विंडोज व्यावसायिक और सर्वर संस्करण का हिस्सा प्रतीत हो रहा है):

    यहाँ कुछ संदेश कतार उत्पादों है कि अच्छी तरह से माना जाता है कर रहे हैं (खुले मुक्त स्रोत)

  • IBM WebSphere MQ (शायद आपके मामले में overkill)

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

+0

धन्यवाद, मुझे घटनाओं से अवगत था, मेरे साथ जो मुद्दा है, वह जान रहा है कि पंक्तियां क्या बदल गई हैं, इसलिए जब भी मुझे कोई ईवेंट प्राप्त होता है तो मैं सर्वर डेटा के साथ क्लाइंट डेटा की तुलना करने से बच सकता हूं। क्या आपको लगता है कि शायद मुझे एक संग्रहित प्रक्रिया को आवेषण/अद्यतन/हटाना चाहिए जो एक अलग तालिका में नवीनतम परिवर्तन भी लिखता है जिसे मैं एक घटना प्राप्त करते समय पूछताछ कर सकता हूं? – luvieere

1

SQL सर्वर 2005 और अधिक समर्थन अधिसूचना आधारित डेटा स्रोत कैशिंग समाप्ति।

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