30

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

  1. डेटा क्या स्मृति एक बार में (10-15 टेराबाइट्स में नमूना पर्वतमाला) संभाल कर सकते हैं की तुलना में अधिक है। इस मामले में, मैं डेटा संरचना को डिस्क पर संग्रहीत करूंगा।

  2. डेटा की स्मृति की तुलना में डेटा अपेक्षाकृत कम है और इस प्रकार इसे गति के लिए स्मृति में ही संग्रहीत और संचालित किया जा सकता है।

  3. डेटा मुफ्त मेमोरी से अधिक है और मान लें कि यह पेजिंग फ़ाइल में डेटा के संभावित संगत खंड के आकार से कम है। इस प्रकार मैं डेटा संरचना को डिस्क पर एक फ़ाइल में संग्रहीत करता हूं और फ़ाइल का मेमोरी मैपिंग करता हूं।

निष्कर्ष मैं तैयार की है कर रहे हैं:

मामले 1 के लिए, मैं एक बी पेड़ तेजी से पहुँच के लिए के रूप में यह डिस्क रोटेशन द्वारा उत्पादित अंतराल पर बचाता है का उपयोग करना चाहिए

मामले 2 के लिए, मैं तेजी से पहुंच के लिए लाल ब्लैक ट्री का उपयोग करना चाहिए क्योंकि डेटा स्मृति पर है और नहीं। बदतर मामले में स्कैन किए जाने वाले तत्वों की तुलना में मुझे कम से कम एक करना होगा यदि मैं बी पेड़

मामले के लिए 3, मुझे इस पर संदेह है, पृष्ठ फ़ाइल डिस्क पर है मूल ओएस I/O का उपयोग करता है फ़ाइलों पर काम करने के लिए, तो बी ट्री एक बेहतर विकल्प या लाल काला पेड़ होना चाहिए?

मैं जानना चाहता हूं कि उपरोक्त तीन निष्कर्ष सही कहां जाते हैं और यह गलत कहां जाता है और मैं तीन अलग-अलग मामलों में प्रदर्शन पर कैसे सुधार कर सकता हूं।

मैं एक लाल काले पेड़ और एक बी पेड़ के साथ सी ++ भाषा का उपयोग कर रहा हूं, जिसे मैंने खरोंच से डिजाइन किया है। मैं फाइल मैपिंग के लिए बूस्ट लाइब्रेरी का उपयोग कर रहा हूं।

अद्यतन 1 :: this स्टैक ओवरफ्लो में पोस्ट के माध्यम से पढ़ रहा था। कुछ असली अच्छी अंतर्दृष्टि मिली, जो मुझे महसूस करती है कि मामलों में मैंने जो तुलना की है, वह दोषपूर्ण हो सकती है। सबसे अधिक वोट वाले उत्तर के लिए http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html

+2

आप किस तरह की खोज करने जा रहे हैं? कुंजी द्वारा सरल खोज? कुंजी कैसा दिखता है? – svick

+0

आप कम या ज्यादा सही हैं। कार्यान्वयन के साथ आगे बढ़ें, अगर आप अटक जाते हैं तो यहां पूछें। – nikhil

+0

@ एसविक हाँ, मैं सबसे सामान्य तरीके से कुंजी द्वारा सरल खोज कर रहा हूं, वे एक बुद्धिमान हो सकते हैं, या संख्यात्मक रूप से निरंतर क्रम में, 1 से शुरू होने वाली विशिष्ट प्राकृतिक संख्याओं का सेट (2^8) -1 – swanar

उत्तर

8

एक लाल/काला पेड़ 2-3-4 पेड़ के बराबर या उससे कम है, जो कि बी-पेड़ का एक प्रकार है। सबसे खराब केस प्रदर्शन समान है, बशर्ते आप बी-पेड़ नोड मानों की बाइनरी खोज करें।

बी-पेड़ का स्पष्ट नुकसान बर्बाद हो गया है, लेकिन भाषा/स्मृति आवंटक के उपयोग के आधार पर, आप पाते हैं कि 2-3-4 पेड़ औसतन लाल-काले पेड़ की तुलना में कम जगह का उपयोग करता है। उदाहरण के लिए, 32-बिट जावा में, प्रति ऑब्जेक्ट लगभग 8-बाइट ओवरहेड होता है। (यह भी संभाजक पर बहुत कुछ निर्भर करता है;। IIRC phkmalloc एक शक्ति-की-2 आकार के लिए छोटे आवंटन अप राउंड)

अपने मामलों का जवाब करने के लिए,

  1. डिस्क विलंबता लगभग समान रूप से समय की तलाश के बीच विभाजित है और डिस्क घुमाए जाने की प्रतीक्षा कर रहा है।
  2. यदि आप इसे सही कर रहे हैं तो एक बी-पेड़ लाल-काले पेड़ को बेहतर प्रदर्शन करने में सक्षम होना चाहिए (विशेष रूप से, यदि बीड्स एक कैशलाइन में फिट हो तो बी-पेड़ तेज होना चाहिए।)
  3. पेज फ़ाइल में इसे संगत होने की आवश्यकता नहीं है; यह केवल प्रक्रिया के आभासी पता स्थान में संगत होने की जरूरत है। सेन ओएस के लिए, यह केस 1 के लिए भी काफी समान है, जब तक कि आपका डेटा इतना छोटा न हो कि यह ज्यादातर स्मृति में फिट बैठता है और memcpy ओवरहेड महत्वपूर्ण है।

सादगी के लिए, मैं बी-पेड़ के साथ जाऊंगा और विभिन्न नोड आकारों पर कुछ मानक चलाऊंगा।

1) एक "लाल-काले ट्री" एक "आत्म संतुलन" "बाइनरी खोजें ट्री", प्रत्येक नोड के साथ एक रंग से चिह्नित (:

+0

इनपुट के लिए बहुत बहुत धन्यवाद; क्या आप डेटा सेट बड़ा होने पर भी 2-3-4 पेड़ के साथ जाने का सुझाव देंगे? यदि नोड आकार डिस्क में पृष्ठ आकार के समान हैं तो बेहतर नहीं होगा? आपके पास रेड ब्लैक पेड़ के विकल्प के रूप में 2-3-4 पेड़ का समर्थन करने वाले मजबूत अंक हैं, हालांकि – swanar

+0

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

+0

मदद के लिए बहुत बहुत धन्यवाद! – swanar

0

इन के बीच का अंतर, 2 अंक नीचे पढ़ को समझने के लिए या तो लाल या काला) और "संतुलन"

2) सभी "रेड-ब्लैक ट्री" "बाइनरी सर्च ट्री" हैं, लेकिन सभी "बाइनरी सर्च ट्री" हैं, " रेड-ब्लैक ट्री "

+4

यह स्पष्टीकरण यह ध्वनि बनाता है जैसे बीएसटी बी-ट्री जैसा ही है। तुलना आरबीटी और बीएसटी के बीच नहीं है, इसकी आरबीटी और बी-ट्री के बीच है। आरबीटी और बी-ट्री दोनों बीएसटी हैं। आरबीटी और बी-ट्री दोनों संतुलित हैं। –

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