节点间的关系如果存储多个时间戳?
发布于 5 年前 作者 tsingchengliu 1326 次浏览 来自 问答

用户节点与设备节点存在关系,当用户每次使用设备时,需要更新用户节点与设备节点间的关系中的时间属性。 查询时需要查询任意时间段内用户是否使用过该设备。 请问我应该怎样存储这些时间属性?

11 回复

@pangguoming 数组存的话,查询数组中值的效率怎么样? 数组类型的属性能建索引吗?

@strawberrybug 可以建索引,效率不知道咋样

@pangguoming 大佬请教一下,数组存储的话,如何查询呢? 给定时间范围,若数组中存在该时间范围的时间戳,则筛选出该边,否则不筛选。

@strawberrybug 你建模估计不太对,描述下你业务场景

@pangguoming 边有个属性,数组类型,用来存储每次发生关系时的时间戳。首尾节点每调用一次,数组添加一个调用时的时间戳。 业务场景是给定一个时间范围,若边的时间戳数组中,存在任何一个时间戳在给定的时间范围内,就查询该边及首尾节点,否则查不出。 现在没找到一个函数可以判断数组中是否存在某个值在给定的范围内

@strawberrybug 建议每次发生关系都创建一个新的关系边,此边上带有起止时间,这样cypher及好写了

@pangguoming 之前考虑过这种方案。 问题是发生关系的频次比较高,后续会有一个节点有上百万条边的可能。后续查询新边的操作会越来越慢

@strawberrybug 建议考虑集成关系数据库

@pangguoming 感谢,问题解决了。 还是采用的在边维护一个时间戳数组,每次发生关系就在数组中追加一条时间戳。根据 match(p:Person)-[r]->(m:Movie) where [x IN r.timestamps WHERE x>{minTime} and x <max{time} ] return p,r,m 可以筛选出时间戳数组中含有minTime 到 maxTime之间的边。

回到顶部