क्या एक डेटाबेस से ऐप के डेटा को अपडेट करने का एकमात्र तरीका मतदान है?


17

एक एप्लिकेशन को डेटाबेस से जितना संभव हो उतना ताजा अपडेट किया जाना चाहिए। ऐसे मामले में, क्या डेटा प्राप्त करने के लिए टाइमर आधारित अनुरोध (मतदान) के अलावा कोई और तरीका है?

मैं एक MS SQL Server 2008 (और .NET एप्लिकेशन + एंटिटी फ्रेमवर्क) के साथ काम करता हूं, लेकिन मैं अन्य प्रकार के डेटाबेस के बारे में भी जानना चाहता हूं।


Microsoft StreamInsight को विशेष रूप से "डेटा इवेंट" आधारित प्रोसेसिंग को सक्षम करने के लिए डिज़ाइन किया गया है। मैं इसके बारे में ज्यादा नहीं जानता, लेकिन यह SQL सर्वर की एक व्यक्तिगत विशेषता के बजाय एक पूर्ण और स्वतंत्र मंच जैसा दिखता है। यहाँ एक StreamInsight वास्तुकला आरेख है
निक चामास

जवाबों:


5

SQL Server 2005+ के लिए सेवा ब्रोकर यह कर सकता है।

क्षमा करें, मुझे अन्य RDBMS का यकीन नहीं है


2
क्या आप इस बारे में विस्तार से बता सकते हैं कि सेवा ब्रोकर यह कैसे करता है? @rem एक डेटाबेस से घटना-ट्रिगर (समय-ट्रिगर के विपरीत) अपडेट प्राप्त करने के बारे में पूछ रहा है। एसबी कतार और एसाइसी प्रसंस्करण के लिए है।
निक चामास

1
-1 सेवा ब्रोकर के पास ऐसा कुछ भी नहीं है जिससे किसी ऐप को पता चल सके कि उसे कोई संदेश मिला है। (मैं वर्तमान में इस मुद्दे पर फंस गया हूं।)
वैकैनो

10

Oracle में आप इसे सुविधाजनक बनाने के लिए DBMS_ALERT पैकेज में निर्मित का उपयोग कर सकते हैं ।

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

मान लीजिए कि एक ग्राफिक्स टूल डेटाबेस टेबल से कुछ डेटा का ग्राफ प्रदर्शित कर रहा है। ग्राफिक्स टूल, डेटा को पढ़ने और रेखांकन के बाद, केवल पढ़ने के लिए डेटा को कवर करने वाले डेटाबेस अलर्ट (WAITONE) पर प्रतीक्षा कर सकता है। किसी अन्य उपयोगकर्ता द्वारा डेटा बदले जाने पर टूल स्वचालित रूप से जाग जाता है। यह आवश्यक है कि जब भी ट्रिगर निकाल दिया जाए तो एक संकेत डेटाबेस टेबल पर रखा जाए, जो सिग्नल (SIGNAL) करता है।


और OP प्रश्न के अनुसार "MS SQL Server 2008" के लिए? उन्होंने अन्य RDBMS के लिए कहा लेकिन यह वास्तव में मदद नहीं करता है।
gbn

9
@ क्यों यह मदद नहीं करता है? मैं आपके जैसे SQL सर्वर भाग का उत्तर नहीं दे सकता, इसलिए मैंने उस भाग का उत्तर दिया जो मैं कर सकता था। कोई भी अन्य सभी डेटाबेस पर एक विशेषज्ञ नहीं है, लेकिन अगर हम प्रत्येक हमारे ज्ञान का योगदान करते हैं तो ओपी और भविष्य के आगंतुकों को उपयोगी जानकारी मिलेगी। मुझे उम्मीद है कि ओपी एक एसक्यूएल सर्वर उत्तर को स्वीकार करेगा और स्कॉटचेयर (+1) जैसे अन्य उपयोगी उत्तर देगा।
लेह रिफ़ेल

सही कहा। आपके DBMS_ALERT उत्तर को पढ़ने के बाद, मैंने ऐसा करने का एक और तरीका सीखा - टूलबॉक्स के लिए अधिक उपकरण! +1
स्कॉटिश मैर

7

कुछ डेटाबेस विक्रेता एकीकृत संदेश बसें भी प्रदान करते हैं जिन्हें आपका ऐप केवल सदस्यता दे सकता है:

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


7

PostgreSQL के लिए LISTEN / NOTIFY

http://www.postgresql.org/docs/current/static/sql-notify.html

डेटाबेस में ...

NOTIFY static_channel_name, 'static-message';

या एक समारोह में / ट्रिगर:

perform pg_notify('dynamic-channel-name', 'dynamic-message');

डेटाबेस क्लाइंट में:

LISTEN some_channel_name; --note the lack of quotes

LISTEN क्लाइंट को PostgreSQL प्रक्रिया ID, चैनल नाम और संदेश मान प्राप्त होगा।

PostgreSQL के लिए मानक JDBC ड्राइवर को सूचनाएं पसंद नहीं हैं, हालांकि आप इस उद्देश्य के लिए https://github.com/impossibl/pgjdbc-ng ड्राइवर का उपयोग कर सकते हैं


5

एक अन्य ओरेकल समाधान: हमने Microsoft से डॉटनेट ढांचे का उपयोग करके एप्लिकेशन विकसित किए हैं जो ओडीपी.नेट (डॉटनेट के लिए ओरेकल डेटा प्रदाता) के साथ मिलकर Oracle के डाटाबेस चेंज नोटिफिकेशन फीचर का लाभ उठाते हैं । इसका उपयोग करते हुए, डेटाबेस वास्तव में डॉटनेट एप्लिकेशन को सूचित करता है जब नया डेटा आ गया है जिससे हम निरंतर मतदान से बच सकते हैं। मैं जिस लिंक का संदर्भ देता हूं, वह सिर्फ करने के लिए एक Oracle ट्यूटोरियल है। इससे आपको मदद मिलने की आशा है।

किसी अन्य RDBMS के बारे में नहीं जानते।


2

हमारे अनुप्रयोगों में से एक के लिए (गर्त क्रोम और केवल क्रोम तक पहुँचा), हम sys_exec UDF के साथ MySQL का उपयोग कर रहे हैं । मूल रूप से, क्यों Chrome - WebSocket समर्थन के कारण।

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


1

हम Oracle गोल्डनगेट और जावा पर्सिस्टेंस API (JPA) के संयोजन का उपयोग Oracle डेटाबेस के साथ करते हैं, लेकिन DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, आदि के साथ भी। इस सुविधा का वर्णन यहाँ किया गया है: http: // docs .oracle.com / मिडलवेयर / 1212 / जुटना / COHIG / golden_g.htm

गोल्डनगेट जो करता है वह डेटाबेस ट्रांजेक्शन लॉग को फ़िल्टर करने योग्य इवेंट स्ट्रीम में बदल देता है जिसे पूरे नेटवर्क में कहीं भी उपभोग किया जा सकता है। हम इसका उपयोग प्रासंगिक लेन-देन को कैश अपडेट या कैश अमान्यताओं में बदलने के लिए करते हैं, जो दोनों एप्लिकेशन-स्तर की घटनाओं को ट्रिगर कर सकते हैं, जैसे कि डेटा को डेस्कटॉप या HTML5 वेबसोकेट अनुप्रयोगों के लिए सभी तरह से धकेलना।

(पूर्ण प्रकटीकरण के लिए, मैं गोल्डनगेट का उपयोग करने वाले उत्पादों में से एक पर ओरेकल पर काम करता हूं।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.