我正在使用clojure/ogre与我的Clojure API应用程序与Janusgraph db进行交互。由于我是这些技术的新手,因此我认为我可能会错过一些东西。以下是我面临的问题,
- 当我从Clojure应用程序中添加一个新顶点时,我的Janusgraph DB显示了顶点,并且可以预期。但是,当我尝试更新应用程序的顶点属性时,数据库未显示更新的结果。我需要明确打开Gremlin Shell的" Janusgraph-cql.properties"文件,然后仅显示DB中的更新结果。
- 当我使用clojure/ogre语法从应用程序中查询顶点时,即使在通过clojure/ogre语法更新Vertex属性值之后,我也会获得旧的陈旧数据。缓存正在存储先前查询的结果。当我多次执行相同的查询语句(第五次(时,它将显示更新的结果。
我非常困惑,就像在更新任何顶点属性时如何停止或更新缓存。
请在下面找到详细信息,以下查询用于更新现有顶点。
(og/traverse g (og/V)
(og/has :name "xyz")
(og/property :age 32)
(og/next!))(.commit (.tx graph))
执行上述语句后,当我打开Gremlin Shell时,我不看到更新的顶点,而仅看到旧顶点。我需要使用
明确打开属性文件graph = JanusGraphFactory.open('config/dev/janusgraph-cql.properties')
然后,当我在Gremlin中查询时显示新数据。
以下语句使用Clojure应用程序检索数据,
(og/traverse g (og/V) (og/has :name "xyz")
(og/value-map) (og/into-list!))
即使在更新了顶点属性之后,当我从clojure应用程序中执行上述语句时,我也只能获取旧数据。当我第五次执行时,只有我得到新数据,如果我再次执行相同的结果。Cache正在存储五个先前查询的结果。
我的属性文件,
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
请在此处帮助我如何克服此过时的数据检索问题,以及如何在不明确打开属性实例的情况下,在不明确打开属性实例之后,如何在Janusgraph db中立即反映更新。非常感谢您的时间和帮助。
如果我正确理解您的操作顺序,我相信您正在做:
- 在Gremlin Console中查询顶点
- 在Ogre中更新了相同的顶点
- 在Gremlin控制台再次查询该顶点,并看到了陈旧的数据
如果是这样,我相信这是可以预期的,因为控制台中的顶点正在使用当前交易中的缓存数据。如果您做以下操作,我想事情会起作用:
- 在Gremlin Console中查询顶点
- 在Ogre中更新了相同的顶点
- Gremlin控制台中的
g.tx().rollback()
发行新事务 - 在Gremlin控制台再次查询该顶点,然后查看更新