2012-10-17 7 views
6

हमारे सिस्टम में प्रदर्शन कारणों के लिए पूरी तरह से स्मृति (लगभग 10 जीबी) में रखे गए मॉडल (कई प्रकार के रिश्तों के साथ लगभग 30 विभिन्न संस्थाएं) संरचित मॉडल हैं। इस मॉडल हम आपरेशन के 3 प्रकार क्या करना है पर:क्या किसी को स्मृति और सीक्यूआरएस में एक बड़े मॉडल के साथ विघटनकर्ता (एलएमएक्स) का उपयोग करना चाहिए?

  1. अद्यतन एक या कुछ संस्थाओं के लिए एक विशेष डेटा के लिए
  2. क्वेरी
  3. सांख्यिकीय आंकड़ों मिल ((यह आमतौर पर संस्थाओं के हजारों पढ़ने के लिए आवश्यकता होती है) कितनी मेमोरी का उपयोग किया जाता है, दयालु आदि के लिए कितने प्रश्न आदि)

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

मैं मॉडल को एक ही थ्रेड में रखते हुए एक विघटनकारी वास्तुकला में स्विच करने की संभावना का अध्ययन कर रहा हूं, एक अलग उपभोक्ताओं में मॉडल से सब कुछ संभव (वैधता जांच, लेखा परीक्षा, आदि) ले जा रहा हूं।

पाठ्यक्रम का पहला सवाल यह है: क्या यह समझ में आता है?

दूसरा प्रश्न यह है कि: आदर्श लिखने के अनुरोधों को पढ़ने वाले लोगों पर प्राथमिकता लेनी चाहिए। विघटनकर्ता में प्राथमिकता रखने का सबसे अच्छा तरीका कौन सा है? मैं 2 रिंग बफर के बारे में सोच रहा था और फिर उच्च प्राथमिकता से कम प्राथमिकता से अधिक बार पढ़ने की कोशिश करता हूं।

प्रश्न को स्पष्ट करने के लिए एलएमएक्स विघटनकर्ता के वास्तविक कोड के मुकाबले अधिक वास्तुशिल्प है। अधिक जानकारी के

डाटा के साथ

अद्यतन एक जटिल डोमेन, कई अलग अलग प्रकार (~ 20) कई अलग अलग संग्रह के साथ एक वृक्ष संरचना में उन दोनों के बीच जुड़े कई संस्थाओं (> 100k) के साथ है।

प्रश्नों में आम तौर पर सही डेटा खोजने के लिए हजारों इकाइयों को पार करने में शामिल होते हैं। अपडेट अक्सर होते हैं लेकिन समय पर 10 इकाइयों की तरह सीमित होते हैं, इसलिए पूरे डेटा में बहुत कुछ नहीं बदल रहा है (जैसे घंटे के लिए 20%)।

मैंने कुछ प्रारंभिक परीक्षण किए और यह कभी-कभी लिखने वाले लॉक देरी के समानांतर में मॉडल से पूछताछ के गति के फायदे दिखाई देता है।

+0

हाय उबर्टो - क्या आप कुछ विवरण जोड़ सकते हैं। आप किस तरह के प्रश्न चल रहे हैं? और इकाइयों का अद्यतन समान कुछ इकाइयों या विभिन्न संस्थाओं पर हो रहा है? क्या संस्थाएं एक-दूसरे से जुड़ी हैं या अधिकतर स्वतंत्र हैं और वे कैसे संबंधित हैं? – jasonk

+0

प्रश्न 2 के बारे में: लिखने पर पढ़ने की सटीकता, एलएमएक्स स्वाभाविक रूप से इवेंट सोर्सिंग के लिए उपयुक्त है, जो कहता है कि आप घटनाओं को उन मॉडलों को नहीं रखते हैं, आपके वर्तमान मॉडल (या अधिक अनुकूलित वाले जो पढ़ने वाले कार्यों पर सुपर फास्ट हैं) अभी भी वहां होंगे आप कभी भी कभी नहीं बदलते हैं, जब भी आपको लिखने से पहले एक पठन ऑपरेशन मिल जाता है, आपको इसे प्राप्त करने के क्रम में इसे संसाधित करना चाहिए, यदि आप घटनाओं की श्रृंखला को फिर से चलाते हैं तो उसी राज्य को पुन: उत्पन्न करने के लिए ... तो इस मामले में मैं यह प्राथमिकता यहां गलत हूं, आप ऐसा करते हैं जब संग्रह में दो धागे लिखते हैं ... – vach

