我正在使用Clojure / Ogre与我的clojure api应用程序中的Janusgraph DB进行交互。由于我对这项技术非常陌生,因此我可能会错过一些东西。以下是我面临的问题,
我对如何在更新任何顶点属性时停止或更新缓存感到非常困惑。
请在下面找到详细信息, 以下查询用于更新现有顶点。
(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中。非常感谢您的时间和帮助。
答案 0 :(得分:1)
如果我正确理解了您的操作顺序,则认为您正在这样做:
如果是这样,我认为这是可以预期的,因为控制台中的顶点正在使用当前事务中的缓存数据。如果您执行以下操作,我想一切都会起作用:
g.tx().rollback()
以开始新的交易