FSDirectory和MMap目录之间的区别?

时间:2012-05-08 14:40:02

标签: java caching lucene

任何人都可以解释一下FSDirectory和MMapDirectory有什么区别?我想热身我的缓存。我读到这可能很有用,但无法找到这对预热缓存有何帮助。如果你有任何想法,请解释我。甚至指针都是受欢迎的。

  

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

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

2 个答案:

答案 0 :(得分:8)

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

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

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

如果您最终使用MMapFSDirectory,虚拟内存和索引大小可能只是32位计算机上的问题(unless your indexes are larger than 2^48 bit = 32TB)。

答案 1 :(得分:1)

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

但正如上面所说'马丁',你需要对自己进行一些性能测试。