ano*_*ony 5 java lucene indexing search
我有一个硬盘索引文件作为FS目录,大小约为2GB.我想在ram中加载它以获得更好的搜索速度.我使用后面的代码:
Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT);
Run Code Online (Sandbox Code Playgroud)
但我不确定它是否有效.有谁知道它的工作与否?还有什么方法比这更好吗?
我会很高兴有任何建议.谢谢.
是的,您可以像这样构造 RAMDirectory,但在您的情况下强烈建议不要这样做。RAMDirectory 不适用于大型数据集(超过 100MB)。GC 会非常密集,构建时间较长,会消耗宝贵的 JAVA Heap 空间。
如果您遇到性能问题,请确保遵循 此 lucene FAQ中描述的所有准则
不要忘记,为了获得下降搜索速度,操作系统需要将索引的某些部分缓存到内存中。为此,您必须让操作系统可以使用一些空闲内存。如果您有 16Gb 物理 RAM 和 8GB 索引,则应将 jvm Xmx 配置为 8g。htop 是一个很好的检查内存的 Linux 工具,它会将用于进程的 RAM 打印为绿色(你的堆空间),将用作文件缓存的 RAM 打印为黄色(索引数据)。
一些开发人员在应用程序启动时执行预热查询,以防止第一个用户在操作系统文件缓存加载索引时被卡住几秒钟。
然后,如果您仍然认为可以获得更好的性能,您可以尝试使用 RAMfs 的一些技巧。但我怀疑你能否获得比使用 MMapDirectory 精心调优的操作系统和 jvm 更好的性能。