使用Clojure Ogre更改顶点属性值后,无法更新Janusgraph DB

时间:2019-05-07 18:25:14

标签: clojure graph-databases gremlin janusgraph

我正在使用Clojure / Ogre与我的clojure api应用程序中的Janusgraph DB进行交互。由于我对这项技术非常陌生,因此我可能会错过一些东西。以下是我面临的问题,

  • 当我从clojure应用程序中添加新顶点时,我的janusgraph数据库正在显示该顶点,这是预期的。但是,当我尝试从应用程序更新顶点属性时,DB没有显示更新的结果。我需要从gremlin shell中显式打开“ janusgraph-cql.properties”文件,然后仅在数据库中显示更新的结果。
  • 当我使用clojure / ogre语法从我的应用程序中查询顶点时,即使通过应用程序中的clojure / ogre语法更新了顶点属性值之后,我仍在获取旧的过时数据。高速缓存正在存储先前查询的结果。当我多次(第5次)执行同一条查询语句时,它显示的是更新后的结果。

我对如何在更新任何顶点属性时停止或更新缓存感到非常困惑。

请在下面找到详细信息, 以下查询用于更新现有顶点。

(og/traverse g (og/V)
              (og/has :name "xyz") 
              (og/property :age 32)
              (og/next!))(.commit (.tx graph))

执行上述语句后,当我打开gremlin外壳时,我看不到更新的顶点,而只看到旧的顶点。我需要使用

显式打开属性文件
graph = JanusGraphFactory.open('config/dev/janusgraph-cql.properties')

然后当我在gremlin shell中查询时,它会显示新数据。

clojure应用程序使用以下语句来检索数据,

(og/traverse g (og/V) (og/has :name "xyz")
  (og/value-map) (og/into-list!))

即使在更新了顶点属性之后,当我从clojure应用程序执行上述语句时,我也只会获取旧数据。当我第五次执行时,只有我要获取新数据,如果再次执行,将重复相同的结果。缓存似乎存储了五个先前查询的结果。

我的属性文件,

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.hostname=127.0.0.1
storage.cql.keyspace=mygraph
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5
index.search.backend=elasticsearch
index.search.hostname=127.0.0.1

请在这里为我提供帮助,以解决如何解决这个过时的数据检索问题,以及如何在从clojure应用程序更新后每次都无需显式打开属性实例的情况下立即将更新反映到janusgraph DB中。非常感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的操作顺序,则认为您正在这样做:

  1. 在Gremlin Console中查询顶点
  2. 在Ogre中更新了相同的顶点
  3. 在Gremlin Console中再次查询该顶点并看到过时的数据

如果是这样,我认为这是可以预期的,因为控制台中的顶点正在使用当前事务中的缓存数据。如果您执行以下操作,我想一切都会起作用:

  1. 在Gremlin Console中查询顶点
  2. 在Ogre中更新了相同的顶点
  3. 在Gremlin Console中发出g.tx().rollback()以开始新的交易
  4. 在Gremlin Console中再次查询该顶点并查看更新