Caching 在Cypher中为查询执行提供适当的缓存

Caching 在Cypher中为查询执行提供适当的缓存,caching,neo4j,cypher,Caching,Neo4j,Cypher,我正在运行嵌入Neo4j数据库的参数化密码查询。 每个查询都使用不同的输入值运行,比如一个ID。对于每个输入值,查询运行10次 例如: it#1 - Query 1, input 1, 10 times it#2 - Query 1, input 2, 10 times it#3 - Query 1, input 3, 10 times it#4 - Query 2, input 1, 10 times it#5 - Query 2, input 2, 10 times 在运行迭代#1之后或在

我正在运行嵌入Neo4j数据库的参数化密码查询。 每个查询都使用不同的输入值运行,比如一个ID。对于每个输入值,查询运行10次

例如:

it#1 - Query 1, input 1, 10 times
it#2 - Query 1, input 2, 10 times
it#3 - Query 1, input 3, 10 times
it#4 - Query 2, input 1, 10 times
it#5 - Query 2, input 2, 10 times
在运行迭代#1之后或在运行迭代#3之后(当它启动新查询时),是否需要显式清除Neo4j的缓存? 如果需要清除缓存,如何在2.2.0M03社区中执行

另一件事是,我按如下方式运行查询:

initialize db
   for each input n
   i=0
      while(i<10)
         Result r;
         result = graphDb.execute(query,mapWithInputn)
         print result.resultAsString()
         result.close()
      end   
   end
close db
初始化数据库
对于每个输入n
i=0

而(i您不必显式地刷新缓存

Neo4j中的查询计划缓存不会缓存查询结果,而是缓存查询计划。每次调用
execute
,Neo4j都会检查该查询字符串的查询计划(独立于参数)是否在查询计划缓存中。如果是这样,则会重复使用,否则将构建查询计划并将其放入缓存中


计划就绪后,将运行查询并返回结果。

谢谢Stefan!另外,当我运行查询10次时,我会以毫秒为单位得到结果
89 15 0 16 15 0 14 0 0 0
。89是由于冷缓存上的查询,但其他情况下时间发生更改的原因是什么?正如您正确提到的,第一次运行对您没有好处它来自节点/关系缓存——它们是从文件系统加载的。后续调用的不同之处在于IMHO背景噪音,可能JVM正在进行垃圾收集,操作系统正在做其他事情。这里只是澄清一个小疑问:如果在#it1之后没有显式清除缓存,它#2将利用内存中已经存在的图形部分是吗?(用于它的图形#1)完全正确。节点、关系和属性在它#1中遍历时按需从光盘加载。在它#2中遍历是相同的,但节点、rel已经作为java对象存在。这阻止了文件系统访问,因此大大加快了查询速度。