मैं एक CLR समारोह या प्रकार कि कॉल सेवा सफलतापूर्वक के बाद डालने/अद्यतन करने/हटाने से से डेटा तालिकाओं के बारे में कुछ करने के विचार पर विचार। क्या यह स्थिति में भी अच्छा है?
शायद यह एक अच्छा विचार नहीं है, लेकिन मुझे लगता है कि यह तालिका ट्रिगर नरक में आने से भी बेहतर है।
मुझे लगता है कि आपकी समस्या यह है कि आप प्रत्येक डेटा संशोधन के बाद कुछ करना चाहते हैं, मान लीजिए, कुछ मूल्य या जो कुछ भी पुन: गणना करें। डेटाबेस को इसके लिए उत्तरदायी होने देना एक अच्छा विचार नहीं है क्योंकि इसका प्रदर्शन पर गंभीर प्रभाव पड़ सकता है।
आपने बताया कि आप विभिन्न तालिकाओं पर आवेषण, अद्यतन और हटावट का पता लगाना चाहते हैं। जिस तरह से आप झुका रहे हैं, उसे करने के लिए आपको प्रति टेबल तीन ट्रिगर/सीएलआर फ़ंक्शंस सेट अप करने की आवश्यकता होगी और उन्हें अपनी डब्लूसीएफ सेवा में एक ईवेंट पोस्ट करना होगा (क्या यह एसक्यूएल सर्वर के अंदर उपलब्ध .NET के सबसेट में भी समर्थित है?)। डब्ल्यूसीएफ सेवा प्राप्त घटनाओं के आधार पर उचित कार्रवाई करता है।
समस्या के लिए एक बेहतर समाधान आपके डेटाबेस से डेटा संशोधन का पता लगाने के लिए जिम्मेदारी को आगे बढ़ाएगा। यह वास्तव में बहुत आसानी से और कुशलता से लागू किया जा सकता है।
प्रत्येक तालिका में प्राथमिक कुंजी (int, GUID या जो कुछ भी) और एक टाइमस्टैम्प कॉलम होता है, जो इंगित करता है कि प्रविष्टि आखिरी बार अपडेट की गई थी। यह एक ऐसा सेटअप है जिसे आप आशावादी समवर्ती परिदृश्यों में अक्सर देखेंगे, इसलिए आपकी स्कीमा परिभाषाओं को अपडेट करना भी आवश्यक नहीं हो सकता है। हालांकि, यदि आपको इस कॉलम को जोड़ने की आवश्यकता है और डेटाबेस का उपयोग कर एप्लिकेशन पर टाइमस्टैम्प अपडेट करना बंद नहीं कर सकता है, तो आपको प्रत्येक अपडेट के बाद टाइमस्टैम्प अपडेट करने के लिए प्रति टेबल एक अपडेट ट्रिगर लिखना होगा।
संशोधनों का पता लगाने के लिए, आपकी डब्ल्यूसीएफ सेवा/निगरानी अनुप्रयोग एक प्राथमिक समय/अंतराल पर जोड़े के साथ प्राथमिक कुंजी/टाइमस्टैम्प जोड़े के साथ स्थानीय डिक्शनरी (अधिमानतः एक हैशटेबल) बनाता है। डेटाबेस में कवरेज इंडेक्स का उपयोग करके, यह ऑपरेशन वास्तव में तेज़ होना चाहिए। अगला कदम दोनों शब्दकोशों और वॉयला की तुलना करना है, वहां आप जाते हैं।
हालांकि इस दृष्टिकोण के लिए कुछ चेतावनी हैं। उनमें से एक प्रति तालिका रिकॉर्ड का योग है, दूसरा अपडेट अपडेट आवृत्ति है (यदि यह बहुत कम हो जाता है तो यह अप्रभावी है) और फिर भी एक और पिनपॉइंट है यदि आपको संशोधन/सम्मिलन के पिछले डेटा तक पहुंच की आवश्यकता है।
उम्मीद है कि इससे मदद मिलती है।
मेरे मामले में, मेरे पास डेटाबेस तक सीधी पहुंच नहीं है लेकिन डेटाबेस में टेबल तक पहुंच है। क्या ब्रोकर कतार अभी भी मेरे मामले में समझ में आएगी? मुझे जो चाहिए वह परिवर्तनों (आवेषण, अद्यतन, हटाए गए) के लिए विशिष्ट तालिकाओं को मतदान करने का एक तरीका है, और फिर आगे की प्रक्रिया के लिए परिणामस्वरूप एक घटना को आग लगाना। मैंने सीएलआर फ़ंक्शन या उस तरह के कुछ विचारों पर विचार किया जो टेबल से डेटा को सफलतापूर्वक डालने/अपडेट करने/हटाने के बाद सेवा को कॉल करता है। क्या यह इस स्थिति में भी अच्छा है? एसक्यूएल-सीएलआर लिखने के लिए – Kobojunkie
आपको डेटाबेस में सीधे पहुंच की आवश्यकता है। वास्तव में, आप खुद के विरोधाभास कर रहे हैं ?! –