这是一个关于JanusGraph中边的TTL设置的问题。我已经设置了一个测试,其中我创建了一个具有TTL持续时间的边缘标签edgeLabel
-在我的例子中是5秒。
然后,我使用这个标签创建一个边,并等待TTL到期。但是,看起来顶点并没有从图中删除。我将在下面给出一个例子,来说明我正在尝试做什么。
示例
假设g
是TinkerPop遍历对象。我有两个顶点,_id
属性字段分别为v1
和v2
。在v1
和v2
之间创建edgeLabel
边并等待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
配置/设置
我正在运行JanusGraph,使用Cassandra作为后端数据库存储,在本地数据库实例上使用属性storage.backend = cql
,所有其他属性都是默认值。
我的问题是:为什么边缘没有被移除?我是否需要做一些我遗漏的事情,比如刷新图形数据库的状态?
据我所知,TTL应该使用Cassandra作为后端数据库存储,并且应该足以看到TTL在JanusGraphManagement中为具有给定标签的边缘设置正确。
发布于 2018-06-09 05:58:58
边缘看起来没有被移除的原因实际上是因为用于检查边缘是否被移除的过程。为了清楚起见,该过程如下:
e
和v1
之间创建边并遍历其边以检查e
是否存在,并等待,直到TTL时间具有passedv1
并再次遍历其边,以检查<v1
>D14e>是否已过期且已消失<代码>H215<代码>G216麻烦来了,因为在第(2)步中,已经在访问e
的地方创建了一个本地事务。在第(4)步中,我们现在正在遍历v1
的边,因为我们在同一个事务中工作,所以e
似乎仍然存在。
解决方案是确保在执行步骤(4)之前提交事务。
https://stackoverflow.com/questions/50538382
复制相似问题