उत्तर

2

"आदर्श लिखने के अनुरोधों को पढ़ने वाले लोगों पर प्राथमिकता लेनी चाहिए।"

क्यों? सी # रीडरवाइटर लॉकस्लिम जैसे सबसे तेज़ ताले विपरीत हैं .. आंशिक पढ़ने से बचने के लिए सभी लिखने को रोकने के लिए एक लिखने की आवश्यकता होती है। तो इस तरह के ताले कई समवर्ती पढ़ने की उम्मीद करते हैं कि चीजें "काफी" होती हैं और फिर लिखती हैं .. (लेखन कतार में इसकी संख्या में चलता है लेकिन इसकी संभावना बहुत से पढ़ती है जो इसे ताले से पहले संसाधित करने के बाद आई थी) ..

प्राथमिकता लिखना कॉन्सुरेंसी को मारने का एक अच्छा तरीका है ..

क्या अंतिम सहमति/सीक्यूआरएस एक विकल्प है?

+0

मानते हुए कि पठन क्वेरी का प्रवाह कम या ज्यादा स्थिर है, लिखने में देरी में कोई लाभ नहीं है। पढ़ने से पहले मॉडल को अपडेट करना कुछ व्यावसायिक लाभ है। – Uberto

+0

हां - ताले के कारण यह है कि वे उम्मीद करते हैं कि पढ़ने के विस्फोट से मर जाता है जो अक्सर होता है, एक इकाई में निरंतर प्रवाह बहुत दुर्लभ होता है (यह आपके पास एक टेबल लॉक हो सकता है जो उच्च प्रदर्शन के लिए एक अच्छा विचार नहीं है) यदि प्रवाह इस बिंदु पर बड़ी भीड़ है, तो इससे अधिक संक्रामक है और अन्य चीजों को देखना चाहिए जैसे प्रतियां/स्पिनलॉक्स इत्यादि की पढ़ाई करना। हम एक दूसरे के 1/10 तक मिली से बात कर रहे हैं, इससे कोई फर्क नहीं पड़ता कि व्यापार के लिए यह बहुत मायने रखता है, अधिकांश व्यवसाय आंशिक लेखन मुद्दों के साथ भी रहते हैं जब एक ओआरएम परत से एक इकाई को संशोधित किया जाता है और एक ही समय में परोसा जाता है। – user1496062

+0

ऐसा करने का सबसे आसान तरीका शायद मेमोरी कमांड कतार में है और प्रत्येक 1-10 एमएस ने उन्हें सभी लिखने के साथ रिंग बफर में रखा है। विघटनकर्ता बहुत से लोगों के लिए नहीं हैं (अच्छी तरह से मैंने कभी उन्हें किसी भी तरह का उपयोग नहीं देखा है, इसलिए आईडी बेंचमार्क देखना चाहता है) .. क्या वे कई अंगूठी बफर से पढ़ते हैं, प्रत्येक उपभोक्ता (डोमेन) एक अंगूठी बफर से पढ़ता है .. हालांकि आप कर सकते हैं एक ही बफर से पढ़ने वाले एकाधिक डोमेन हैं – user1496062

2

LMAX उपयुक्त हो सकता है ..

LMAX लोग पहले पारंपरिक लागू किया है, तो वे अभिनेताओं कार्यान्वित (कतारों के साथ) और पाया अभिनेताओं कतारों में समय के सबसे बिताया। फिर वे एक थ्रेडेड आर्किटेक्चर में गए .. अब विघटनकर्ता आर्किटेक्चर की कुंजी नहीं है, कुंजी एक थ्रेडेड बीएल है। 1 लेखक (सिंगल थ्रेड) और छोटी वस्तुओं के साथ आपको उच्च कैश हिट और कोई विवाद नहीं मिलेगा। ऐसा करने के लिए उन्हें बिजनेस लेयर से बाहर सभी लंबे समय तक चलने वाले कोड को स्थानांतरित करना होगा (जिसमें आईओ शामिल है)। अब ऐसा करने के लिए वे उपयोग करते हैं, उन्होंने मूल रूप से केवल एक रिंग बफर को एक लेखक के साथ विघटनकर्ता का उपयोग किया जैसा कि डिवाइस ड्राइवर कोड में थोड़ी देर के लिए उपयोग किया गया था लेकिन एक विशाल संदेश पैमाने पर।

