查看Neo4j代码,有一个页面缓存的API和两个实际的实现(不考虑内核中的一个),默认的一个和Muninn的一个。文档说明了Munnin的一个:
PageCache的这种实现针对具有大内存容量和大型存储的配置进行了优化,并使用序列锁来快速进行无法读取和写入。
这使我相信这两个实现是相互独立的,但是当您查看实际代码时,API的某些部分仅在默认实现中实现(PageSwapper和 PageSwapperFactory )其他一些只在Munnin实现( PageCache,PageCursor,PagedFile,PageEvictionCallback )。
此外,在调试和搞乱一些查询时,我注意到SinglePageFileSwapper
(来自默认实现)收到了一个MuninnPage(来自Muninn实现)。
所以我的问题如下:
如果两个实现不是独立的,并且两者都实现了一些(例如,Page接口有两个实现: ByteBufferPage 和 MuninnPage ) ,如何决定何时使用哪一个?
答案 0 :(得分:1)
从Neo4j 2.3开始,只有一个实现:MuninnPageCache
。在2.2中,我们还有一个专门用于ParallelBatchImporter
的实现 - import-tool
背后的机制。
内核模块中的实现仅用于将其连接到数据库内核的生命周期机制。
所以MuninnPageCache
是唯一使用的,因为它是我们产品中唯一的一个。
(至少在2.3和3.0中)