在TTL过期后,JanusGraph Edges未被移除

时间:2018-05-26 00:47:39

标签: graph-databases janusgraph

这是关于JanusGraph中边缘上设置的TTL的问题。我已经设置了一个测试,我在其中创建了一个TTL持续时间的边缘标签edgeLabel - 在我的情况下为5秒。

然后我用这个标签创建一个边缘,等到TTL应该过期。但是,似乎没有从图中删除顶点。我将在下面给出一个例子,说明我想要做的事情。

实施例

让我们说g是TinkerPop遍历对象。 我有2个顶点,_id属性字段为v1v2。 在edgeLabelv1之间创建v2边并等待10秒后,我看到的是顶点仍然附着边缘:

g.V().has("_id", "v1").next().edges(Direction.BOTH, "edgeLabel").hasNext() == true

此外,在等待10秒之前和之后检查图表中边缘数的计数会导致相同的计数,使用以下内容:

g.E().count().next().longValue()

我确认使用JanusGraphManagement

正确设置了TTL值

final JanusGraphManagement mgmt = graph.openManagement(); mgmt.getTTL(mgmt.getEdgeLabel("edgeLabel")).getSeconds() == 5

配置/设置

我正在运行带有Cassandra的JanusGraph作为后端数据库存储,其属性storage.backend = cql针对本地数据库实例,所有其他属性都是默认值。

我的问题是:为什么边缘没有被删除?是否有一些我需要做的事情,比如刷新图形数据库的状态?

据我所知,TTL应该与Cassandra一起作为后端数据库存储,并且应该足以看到在JanusGraphManagement中具有给定标签的边缘正确设置了TTL。

1 个答案:

答案 0 :(得分:1)

边缘似乎不被移除的原因实际上是因为用于检查边缘是否被移除的过程。需要说明的是,流程如下:

  1. 在顶点ev1
  2. 之间创建边v2
  3. 检索v1并遍历其边缘以检查e是否存在
  4. 等到TTL时间过去了
  5. 检索v1并再次遍历其边缘以检查e是否已过期且已消失
  6. 麻烦来了,因为在步骤(2)中,我们创建了一个本地事务,我们访问了e。在步骤(4)中,我们现在遍历v1个边缘,由于我们在同一个事务中工作,e似乎仍然存在。

    解决方案是确保在执行步骤(4)之前提交事务。