这是关于JanusGraph中边缘上设置的TTL的问题。我已经设置了一个测试,我在其中创建了一个TTL持续时间的边缘标签edgeLabel
- 在我的情况下为5秒。
然后我用这个标签创建一个边缘,等到TTL应该过期。但是,似乎没有从图中删除顶点。我将在下面给出一个例子,说明我想要做的事情。
让我们说g
是TinkerPop遍历对象。
我有2个顶点,_id
属性字段为v1
和v2
。
在edgeLabel
和v1
之间创建v2
边并等待10秒后,我看到的是顶点仍然附着边缘:
g.V().has("_id", "v1").next().edges(Direction.BOTH, "edgeLabel").hasNext() == true
此外,在等待10秒之前和之后检查图表中边缘数的计数会导致相同的计数,使用以下内容:
g.E().count().next().longValue()
我确认使用JanusGraphManagement
:
final JanusGraphManagement mgmt = graph.openManagement();
mgmt.getTTL(mgmt.getEdgeLabel("edgeLabel")).getSeconds() == 5
我正在运行带有Cassandra的JanusGraph作为后端数据库存储,其属性storage.backend = cql
针对本地数据库实例,所有其他属性都是默认值。
我的问题是:为什么边缘没有被删除?是否有一些我需要做的事情,比如刷新图形数据库的状态?
据我所知,TTL应该与Cassandra一起作为后端数据库存储,并且应该足以看到在JanusGraphManagement中具有给定标签的边缘正确设置了TTL。
答案 0 :(得分:1)
边缘似乎不被移除的原因实际上是因为用于检查边缘是否被移除的过程。需要说明的是,流程如下:
e
和v1
v2
v1
并遍历其边缘以检查e
是否存在v1
并再次遍历其边缘以检查e
是否已过期且已消失麻烦来了,因为在步骤(2)中,我们创建了一个本地事务,我们访问了e
。在步骤(4)中,我们现在遍历v1
个边缘,由于我们在同一个事务中工作,e
似乎仍然存在。
解决方案是确保在执行步骤(4)之前提交事务。