Neo4j 节点或关系是否支持 ttl?

Neo4j nodes or relationship supports ttl?

我正在学习 neo4j ,我想知道有什么方法可以创建一个 relationshipnode 会在一段时间后自动删除时间.

我不知道有这样的事。 Neo4j 只是一个类似 *SQL 或 MongoDB 的数据库(尽管让我知道他们是否可以做这样的事情)。

我最好的建议是在关系上放置一个 delete_after 属性(或类似的东西),然后有一个定期查询以清理它们的工作。请注意,您不能直接查询关系(也就是说,节点始终需要参与您的查询)因此根据您的数据库有多大,您可能需要考虑您需要什么样的索引。我在这里有点含糊,因为我不知道你的领域模型会是什么样子。

Neo4j 的另一个选项是使用 GraphAware 的 Neo4j 扩展:neo4j-expire

使用此类扩展的一个缺点是有时它们会停止支持较新版本的 Neo4j,而且它们需要一些时间才能支持最新版本。如果这些对你来说都不是问题,那么你的扩展应该没有问题。

正如@Scott 在评论中指出的那样,您可以使用 APOC 在节点上指定 TTL,如 here 所示。将以下内容附加到您的 neo4j.conf:

apoc.ttl.enabled=true

然后您可以设置适当的标签和 属性 自己:

SET n:TTL
SET n.ttl = timestamp() + 3600

或使用以下程序之一:

// Expires in
CALL apoc.date.expire.in(node,time,'time-unit')

// Expires at
CALL apoc.date.expire(node,time,'time-unit')

如果您像我一样无意中看到这篇文章,那么这篇文章最近已更新。 参考:https://neo4j.com/labs/apoc/4.3/overview/apoc.ttl/apoc.ttl.expireIn/

    Match(person:person {id: 100})
    CALL apoc.ttl.expireIn(person, 10,'s')
    Return person;