GraphAware TimeTree 中的问题 - 分钟分辨率的错误插入
Issue in GraphAware TimeTree - bad insertions for minute resolution
编辑:已解决问题。
TL;DR: TimeTree 需要自纪元以来的毫秒数。我使用纪元以来的秒数作为我的时间值。
版本:
Neo4j community : 3.0.3
GraphAware / TimeTree community server plugins : 3.0.3.39
我最近开始使用时间树按时间 运行ges 搜索我的图表。前几天,当我进行如下查询时,我注意到一些有趣的行为:
"
WITH ({start:1350542000,end:1350543000}) as tr
CALL ga.timetree.events.range(tr) YIELD node as n
RETURN n
LIMIT 5;
"
注意这里的时间运行ge只相隔1000秒。什么是 st运行ge 是我的 return 节点(它们都是同一类型)看起来像这样:
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_0956
有 time:1307998620
KAOU_20110613v20001_0957
有 time:1307998680
这些连续的记录都相隔1分钟。 (即时间 1 - 时间 2 == 60)
那么为什么它们被添加到同一个 Minute 节点?我使用 an epoch time converter 来验证这些时间戳实际上相隔 1 分钟并代表它们预期的日期。
我认为这个问题导致了我的性能滞后,因为我的所有记录都在 Minute 节点上。
所以,要么我错过了有关时间值以及时间树如何处理它们的信息,要么发生了其他可疑的事情。
我想通了我的问题。回顾一些 documentation,我在 Examples
部分发现了以下内容:
"time instant represented by {time} which is a long (the number of milliseconds since 1/1/1970)."
我一定是在某处误读了这个,并假设该值以秒为单位表示。这完美地解释了我正在经历的行为。我需要做的就是将所有时间值乘以 1000 以获得毫秒。
编辑:已解决问题。
TL;DR: TimeTree 需要自纪元以来的毫秒数。我使用纪元以来的秒数作为我的时间值。
版本:
Neo4j community : 3.0.3
GraphAware / TimeTree community server plugins : 3.0.3.39
我最近开始使用时间树按时间 运行ges 搜索我的图表。前几天,当我进行如下查询时,我注意到一些有趣的行为:
"
WITH ({start:1350542000,end:1350543000}) as tr
CALL ga.timetree.events.range(tr) YIELD node as n
RETURN n
LIMIT 5;
"
注意这里的时间运行ge只相隔1000秒。什么是 st运行ge 是我的 return 节点(它们都是同一类型)看起来像这样:
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_0956
有 time:1307998620
KAOU_20110613v20001_0957
有 time:1307998680
这些连续的记录都相隔1分钟。 (即时间 1 - 时间 2 == 60)
那么为什么它们被添加到同一个 Minute 节点?我使用 an epoch time converter 来验证这些时间戳实际上相隔 1 分钟并代表它们预期的日期。
我认为这个问题导致了我的性能滞后,因为我的所有记录都在 Minute 节点上。
所以,要么我错过了有关时间值以及时间树如何处理它们的信息,要么发生了其他可疑的事情。
我想通了我的问题。回顾一些 documentation,我在 Examples
部分发现了以下内容:
"time instant represented by {time} which is a long (the number of milliseconds since 1/1/1970)."
我一定是在某处误读了这个,并假设该值以秒为单位表示。这完美地解释了我正在经历的行为。我需要做的就是将所有时间值乘以 1000 以获得毫秒。