2010-02-02 5 views
7

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

हटाने का एक तरीका 'खाली' नोड्स का ट्रैक रखने के लिए हो सकता है जब तक कि थ्रेसहोल्ड कटऑफ तक नहीं पहुंच जाता है और फिर एक और फ़ाइल बनाते हैं जो खाली नोड्स को त्याग देगा। लेकिन यह थकाऊ है।

क्या फ़ाइल में बी-पेड़ को हटाने या यहां तक ​​कि बी-पेड़ का प्रतिनिधित्व करने के लिए सादगी/दक्षता बिंदु दृश्य से बेहतर दृष्टिकोण है?

TIA, -Sviiya

+0

बस स्पष्ट होने के लिए, क्या आप बी-पेड़ या बाइनरी पेड़ के बारे में पूछ रहे हैं। –

+0

बी-पेड़। लेकिन मुझे लगता है कि फाइलों के रूप में स्टोर करने के उद्देश्य के लिए मुद्दा वही होगा? – user203405

+0

बीटीडब्ल्यू, सी और सी ++ दो अलग-अलग भाषाएं हैं। यदि आप कोड लिख रहे हैं जो दोनों पर काम करता है, तो सी ++ टैग जोड़ें। –

उत्तर

2

मैं एक बहुत ही त्वरित खोज किया था और इस खोदा: http://people.csail.mit.edu/jaffer/WB सी स्रोत: http://cvs.savannah.gnu.org/viewvc/wb/wb/c/ - यह डिस्क-आधारित बी पेड़ शैली डेटाबेस पेशकश करने के लिए लगता है - हालांकि पर एक नज़र डालने "हटाएँ .c "यह प्रतीत होता है कि अगर आप इसे नोड से हटाते हैं तो सबकुछ हटा दिया जाएगा - अगर यह सही व्यवहार है तो यह किसी चीज की तरह लगता है जो मदद कर सकता है?

इसके अलावा - बी-पेड़ अक्सर फाइल सिस्टम में उपयोग किए जाते हैं - क्या आप कुछ फाइल सिस्टम कोड नहीं देख सकते हैं?

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

+0

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

+0

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

+0

प्रश्न जो मैं ढूंढ रहा था उसका उत्तर देता है, और मुझे पहले से ही फ़ाइल छंटनी के बारे में पता चला है और इसलिए बीच से डेटा हटाने की समस्या को बाधित किया गया है। धन्यवाद। :) – user203405

1

आप बर्कले डीबी का भी उपयोग कर सकते हैं। यह सी कार्यक्रमों के साथ अच्छी तरह से काम करता है और बी + पेड़ लागू करता है।

+0

हाँ, लेकिन मैं असली महसूस करने के लिए अपना कोड लिखना चाहता हूं। :) – user203405

+0

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

4

किसी फ़ाइल में बी-पेड़ को लागू करने के लिए, आप पॉइंटर्स के बजाय फ़ाइल ऑफ़सेट का उपयोग कर सकते हैं। साथ ही, आप "फ़ाइल मेमोरी मैनेजर" को कार्यान्वित कर सकते हैं, ताकि आप फ़ाइल में हटाए गए आइटम का पुनः उपयोग कर सकें।

बी-ट्री फ़ाइल में हटाए गए ब्लॉक को पूरी तरह से पुनर्प्राप्त करने के लिए, आपको एक नई फ़ाइल में बी-ट्री को फिर से बनाना होगा। यह भी याद रखें कि अधिकांश ओएसई फ़ाइलों को छंटनी के लिए कोई तरीका नहीं है। फ़ाइल को छंटनी के लिए एक पोर्टेबल विधि एक नई फाइल लिखना और पुराने को नष्ट करना है।

एक और सुझाव फ़ाइल को बी-ट्री विभाजन और डेटा (आइटम) विभाजन में विभाजित करना है। एक बी-ट्री विभाजन में पेज होंगे। पत्ती पृष्ठों में डेटा आइटम्स के ऑफसेट होंगे। डेटा विभाजन डेटा आइटम वाले फ़ाइल में एक अनुभाग होगा। आप प्रत्येक विभाजन में से एक से अधिक बनाने का अंत कर सकते हैं और विभाजन interleaved हो सकता है।

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

+0

दिलचस्प लगता है। मेरा यह अभ्यास निम्न स्तर कोडिंग के लिए कुछ जोखिम प्राप्त करना है। मैं मुख्य रूप से लिनक्स आधारित सिस्टम में रूचि रखता हूं और यह फ़ाइल छंटनी का समर्थन करता है। :) – user203405

+0

अधिकांश ओएस * * में फ़ाइलों को छोटा करने के लिए कार्य हैं। लिनक्स में, बीएसडी, विंडोज़ आप फ़ाइल की लंबाई को जो भी चाहें सेट कर सकते हैं। –

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