सबसे पहले मुझे इसके साथ एक असहमति है, एलएमएक्स एक अभिनेता प्रणाली है .. जहां आपके पास सभी बीएल के लिए 1 अभिनेता है (और विघटनकर्ता अन्य कलाकारों से जुड़ते हैं) ..वे वहाँ अभिनेता प्रणाली में सुधार किया जा सकता था काफी बजाय बीएल के लिए 1 अभिनेता के लिए कूद, अर्थात्

  1. न सेवाओं/अभिनेताओं में से बहुत सारे हैं, एक सेवा में आमतौर पर इस्तेमाल किया घटकों के लिए प्रयास करें।
  2. जब अभिनेताओं के बीच संवाद स्थापित करने के लिए 1. कतारों में कई नहीं बिंदु से बिंदु का उपयोग करें (सभी सेवाओं बसों की तरह!) (इस बार-बार SOA में भी/वितरण प्रणाली आता है)
  3. आप कतारों बिंदु से बिंदु है जब सुनिश्चित करें कि पूंछ एक अलग स्मृति क्षेत्र के लिए एक सूचक है। 2 और 3 के साथ आप अब लॉकलेस कतारों का उपयोग कर सकते हैं, और कतार/धागे में केवल 1 लेखक हैं (और आप अस्थायी 256 का भी उपयोग नहीं कर सकते हैं लेकिन वाईएमएम बिट कतार में लिखते हैं)। हालांकि सिस्टम में अब और अधिक धागे हैं (और यदि आपने अभिनेताओं के बीच अपेक्षाकृत कम मात्रा में संदेशों को 1 सही तरीके से किया है)। कतार विघटनकर्ताओं के समान हैं और कई प्रविष्टियों को बैच कर सकते हैं और एक रिंग बफर शैली का उपयोग कर सकते हैं।

इन अभिनेताओं के साथ आप एक और मॉड्यूलर (और इसलिए मुख्य-टेबल) प्रणाली है (और प्रणाली कतारों कार्रवाई करने के लिए और अधिक अभिनेताओं को लांच कर सकता है - 1 लेखक ध्यान दें!)

अपने मामले फिर से मुझे लगता है कि 20 एक घंटे में परिवर्तन का% बड़ा है ... क्या क्वेरी हमेशा स्मृति वस्तुओं में हैं? क्या आपके पास मेमोरी हैश टेबल/इंडेक्स में है? क्या आप केवल पढ़ने के संग्रह का उपयोग कर सकते हैं? क्या इससे कोई फर्क पड़ता है कि आपका डेटा पुराना है उदाहरण के लिए eBay अपने आइटम संग्रह पर 1 घंटे रीफ्रेश का उपयोग करता है ताकि आइटम संग्रह स्वयं स्थिर हो। एक स्थिर संग्रह और स्थैतिक आइटम ब्रीफ के साथ, उनके पास एक स्थिर सूचकांक होता है और आप वस्तुओं को तेज़ और सभी स्मृति में खोज और ढूंढ सकते हैं। हर घंटे इसे पुनर्निर्मित किया जाता है और जब पूरा हो जाता है (इसे पुनर्निर्माण में कुछ मिनट लग सकते हैं) सिस्टम नए डेटा पर स्विच करता है। ध्यान दें कि आइटम स्वयं स्थिर नहीं हैं।

एक विशाल डोमेन प्रत्येक संदेश पर पारित करने के लिए एकल थ्रेड एक lowish कैश हिट ..which LMAX जो एक छोटे डोमेन के लिए अलग है प्राप्त कर सकते हैं के साथ अपने मामले में

..

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

आशा है कि यह त्वरित डंप मदद करता है लेकिन यह केवल एक नज़र से कठिन है।

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