【问题标题】:Need to know pros and cons of using RAMDirectory需要知道使用 RAMDirectory 的利弊
【发布时间】:2009-10-17 14:56:40
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    我比较 FSDirectory 和 RAMDirectory。

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

    搜索1000个关键词,平均/最小/最大响应时间(ms)在这里

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

    因此,您可以看到 RAMDirectory 比 FSDirectory 执行得更快,但是在“os file cache warm up”之后,速度差距并没有那么明显。 RMADirectory 的缺点是什么?在我的测试中

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的意见。我可以知道“足够小”有多小吗?
      • 我想比你可用的物理 RAM 还小。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 2011-08-02
        • 2020-02-24
        • 2013-05-20
        相关资源
        最近更新 更多