需要了解使用RAMDirectory的优缺点

时间:2009-10-17 14:56:41

标签: lucene lucene.net

我需要提高Lucene搜索查询的性能。 我可以使用RAMDirectory吗?它是否可以优化性能?是否有任何索引大小限制? 如果有人能列出使用RAMDirectory的优点和缺点,我将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:13)

我比较FSDirectory和RAMDirectory。

  
      
  • 索引大小为1.4G
  •   
  • Centos,5G内存
  •   

搜索1000个关键字,平均/最小/最大响应时间(毫秒)就在这里

  • FSDirectory
    • 首次运行:351/7/2611
    • 第二次运行:47/7/837
    • 第三次运行(重启应用):53/7/2343
  • RAMDirectory
    • 首次运行:38/7/1133
    • 第二次运行:34/7/189
    • 第三次运行(重启应用):38/7/959

所以,你可以看到RAMDirectory比FSDirectory更快,但在'os file cache warm up'之后,速度差距并不那么明显。 RMADirectory的缺点是什么?在我的测试中

  • 它占用更多内存,1.4G文件需要大约2G才能将其加载到内存中。而FSDirectory仅使用700米。那么这意味着完整的gc会有更长的时间。
  • 需要更多时间加载,尤其是索引文件很大时。打开索引时需要将数据从文件复制到内存。这意味着在重新启动应用程序时,请求将被阻止更长时间。
  • 同时维护两个索引并不实际。因为我们的app会每隔几个小时切换一次索我们希望新索引正在升温,而旧索引仍然在同一个tomcat中工作。

答案 1 :(得分:6)

RAMDirectory更快,但不会写入磁盘。它只在您的程序运行时才存在,并且必须在每次程序运行时从头开始创建。

如果您的索引足够小以适应RAM,并且您不经常更新它,则可以在磁盘上维护索引,然后使用RAMDirectory(Directory dir)构造函数从其创建RAMDirectory。一旦你支付了加载它的代价,那么查询它应该比查询磁盘上的那个更快。但是要测量差异 - 如果索引可以作为RAMDirectory放入内存中,那么它也可以适合磁盘缓存,所以你可能看不到太多差异。

答案 2 :(得分:4)

您应该分析RAMDirectory的使用情况。至少在Linux中,由于操作系统缓冲I / O的方式,使用RAMDirectory并不比使用默认的FSDirectory快。