0

编辑:解决的问题。

TL;DR:TimeTree 需要自纪元以来的毫秒数。我使用自纪元以来的秒数作为我的时间值。


版本:

Neo4j community : 3.0.3
GraphAware / TimeTree community server plugins : 3.0.3.39

我最近开始使用时间树按时间范围搜索我的图表。前几天当我进行这样的查询时,我注意到了一些有趣的行为:

"
WITH ({start:1350542000,end:1350543000}) as tr
CALL ga.timetree.events.range(tr) YIELD node as n
RETURN n
LIMIT 5;
"

请注意,这里的时间范围仅相隔 1000 秒。奇怪的是,我的返回节点(它们都是同一类型)看起来像这样:

 Node[343421]{gtype:1,bbox:[121.01454162597656,20.602155685424805,121.01454162597656,20.602155685424805],meta:"KAOU_20110613v20001_1422",time:1308026580,lat:20.602155685424805,lon:121.01454162597656}

具体来说,请注意该值time:1308026580不在我提供的范围内。现在,我制作了这个示例(因为查询现在需要永远运行),但我上次运行查询时得到了类似的结果。

所以我调查了一下。首先,这是我将数据插入 TimeTree 的方式:

MATCH (r:record {meta:"KAOU_20110613v20001_1422"}) 
WITH r 
CALL ga.timetree.events.attach({node: r, time: r.time, relationshipType: "observedOn", resolution:"Minute"}) 
YIELD node 
RETURN node.meta;

注意resolution: "Minute". 当我第一次将这个查询写成一个函数时,我忘了指定分辨率。因此,当我使用此方法添加大约 4-5 条记录时,分辨率默认为“Day”。

我不认为这是一个问题,所以我只是将这些记录以“Day”分辨率保留在图表中,随后的所有内容都将在“Minute”分辨率下。

所以我决定使用 Neo4J 浏览器查看图表,看看是否有任何奇怪的事情发生。从这里,我执行了以下查询:

MATCH p=(:TimeTreeRoot)-[:CHILD*5]-()-[]-(:record) RETURN p LIMIT 25;

浏览器结果

啊哈!我注意到所有附加到Minute节点的记录在时间价值方面都是连续的记录。例如:

KAOU_20110613v20001_0956time:1307998620

KAOU_20110613v20001_0957time:1307998680

这些连续的记录都相隔 1 分钟。(即时间1 - 时间2 == 60)

那么为什么将它们添加到同一个 Minute 节点?我使用了一个纪元时间转换器来验证这些时间戳实际上相隔 1 分钟,并表示它们的预期日期。

我相信这个问题会导致我的性能滞后,因为我所有的记录都在 Minute 节点上。

所以,要么我错过了一些关于时间值和时间树如何处理它们的东西,要么是其他一些可疑的事情正在发生。

4

1 回答 1

1

我发现了我的问题。回顾一些文档,我在该Examples部分中找到了以下内容:

“由 {time} 表示的时间瞬间,它很长(自 1970 年 1 月 1 日以来的毫秒数)。”

我一定在某处误读了这个,并假设该值以秒为单位。这完美地解释了我正在经历的行为。我需要做的就是将所有时间值乘以 1000 以获得毫秒数。

于 2016-07-26T19:28:19.547 回答