首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要知道使用RAMDirectory的优缺点

需要知道使用RAMDirectory的优缺点
EN

Stack Overflow用户
提问于 2009-10-17 14:56:41
回答 3查看 6.4K关注 0票数 9

我需要提高我的Lucene搜索查询的性能。我可以使用RAMDirectory吗?它能优化性能吗?对此有索引大小限制吗?如果有人能列出使用RAMDirectory的利弊,我将不胜感激。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2012-04-11 13:48:43

我比较了FSDirectory和RAMDirectory。

  • 索引大小为1.4G
  • Centos,5G memory

搜索1000个关键字,此处是平均/最小/最大响应时间(ms)

重启应用程序第一次运行: 351/7/2611

  • second run: 47/7/837

  • third run(FSDirectory
  • ):53/7/2343

  • RAMDirectory应用程序第一次运行: 38/7/1133
  • second run: 34/7/189
  • third run(重新启动应用程序):38/7/959

所以,你可以看到RAMDirectory比FSDirectory更快,但是在'os文件缓存预热‘之后,速度差距就不那么明显了。RMADirectory的缺点是什么?在我的测试中

  • 它消耗了更多的内存,1.4G文件需要大约2G才能加载到内存中。而FSDirectory只使用了700m。
  • 它需要更多的时间来加载,特别是当索引文件很大的时候。在打开索引时,需要将数据从文件复制到内存中。这意味着当重启app.
  • 时,请求将被阻塞更长的时间。同时维护两个索引是不现实的。因为我们的应用每隔几个小时就切换一次索引。我们希望新的索引正在预热,而旧的索引仍然在同一个tomcat中工作。
票数 13
EN

Stack Overflow用户

发布于 2009-10-17 14:58:48

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

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

票数 7
EN

Stack Overflow用户

发布于 2009-10-19 16:02:58

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1582377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档