2009-03-23 10 views
13

मुझे ल्यूसीन की राम डायरेक्टरी का उपयोग कब करना चाहिए? अन्य भंडारण तंत्र पर इसके फायदे क्या हैं? अंत में, मुझे एक साधारण कोड उदाहरण कहां मिल सकता है?RAMDirectory का उपयोग

+0

आंतरिक रूप से यह फ़ाइलों की व्यवस्था करने के लिए एक concurrenthasmap का उपयोग करता है। – Njax3SmmM2x2a0Zf7Hpd

उत्तर

16

जब आप अपने इंडेक्स डेटा को स्थायी रूप से स्टोर नहीं करना चाहते हैं। मैं परीक्षण उद्देश्यों के लिए इसका उपयोग करता हूं। अपने RAMDirectory में डेटा जोड़ें, RAMDir में अपने यूनिट परीक्षण करें।
उदा।

public static void main(String[] args) { 
    try { 
     Directory directory = new RAMDirectory(); 
     Analyzer analyzer = new SimpleAnalyzer(); 
     IndexWriter writer = new IndexWriter(directory, analyzer, true); 

या

public void testRAMDirectory() throws IOException { 

    Directory dir = FSDirectory.getDirectory(indexDir); 
    MockRAMDirectory ramDir = new MockRAMDirectory(dir); 

    // close the underlaying directory 
    dir.close(); 

    // Check size 
    assertEquals(ramDir.sizeInBytes(), ramDir.getRecomputedSizeInBytes()); 

    // open reader to test document count 
    IndexReader reader = IndexReader.open(ramDir); 
    assertEquals(docsToAdd, reader.numDocs()); 

    // open search zo check if all doc's are there 
    IndexSearcher searcher = new IndexSearcher(reader); 

    // search for all documents 
    for (int i = 0; i < docsToAdd; i++) { 
     Document doc = searcher.doc(i); 
     assertTrue(doc.getField("content") != null); 
    } 

    // cleanup 
    reader.close(); 
    searcher.close(); 
    } 

आमतौर पर अगर चीजें RAMDirectory के साथ बाहर काम करते हैं, यह अन्य लोगों के साथ काफी होगा काम ठीक। यानी आपकी अनुक्रमणिका को स्थायी रूप से स्टोर करने के लिए।
इसके लिए वैकल्पिक FSDirectory है। आपको इस मामले में फाइल सिस्टम अनुमतियों का ख्याल रखना होगा (जो RAMDirectory के साथ मान्य नहीं है)

कार्यात्मक रूप से, FSDirectory पर RAMDirectory का कोई विशिष्ट लाभ नहीं है (तथ्य यह है कि RAMDirectory FSDirectory से स्पष्ट रूप से तेज़ होगा)। वे दोनों सर्वर दो अलग-अलग जरूरतों को पूरा करते हैं।

  • RAMDirectory -> प्राथमिक स्मृति
  • FSDirectory -> माध्यमिक स्मृति

सुंदर समान & हार्ड डिस्क राम को।

मुझे यकीन नहीं है कि RAMDirectory के साथ क्या होगा यदि यह स्मृति सीमा से अधिक है। System.SystemException

फेंक दिया: मैं एक

OutOfMemoryException सिवाय चाहते हैं।

+0

हाय, आपकी प्रतिक्रिया के लिए धन्यवाद ... FSDirectory पर RAMDirectory का उपयोग करने का क्या फायदा है? और, अगर सूचकांक का आकार रैम मेमोरी से अधिक हो तो क्या होगा? – Jimmy

+3

किसी ऑब्जेक्ट के आकार में 2 जीएम सीमा है। यदि आपकी रैमडिरेकोट्री उस से अधिक है, तो आपके पास बहुत सारी रैम होने पर भी आउटऑफमेमरी अपवाद प्राप्त होगा। – Barka

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