जब डेटाबेस में बदलाव (इन्सर्ट, अपडेट, डिलीट) होता है तो रियल टाइम नोटिफिकेशन कैसे प्राप्त करें?


13

मैं एक डैशबोर्ड बना रहा हूं, जिसे डेटाबेस टेबल पर नजर रखनी चाहिए। मेरे पास केवल डेटाबेस एक्सेस (कोई एप्लिकेशन परत नहीं है)। तालिका बड़ी है (10 मिलियन पंक्तियाँ), हालांकि तेजी से नहीं बदल रही है (प्रति मिनट 100 आवेषण / अपडेट)

मैं कैसे पता लगा सकता हूं कि क्या तालिका बदल गई है? मैं हर सेकंड डेटाबेस को हिट करने की कोशिश करूंगा, लेकिन यह एक क्रूर-बल दृष्टिकोण की तरह लगता है ...

डेटाबेस: MySQL / Postgres


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

टिप्पणी के लिए धन्यवाद। लेकिन नाग कैसे मदद कर सकता है? मेरे पास केवल डेटाबेस एक्सेस है। मैं दूरस्थ मशीनों पर कुछ भी स्थापित नहीं कर सकता।
किरिल

3
क्या आप वास्तव में अधिसूचित होना चाहते हैं - वास्तविक समय में - जब भी कोई पंक्ति डाली जाती है या अपडेट की जाती है? फिर से विचार करना।
ट्यूलेंस कोर्डोवा

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

मेरे पास एक छोटा mysql प्लगइन है जो यह करता है: github.com/Cyclonecode/mysql-notification
Cyclonecode

जवाबों:


9

आप ट्रिगर्स का उपयोग कर सकते हैं।

CREATE TRIGGER notifyMe
ON table1
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'DB AutoMailer',
        @recipients = 'user@example.com',
        @body = 'The DB has changed',
        @subject = 'DB Change';
GO

मुझे यकीन नहीं है कि यह हर सेकंड डेटाबेस को हिट करने से बेहतर होगा, या क्या आप मेल में पूरा बदलाव भेजेंगे, और डैशबोर्ड सॉफ्टवेयर को ईमेल को पार्स करने देंगे?
किरिल

1
आप 'सम्मिलित', 'अपडेट' और 'हटाए गए' तालिकाओं से चुनकर विशिष्ट परिवर्तित मान प्राप्त कर सकते हैं, और आप आईडी को शरीर में जोड़ सकते हैं।
stechray

2
ईमेल भेजने के बजाय, आप एक संग्रहीत कार्यविधि भी कह सकते हैं जो एक वेब एपि से जुड़ती है जो डैशबोर्ड का समर्थन करता है। विवरण के लिए यहां देखें: फ़ोरम .asp.net
t

3
या ट्रिगर्स ने एक अतिरिक्त तालिका में डेटा डाला है जिसे आप तब (और खाली) अंतराल पर चाहते हैं जो आप चाहते हैं। तकनीकी रूप से 'वास्तविक समय' नहीं है, लेकिन इसे देखने के लिए बनाया जा सकता है।
जनवरी को Jan Doggen

1
ट्रिगर एक मैसेजिंग ब्रोकर पर एक कतार (या विषय) पर अद्यतन जानकारी को ट्रिगर करें। यह हमेशा से मेरा पसंदीदा दृष्टिकोण रहा है। इस तरह से आपके पास ट्रिगर में कोई जटिल तर्क नहीं है, और जब आप इसे प्राप्त करते हैं तो आपके पास संदेश के साथ बहुत लचीलापन होता है। और यदि आप एक पब / उप विषय पर जोर देते हैं, तो आप कई उपभोक्ताओं को प्राप्त कर सकते हैं और इसके साथ अलग-अलग काम कर सकते हैं।
माइंडक्राइम

3

PostgreSQL के लिए मुझे डेटाबेस से सूचना प्राप्त करने का एक तरीका पता है जब एक पंक्ति बदलती है।

  1. आवेषण / अपडेट / डिलीट होने पर ट्रिगर का उपयोग करें।
  2. जब घटना होती है तो क्लाइंट सॉकेट को एक सूचना भेजें।
  3. सुनिश्चित करें कि आप अनुप्रयोग सर्वर के लिए एक ग्राहक है।
  4. तब आपके ऐप को एक सूचना प्राप्त होगी।

आप मेरा कोड या PostgreSQL के दस्तावेज़ देख सकते हैं ।

ऐसा लगता है कि अधिसूचना एक विश्वसनीय अधिसूचना नहीं है, लेकिन कम से कम यह मेरे लिए काम करती है।


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