GraphAware TimeTree中的问题 - 用于分钟分辨率的错误插入

时间:2016-07-26 18:48:06

标签: neo4j graphaware

编辑:解决了问题。

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”。

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

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

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

Browser results

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

KAOU_20110613v20001_0956time:1307998620

KAOU_20110613v20001_0957time:1307998680

这些连续记录相隔1分钟。 (即time1 - time2 == 60)

那么为什么要将它们添加到同一分钟节点?我使用an epoch time converter来验证这些时间戳实际上相隔1分钟并代表它们的目的日期。

我认为这个问题导致我的性能滞后,因为我的所有记录都是在Minute节点上进行的。

所以,要么我错过了关于时间值以及时间树如何处理它们的事情,要么其他一些可疑的事情。

1 个答案:

答案 0 :(得分:1)

我发现了我的问题。回过一些documentation,我在Examples部分找到了以下内容:

"时间瞬间由{time}表示,这是一个很长的(自1970年1月1日以来的毫秒数)。"

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