繁体   English   中英

如何在Lucene中将FSdirectory索引文件加载为RAM目录?

[英]How to load an FSdirectory index file as a RAMdirectory in Lucene?

我有一个硬盘索引文件作为FS目录,大小约为2GB。 我想在ram中加载它以获得更好的搜索速度。 我使用后面的代码:

Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT);

但我不确定它是否有效。 有谁知道它的工作与否? 还有什么方法比这更好吗?

我会很高兴有任何建议。谢谢。

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

如果您有性能问题,请确保遵循此lucene常见问题解答中描述的所有指导原则

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

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

然后,如果你仍然认为你可以获得更好的性能,你可以尝试一些RAMfs的技巧。 但是我怀疑你可以获得比MMapDirectory更好的表现更好的表现和jvm。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM