談談Lucene和Solr索引存目錄


  在Lucene中,有幾種索引存放模式呢?用過的人可能記得SimpleFSDirectory、MMapDirectory、NIOFSDirectory、RAMDirectory這四種。新版本的通過FSDirectory.open可以自動獲得最優的一種:

 public static FSDirectory open(File path, LockFactory lockFactory) throws IOException {
    if ((Constants.WINDOWS || Constants.SUN_OS)
          && Constants.JRE_IS_64BIT && MMapDirectory.UNMAP_SUPPORTED) {
      return new MMapDirectory(path, lockFactory);
    } else if (Constants.WINDOWS) {
      return new SimpleFSDirectory(path, lockFactory);
    } else {
      return new NIOFSDirectory(path, lockFactory);
    }
  }

  通過這段代碼,我們級別可以了解各種Directory在哪種條件下是最優的。

MMapDirectory  內存映射索引模式,一部分放在內存,一部分放在磁盤,但是需要操作系統支持,最好是64位系統和64位JVM,這樣內存才能達到最大的應用。linux 和 windows基本都能用。

SimpleFSDirectory 簡單的磁盤存放,根據上面方法條件判斷,在當MMapDirectory無法使用的時候,如果是Windows操作系統,推薦磁盤存儲的模式。此種模式,會有大量的磁盤IO,因此索引的創建和檢索嚴重依賴磁盤性能。

NIOFSDirectory 使用NIO方式讀寫索引。這個條件更惡搞了,在它之前首先判斷windows。意味,在windows下它認為這個不是最優。主要原因:在windows下java nio存在bug。

RAMDirectory 這種內存存儲方式,在這個方法里沒有體現。它主要用來存放非持久化索引的,也就意味程序關閉,索引就丟失了。

NRTCachingDirectory 這是一種內存加磁盤存儲的模式,主要用在實時搜索的場景,這在高版本的lucene才有。在solr默認的索引存儲目錄就是它。
上面大致介紹了一下各種索引存放方式,再補充一句:上面各種在現有操作系統下都可以用,但是各種有自己的使用場景或者有自己缺點。

介紹完了lucene的索引目錄,那么再說說solr的索引存放目錄。solr是基於lucene封裝的,也就是lucene有的,solr也有,但是solr還有自己封裝的,我主要介紹下面HdfsDirectory 和BlockDirectory :
HdfsDirectory 把索引存放到hdfs上的,它的使用場景就是索引是海量的。一般不是大數據,不會把數據放到hdfs上。
BlockDirectory 根據名字我們可以知道,它把索引分成塊,在分布式存儲的一種概念,一切數據的存儲都是block。它是solr 4.x的產物,在后續版本中可能被替換。平常使用的不多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM