2016-02-12 12 views
7

मैं एक वेब एप्लिकेशन बना रहा हूं जो संक्षेप में SQL सर्वर में और नोड के माध्यम से काफी खराब संरचित डेटा ले रहा है। जेएस इसे मोंगोडीबी पर भेज रहा है। मुझे इसकी आवश्यकता यह है कि मुझे एक बेहद खराब लिखित आवेदन से डेटा तक पहुंच की आवश्यकता है जो कि संगठन के लिए केंद्रीय है, मेरे पास पर कोड बदलने की क्षमता नहीं है, जिससे प्रारंभिक डेटा दर्ज हो रहा है। एक बार अनुवाद करने के बाद, मैं अपना आवेदन कर सकता हूं जो व्यवसाय ढूंढ रहा है।एसक्यूएल सर्वर रीयलटाइम पुश नोटिफिकेशन नोड.जेएस

अभी मेरा आवेदन परिवर्तन के लिए हर 30 मिनट में SQL सर्वर मतदान कर रहा है और फिर मेरे MongoDB को नोड.जेएस के माध्यम से अपडेट कर रहा है, और डेटा की मात्रा के कारण, यह अधिक बार मतदान के लिए अवांछनीय है।

क्या मैं ऐसा करने की जरूरत है एसक्यूएल सर्वर किसी तरह कि क्या सक्रिय या निष्क्रिय नहीं Node.js के अंत इतना है कि यह मेरी मोंगो डेटाबेस को अद्यतन कर सकते हैं में अपने Node.js आवेदन करने के लिए धक्का दिया से वास्तविक समय सूचनाएं है।

मैं डेटा प्राप्त करने का उपयोग कर रहा नोड पुस्तकालय है: https://github.com/patriksimek/node-mssql

कुछ संभव विचारों मैं गया था:

  • Have एसक्यूएल सर्वर मेरी NodeJS HTTP सेवा करने के लिए किसी तरह के सूचना भेजने के बाद एंडपॉइंट
  • क्या नोडजेएस एक स्ट्रीमिंग क्वेरी चलाता है जो प्रत्येक बार परिवर्तन किए जाने पर मेरे अंत में चलाएगा
  • सी # में एक एप्लिकेशन लिखें जो इन परिवर्तनों को देखता है और उन्हें मेरे नोडजेएस HTTP एंडपॉइंट पर धक्का देता है।

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

+0

संपादन @JamesZ के लिए धन्यवाद, मुझे वास्तव में XD – Nitroware

+1

से अधिक स्मार्ट बनाने के लिए धन्यवाद यह वास्तव में एक महत्वपूर्ण सवाल है। मेरी इच्छा है कि इसे अधिक ध्यान दिया जाए। –

उत्तर

0

मुझे यह कहकर प्रस्तावना होगा कि मेरे पास वास्तविक समय समाधान नहीं है। यदि वास्तविक समय समाधान है, तो मुझे यह नहीं पता। मैं सिर्फ मतदान के भार को कम करने के बारे में बात करने जा रहा हूं।

मुझे लगता है कि आपके पास SQL ​​सर्वर पर नियंत्रण है। आप परिवर्तनों का ट्रैक रखने के लिए SQL सर्वर में कुछ सेट अप कर सकते हैं और केवल नोड द्वारा खींचे गए परिवर्तनों को देखने के लिए मतदान प्राप्त कर सकते हैं।

क्या आपके पास अद्यतन/सम्मिलन प्रक्रिया पर नियंत्रण है? यदि आप करते हैं, तो आसान, डालने/अपडेट कोड के साथ परिवर्तन ट्रैकिंग कोड डाल दें। मुझे लगता है कि आप ऐसा नहीं करते हैं, इस मामले में, मैं triggers में देखकर * अनुशंसा करता हूं। ये मूल रूप से टेबल श्रोताओं से जुड़े ईवेंट श्रोताओं हैं जो आपको तालिका के सम्मिलित/अद्यतन के पहले या उसके बाद एसक्यूएल निष्पादित करने की अनुमति देते हैं, और आपको deleted और inserted तालिकाओं का उपयोग करके परिवर्तित/डालने वाले डेटा तक पहुंच प्रदान करते हैं।

* ट्रिगर्स कारणों के क्रोध के लिए SQL सर्वर समुदाय द्वारा पसंद नहीं किया गया है, जिनमें से कुछ पर on this SQLServerCentral article पर चर्चा की गई है। चीजों की जड़: उन्हें डीबग करना मुश्किल होता है, वे प्रदर्शन को धीमा कर देते हैं क्योंकि वे लिखने के संचालन का हिस्सा बन जाते हैं, और सर्कुलर ट्रिगर्स बनाने के लिए सावधान रहें (तालिका 1 अपडेट किया गया है जो ट्रिगर 1 को ट्रिगर करता है, जो तालिका 1 को अद्यतन करता है, जो ट्रिगर 1 को ट्रिगर करता है।)। इस प्रकार, यदि आप किसी तालिका पर ट्रिगर्स का उपयोग करके परिवर्तन ट्रैकिंग कर रहे हैं, तो एक अलग तालिका बनाएं जिसमें उन परिवर्तनों को ट्रैक किया गया हो, और केवल ट्रिगर को उस तालिका को अपडेट/डालने दें

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

यह एक आदर्श समाधान नहीं है और यह बहुत काम हो सकता है, इसलिए शायद कुछ समय इंतजार करना और बेहतर समाधान के साथ आता है या नहीं।

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