2012-10-11 32 views
6

मैं निम्नलिखित विशेषताओं के साथ एक वास्तविक समय आवेदन पर काम कर रहा हूँ:चुनना/उच्च throughput, विश्वसनीय, लगातार लिखने प्रवाह क्षमता, त्याग के लिए एक डाटाबेस को विन्यस्त विलंबता

  • ग्राहकों के सैकड़ों डालने पंक्तियों हो जाएगा/दस्तावेज एक ही समय में, प्रत्येक प्रत्येक सेकंड में एक पंक्ति डालने वाला होता है।
  • बड़े पैमाने पर केवल संलग्न करें; एक बार डाली गई लगभग सभी पंक्तियां/दस्तावेज कभी नहीं बदले जाते हैं।
  • किसी ग्राहक को केवल सफलता दिखाई देनी चाहिए जब डेटा डिस्क पर फ़्लश किया गया था, और उसके बाद पढ़ने-लिखने की स्थिरता को पकड़ना चाहिए।
  • ग्राहक पुष्टि के लिए सेकंड के आदेश पर प्रतीक्षा करने के इच्छुक हैं - कई डिस्क के लिए पर्याप्त लंबे समय तक पूछने और लिखने के लिए पर्याप्त है।
  • रैम में फ़िट होने के लिए बहुत अधिक डेटा है (रेडिस जैसे विकल्पों को रद्द करना)। लेकिन लिखित लंबी पंक्तियों को शायद ही कभी पहुंचाया जाता है, इसलिए यह स्मृति में नहीं है।
  • आदर्श रूप से, इन लिखते हैं पढ़ने को ब्लॉक नहीं करना चाहिए।
  • एक कुंजी-मूल्य स्टोर ठीक है, लेकिन कम से कम एक विश्वसनीय ऑटो-वृद्धि सूचकांक होने की आवश्यकता है।

दूसरे शब्दों में (और टीएल; डॉ), ग्राहक विलंबता सहन कर सकते हैं, लेकिन उन्हें बहुत भरोसेमंद लेखन थ्रूपुट की आवश्यकता है - "एक लिखना एक डिस्क ऑपरेशन है" से अधिक थ्रूपुट।

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

मुझे लगता है कि इस तरह की उच्च विलंबता सहनशीलता के साथ, यह बहुत ज्यादा नहीं पूछ रहा है। और मैं कल्पना करता हूं कि दूसरों को यह समस्या है, जैसे कि वित्तीय कंपनियां जो डेटा खोने का जोखिम नहीं उठा सकती हैं, लेकिन किसी एक ग्राहक को प्रतिक्रिया देरी कर सकती हैं।

पोस्टग्रेज़, कॉच डीबी/कॉचबेस, या मोंगोडीबी जैसे ऑपरेशन के किसी भी युद्ध-परीक्षण डेटाबेस समाधान इस तरह के ऑपरेशन के तरीके हैं?

उत्तर

11

PostgreSQL को इस वर्कलोड को अच्छी तरह फिट करना चाहिए; आपने जो कुछ भी निर्दिष्ट किया है वह आपके सामान्य फीचर सेट के भीतर है। पीजी एसीआईडी ​​अनुपालन है, सिंक ओवरहेड को कम करने के लिए समूह प्रतिबद्धता का समर्थन करता है, लेखक पाठकों को अवरुद्ध नहीं करते हैं, और यह कैशिंग के लिए ओएस का उपयोग करता है, इसलिए यह स्वाभाविक रूप से स्मृति में केवल गर्म डेटा सेट रखने के लिए होता है।

"ग्राहक पुष्टि के लिए सेकंड के आदेश पर इंतजार करने को तैयार हैं - लंबी कई डिस्क के लिए पर्याप्त चाहता है और ऐसा करने के लिए लिखते हैं,"

हैं PostgreSQL पर विचार आपके आवेदन आदर्श रूप से एक वास्तव में बड़ी लिए अनुकूल है commit_delay, जो लेखन थ्रूपुट के साथ अत्यधिक मदद करेगा। आप synchronous_commit = off का उपयोग नहीं कर सकते हैं क्योंकि आपको उत्तर से पहले प्रतिबद्धता की पुष्टि की आवश्यकता है, लेकिन आप केवल सिंक लागतों को बचाने के लिए कुछ सेकंड के लिए कतारबद्ध हो सकते हैं।

यदि आप इस तरह की नौकरी के लिए पीजी का उपयोग करते हैं तो चेकपॉइंटिंग को ट्यून करने की आवश्यकता है ताकि यह सुनिश्चित किया जा सके कि चेकपॉइंट I/O स्टॉल नहीं करते हैं। सुनिश्चित करें कि bgwriter आक्रामक रूप से गंदे बफर लिख रहा है। सुनिश्चित करें autovaccum अक्सर चल रहा है - आप टेबल से हटाया जा रहा नहीं कर रहे हैं, लेकिन अभी भी अनुक्रमित रखरखाव की जरूरत है, और इसलिए तालिका आंकड़े करते हैं।

आप बहुत सारे डेटा की और आपके प्रश्नों आशा रखते हैं तो आम तौर पर एक अस्थायी तत्व है, (जैसे कि) 1 वर्ष के लिए 1 महीने की टुकड़ों में partitioning the table पर विचार, वार्षिक आधार पर विभाजित तालिका में सब कुछ 12 महीने से अधिक पुराने को मजबूत बनाने। Pg केवल सीमित है निर्मित विभाजन (यह एक साथ अनाधिकृत प्रवेश किया है विरासत और बाधा बहिष्कार का प्रयोग करके) तो आप हाथ/लिपि चलाता का उपयोग करके यह करने के लिए है, लेकिन यह काम करता है।

देखें:

+0

वास्तव में इस सवाल का जवाब मैं खोज रहा था के प्रकार! मैं थोड़ा प्रलेखन द्वारा बंद कर दिया कह 'सभी प्रतिबद्ध लंबित डेटा इस सेटिंग की परवाह किए बिना हर फ्लश में लिखा जाएगा के बाद से, यह इस पैरामीटर बढ़ रही है वास्तव में performance' में सुधार होगा द्वारा देरी कहा कि दुर्लभ है हूँ - लेकिन मुझे लगता है कि यह सोचते कर रहा हूँ मेरा उपयोग मामला उन 'दुर्लभ' मामलों में से एक है? किसी भी दर पर, मुझे इस पर बहुत कुछ पढ़ना होगा और परीक्षण/ट्यूनिंग करना होगा, लेकिन यह बहुत ही आशाजनक दिखता है। – btown

+0

@btown आपको निश्चित निर्णय लेने से पहले निश्चित रूप से परीक्षण और बेंचमार्क की आवश्यकता है। मुझे लगता है कि दस्तावेज़ों में थोड़ा सा अस्पष्ट है; मुझे संदेह है कि यह इस तथ्य को संदर्भित कर सकता है कि किसी भी देरी से जुड़ी प्रतिबद्धता से देरी हो सकती है जिससे डिस्क पर भी फ्लश हो जाता है। मुझे आपके परिणामों में दिलचस्पी होगी। –

+0

@btown बीटीडब्ल्यू, इस तरह के वर्कलोड के लिए आप जो भी सबसे अच्छी चीज कर सकते हैं यह सुनिश्चित करना है कि आपके स्टोरेज में बहुत तेज़ सिंक हो। बैक-बैक मोड में बैटरी समर्थित कैश वाला RAID नियंत्रक सबसे सस्ता विकल्प है। आप उस अंतर पर विश्वास नहीं करेंगे जो इसे बनाता है। एक अच्छा SAN pricier विकल्प है। आप जो कुछ भी करते हैं, ईसी 2 की तरह कुछ इस तरह के वर्कलोड को चलाएं * नहीं। यदि आप बीबीयू के साथ एक RAID नियंत्रक का उपयोग करते हैं तो वे सभी समान नहीं हैं; बेंचमार्क या pgsql- सामान्य मेलिंग सूची पर पूछें। यह सुनिश्चित करने के लिए कि बैटरी अभी भी काम करती है, एक का उपयोग करके समय-समय पर अपने बीबीयू का परीक्षण करें। –