获取节点和边的创建时间

  • nebula 版本:2.0.0 rc
  • 部署方式: Docker

嗨嗨,我现在想根据节点的创建时间去删除一些比较早的节点,请问现在有提供创建时间的查询方法吗?还是说需要自己在创建节点和关系的时候手动加上创建时间这个属性呢~

那你可以给你的tag设置ttl,具体看文档 TTL - Nebula Graph Database Manual

但是文档里说 edge type的 ttl 和索引不能同时设定吗?

TTL options and indexes CANNOT coexist on a tag or an edge type. Not even if you try to set them on different properties.

是的

但是我现在 edge 也有其他属性,只有在所有属性和时间属性都满足的情况下才能删除诶。
ttl 可以代替索引去进行属性的搜索吗?

ttl 可以代替索引去进行属性的搜索吗

不能。

你是先要把符合条件的属性查出来,并且再判断他时间字段时间是否过期再删除的话,那你本来就要查的,就不需要ttl,属性是有时间类型的,目前有 timestamp, date, time, datetime

嗯嗯我再去试一下,再问一下你们现在是用的什么 hash 去生成 ID 的呀~

不过我看现在好像只有 timestamp 类型诶

嗯嗯我再去试一下,再问一下你们现在是用的什么 hash 去生成 ID 的呀~

点的id支持string或者int64,这是用户自己生成的。如果你要用 nebula 提供的 hash 函数 hash 出 int64 的id 作为 vid,那么 nebula 的 hash 函数用的 MurmurHash2。

不过我看现在好像只有 timestamp 类型诶

所有时间类型的文档链接 Date and time - Nebula Graph Database Manual

我在查询的时候不可以两个条件一起限制吗?这样查询的时候会报错:

LOOKUP ON relation WHERE (relation.create_time <= 1616653394) AND (relation.weight <=1);

但是我的索引都是建立了的,我分开查的时候是没问题的:

LOOKUP ON relation WHERE (relation.weight <=1);
LOOKUP ON relation WHERE (relation.create_time <= 1616653394);

1 个赞

是允许这样的,麻烦你贴下graphd的日志。还有你把执行show hosts graph 结果贴下。

show hosts graph 的结果是:

graphd 里面好像没有关于这个的日志诶

你是不是create 完 index 就立即执行这条query呢?

我执行的时候只 INSERT 了两个节点,之后我又试了很多次,rebuild 也用了的

你是用docker-compose部署的吗?
你可以再执行一遍吗?这个错误是有日志打印的,假如没有日志打印,说明是schema的index还没同步到,你再执行下截图。

对,用 docker-compose 部署的。

我又在 nebula-console 里面执行了,还是一样的错。

这几个 graphd 我都进了,都没有日志诶

image

日志是挂载到你本地的,不是在容器里面的,在你docker-compose工程下面有logs目录,下面有graph/graph1/graph2 你连哪个,就看那个目录下面的日志。

我找到这个,但是不确定是不是这个语句产生的日志

上面的日志没有一直打印的话,是没关系的,这个是因为一开始启动先后顺序。

问题原因了我知道了。你可以先这样做,给 relation 创建 create_time 和 weight的index的时候,用一条query执行, CREATE EDGE INDEX IF NOT EXISTS index_name ON serve(create_time, weight); 你就可以接着用,然后这个问题,我们尽快修复,感谢你的反馈。

我是直接在 studio 里面用可视化页面创建的。我再去试试看命令行创建吧~

请问这是个 bug 吗?

是bug

1 个赞