9

谁能解释一下 FSDirectory 和 MMapDirectory 有什么区别?我想预热我的缓存。我读到这可能很有用,但找不到这对预热缓存有何帮助。如果您有任何想法,请向我解释。甚至欢迎指点。

Lucene 文档说 MMap 使用虚拟内存来加速索引的查找。

如何实现加速以及如果我的索引很大以至于它们不适合我的虚拟内存会发生什么>

4

2 回答 2

10

MMapDirectory是抽象FSDirectory类的具体子类之一。它使用内存映射文件来访问索引中的信息。

其他选项是SimpleFSDirectoryNIOFSDirectory,它们使用不同的方法。您应该查看文档以FSDirectory获取所有三个的简要说明。正如您将看到的那样,FSDirectory.open(File)尝试为您的环境选择最佳实现。

根据我自己的经验,我没有注意到 和 之间的性能有任何显着差异NIOFSDirectoryMMapFSDirectory但是您应该使用自己的数据和硬件设置进行一些性能测试。

如果您最终使用MMapFSDirectory,虚拟内存和索引大小只能在 32 位机器上成为问题(除非您的索引大于 2^48 位 = 32TB)。

于 2012-05-09T00:44:39.127 回答
1

如果您的索引不适合虚拟内存,则使用 FSDirectory 可能会更好。问题是当它不适合虚拟内存时使用 MMapDirectory 等同于使用 FSDirectory 和使用操作系统的缓存算法(操作系统的缓存算法可能比你可以手动编码的更好)。(“等效”,因为在这两种情况下,只有部分索引会同时在物理内存中。)

但正如上面“马丁”所说,您需要自己进行一些性能测试。

于 2012-05-09T11:43:26.420 回答