首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Lucene中加载作为RAMdirectory的FSdirectory索引文件?

如何在Lucene中加载作为RAMdirectory的FSdirectory索引文件?
EN

Stack Overflow用户
提问于 2013-07-31 19:02:48
回答 1查看 4K关注 0票数 5

我有一个索引文件在硬盘中作为FSdirectory,它的大小约为2 2GB。我想把它加载到内存中,以便有更好的搜索速度。我使用后面的代码:

代码语言:javascript
复制
Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT);

但我不确定它是否有效。有没有人知道它有没有用?还有比这更好的方法吗?

我会为任何suggestion.Thanks感到高兴。

EN

回答 1

Stack Overflow用户

发布于 2013-07-31 23:20:44

是的,您可以像这样构建RAMDirectory,但在您的情况下,强烈建议您这样做。RAMDirectory不适用于大型数据集(大于100MB)。构建和消耗宝贵的JAVA堆空间将是非常耗时的GC密集型任务。

如果您有性能问题,请确保您遵循this lucene FAQ中描述的所有指南

不要忘记,为了获得下降搜索速度,操作系统需要将索引的某些部分缓存到内存中。为了做到这一点,你必须让一些免费的内存提供给操作系统。如果您有16 8gb的物理RAM和8 8gb的索引,那么您应该将jvm Xmx配置为8g。一个很好的检查内存的linux工具是htop,它会将用于进程的RAM打印为绿色(堆空间),将用作文件缓存的RAM打印为黄色(索引数据)。

一些开发人员在应用程序启动时执行预热查询,以防止第一个用户在os文件缓存加载索引时被卡住几秒钟。

然后,如果你仍然认为你可以得到更好的性能,你可以尝试RAMfs的一些技巧。但是我怀疑你能获得比一个经过良好调整的操作系统和jvm更好的性能,使用MMapDirectory。

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

https://stackoverflow.com/questions/17968577

复制
相关文章

相似问题

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