मैं कैसे गारंटी दे सकता हूं कि SQL Server 2008 R2 में आवेषण पहले RAM में कैश किए जाते हैं?


17

डेटा की एक धारा की कल्पना करें जो "बर्फ़ीली" है, यानी इसमें 10,000 घटनाएं बहुत तेज़ी से आ सकती हैं, इसके बाद एक मिनट के लिए कुछ भी नहीं होगा।

यहां छवि विवरण दर्ज करें

आपकी विशेषज्ञ सलाह: मैं SQL सर्वर के लिए C # इन्सर्ट कोड कैसे लिख सकता हूं, ऐसी कोई गारंटी है कि SQL अपनी रैम में तुरंत सब कुछ ठीक कर देता है, बिना मेरे ऐप को ब्लॉक किए बिना इससे अधिक डेटा को रैम में फीड करने के? इसे प्राप्त करने के लिए, क्या आप स्वयं SQL सर्वर की स्थापना के लिए किसी भी पैटर्न के बारे में जानते हैं, या जो पैटर्न मैं लिख रहा हूँ, उसे अलग-अलग SQL टेबल सेट करने के लिए?

बेशक, मैं अपना खुद का संस्करण कर सकता था, जिसमें रैम में अपनी खुद की कतार का निर्माण शामिल है - लेकिन मैं पेलियोलिथिक स्टोन एक्स को सुदृढ़ नहीं करना चाहता, इसलिए बोलने के लिए।


1
क्या आप C # क्लाइंट कोड के बारे में बात कर रहे हैं? तो क्या आप SQL कोड में रुचि रखते हैं जो यह सुनिश्चित करता है कि लिखता है कैश किया गया है?
रिचर्ड

6
अगर आरडीबीएमएस इसका समर्थन नहीं करता है, तो मैं खुद को ईवीएन में सम्मिलित करने के लिए इच्छुक हूं क्योंकि (ए) यह मुश्किल नहीं है, (बी) यह पूरी तरह से आपके नियंत्रण में है, और (सी) यह निर्भर नहीं है।

मैं C # क्लाइंट कोड में दिलचस्पी रखता हूं जिसमें यह सुनिश्चित करने के लिए SQL कोड शामिल है कि कैश किया गया है। हालाँकि, मुझे यकीन है कि मैं सीधे T-SQL के साथ काम कर सकता हूँ और अपना C # आवरण लिख सकता हूँ।

जवाबों:


11

क्या आपने सिर्फ लिखने की कोशिश की है और देखें कि क्या होता है? क्या आपके पास एक ज्ञात अड़चन है?

यदि आपको अपने ऐप को ब्लॉक होने से रोकने की आवश्यकता है, तो आप एक तरह से डेटाबेस कॉल को स्थगित करने के लिए राइट्स को कतार में रखेंगे। हालाँकि, मुझे उम्मीद है कि कतार दूसरी या 2 में साफ़ हो जाएगी: तो क्या आपको कतार की आवश्यकता है अगर यह ठीक है?

या आप एक स्टेजिंग टेबल पर घूम सकते हैं और फिर बाद में फ्लश कर सकते हैं? हम प्रति मिनट लाखों नई पंक्तियों के निरंतर लिखने से निपटने के लिए इस तकनीक का उपयोग करते हैं (हम वास्तव में साधारण वसूली के साथ एक मचान DB का उपयोग करते हैं): लेकिन हमने इसे तब तक लागू नहीं किया जब तक हमें सिर्फ पंक्तियों को लिखने का अनुभव नहीं था।

नोट: एसक्यूएल सर्वर में हर लिख लिख आगे लॉगिंग (वाल) प्रोटोकॉल के हिस्से के रूप में डिस्क जाएगा । यह उस लेखन के लिए टी-लॉग प्रविष्टि पर लागू होता है।

पंक्ति वाला डेटा पृष्ठ कुछ बिंदु पर डिस्क पर जाएगा (समय, उपयोग, मेमोरी दबाव आदि के आधार पर), लेकिन आम तौर पर आपका डेटा वैसे भी मेमोरी में होगा। इसे "चेकपॉइंटिंग" कहा जाता है और यह मेमोरी से डेटा को बाहर नहीं निकालता है, बस परिवर्तन को फ्लश करता है (संपादित 24 नवंबर 2011)

संपादित करें:

ऊपर दिए गए अंतिम पैराग्राफ के आधार पर, पूरे विचार के लिए, इस डेटाबेस के लिए अपने LDF को अधिक प्रदर्शन के लिए डिस्क के एक समर्पित सेट में स्थानांतरित करें। डिट्टो एक स्टेजिंग डेटाबेस (एमडीएफ / एलडीएफ के लिए प्रत्येक)। आपके डेटाबेस सर्वर के लिए एक दर्जन या 3 अलग-अलग वॉल्यूम (SAN के माध्यम से सामान्य रूप से) होना काफी आम है


1
स्टेजिंग टेबल पर स्पूल करना शायद जाने का सबसे अच्छा तरीका है। मैंने अपने एक दोस्त से भी पुष्टि की है, जो बिलियन रो टेबल के साथ एक वातावरण में काम करता है, उसने कहा कि वह तेजी से विश्लेषण के लिए टेम्प टेबल का उपयोग करता है।

7

जब तक मैं कुछ याद नहीं कर रहा हूं, यह ACID ( http://en.wikipedia.org/wiki/ACID ) से स्थायित्व की आवश्यकता का उल्लंघन करेगा । यही है, अगर आपका एप्लिकेशन रैम को डेटा लिखता है और फिर सर्वर क्रैश हो जाता है, तो आपका डेटा खो जाता है।

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


+1 मुझे इसका उल्लेख करना चाहिए था।
AC

2

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

सादर

पायोत्र

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