2012-06-18 39 views
6

मैं एक साधारण जेना डेटासेट के साथ काम कर रहा हूं, जिसमें केवल एक ~ 30 एमबी आरडीएफ फ़ाइल आयात की गई है। एप्लिकेशन के एक हिस्से के रूप में, मैं उपयोगकर्ताओं को डिफ़ॉल्ट ग्राफ (या एक नामित ग्राफ) से पूछने की कोशिश कर रहा हूं और क्वेरी के परिणामस्वरूप ट्रिपल को नए नाम वाले ग्राफ में डाल सकता हूं। इसके लिए, मैं आरडीएफ फॉर्म में ट्रिपल के परिणाम सेट बनाने के लिए एक CONSTRUCT कथन का उपयोग कर रहा हूं, फिर इन ट्रिपल को एक नए मॉडल में डाल रहा हूं (QueryExecution.execConstruct() का उपयोग करके) और इस मॉडल को डेटासेट में जोड़ना। यह फिर से काम करता प्रतीत होता है, क्योंकि डेटासेट को नया ग्राफ़ नोड मिलता है, और टीडीबी डेटाबेस फ़ोल्डर का डिस्क आकार आकार में बढ़ता है।टीडीबी समर्थित जेना डेटासेट के आकार को कैसे कम करें?

समस्या यहाँ आता है जब मैं डाटासेट से एक नामित ग्राफ दूर करने के लिए प्रयास करें। डेटासेट के हटाए गए नामनाम ("graphName") विधि का उपयोग करके, मैं डेटासेट से मॉडल को हटा देता हूं। उस मॉडल नाम पर भविष्य के प्रश्न बताते हैं कि इसे सफलतापूर्वक हटा दिया गया है। हालांकि, टीडीबी डेटाबेस फ़ोल्डर का डिस्क आकार एक ही आकार बना रहता है, सिंक्रनाइज़ करने और छोड़ने के बाद भी।

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

किसी भी अंतर्दृष्टि या मदद बहुत अच्छा होगा, धन्यवाद।

उत्तर

6

आप जेना मेलिंग सूची ([email protected]) पर पूछकर अधिक जानकारी प्राप्त कर सकते हैं, लेकिन मैं जवाब देने की कोशिश करेंगे। आप वेबसाइट पर TDB Architecture पृष्ठ पर भी एक नज़र डालना चाहते हैं। निर्माण क्या यह एक नोड तालिका जो 64 बिट पूर्णांक आईडी और ठीक इसके विपरीत में RDF नोड्स नक्शे कॉल द्वारा

टीडीबी भंडार डेटा। इसके बाद यह इन पूर्णांक आईडी का उपयोग करके अलग इंडेक्स बनाता है जो इसे SPARQL क्वेरीज़ का उत्तर देने के लिए आवश्यक विभिन्न डेटाबेस स्कैन करने की अनुमति देता है।

जोड़ना डेटा संभवतः इन संरचनाओं (नोड टेबल और सूचकांक), लेकिन हटाने के डेटा दोनों के लिए प्रविष्टियों कहते हैं केवल सूचकांक से डेटा निकाल देता है। इस प्रकार समय के साथ नोड टेबल बढ़ता रहेगा भले ही आप पुराने डेटा को हटा दें क्योंकि यह नोड टेबल से नहीं हटाता है।

इसके पीछे व्यावहारिक कारणों दुगना कर रहे हैं:

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

अस्वीकरण - मैं जेना परियोजना लेकिन कभी नहीं तो यह मेरे सबसे अच्छे समझ को दर्शाता है और पूरी तरह से सही नहीं हो सकता टीडीबी घटक पर व्यक्तिगत रूप से किसी भी काम किया है पर एक committer हूँ।

+0

धन्यवाद एक गुच्छा!मैं निश्चित रूप से मेलिंग सूची की जांच करूँगा, यह एक शर्म की बात है कि निष्कासन तालिका के आकार को कम नहीं करता है, लेकिन यह समझ में आता है। एक बार फिर धन्यवाद। – paul

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

  • कोई संबंधित समस्या नहीं^_^