对Tag属性设置TTL后,无法插入点

show create tag t1;

插入不带TTL属性的vid=100的节点

INSERT VERTEX t1(a) VALUES “100”:(4)

查询结果:
MATCH (v:t1) RETURN v LIMIT 100

image

插入带TTL属性的vid=200的节点

INSERT VERTEX t1(a,b) VALUES “200”:(4,now())

但是这个点查不到,还是只有vid=100的节点
MATCH (v:t1) RETURN v LIMIT 100

image

官网对TTL的描述有点绕,按理说这里的vid=200的点是不是10秒后才会过期呢?为什么插入之后立即查询会查询不到。

另外补充一个问题。
文档描述:如果一个点仅有一个 Tag,点上的一个属性过期,点也会过期。
点过期之后会在Compaction的时候删除吗?因为通过测试实际上点还是在的。
这样其实除了悬挂边之外其实也存在这种无用的点,需要手动设计删除机制


属性值和时间戳差值之和如果小于当前时间戳,属性就会过期。如果ttl_duration为0,属性永不过期。
你现在的系统时间戳肯定比10大很多,自然查不到

这个问题是一个已知问题,有一些情形下会出现这种现象,我们已经在计划处理,具体可以参考:TTL configured,but vid still can be found after expiration,after compaction looks normal · Issue #4399 · vesoft-inc/nebula · GitHub

TTL 这个语句可能是因为 graphd 和 storaged 的时间不一致造成的。 now() 函数在插入时是在 graphd 节点中计算的,计算得到的属性值会被存入 storaged;TTL 检查是否过期是在 storaged 中进行的,具体过程是读出之前存入的属性值,然后加上 ttl_duration,再和 storaged 的时间做比较。此处属性值来源于 graphd,当前时间来源于 storaged,存在时间不统一的可能性,造成 TTL 行为可能与预期不符。

目前我们建议在部署集群的时候使用 NTP 同步集群时间,见文档:

我们目前在讨论在未来的迭代中统一和改进分布式系统中时间的管理。这部分目前文档描述的信息可能比较分散,我们也会尽快 fix。

非常感谢

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。