0

EDIT: Solved problem.

TL;DR: TimeTree wants milliseconds since epoch. I was using seconds since epoch as my time values.


Versions:

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

I recently started using a time tree to search my graph by time ranges. I noticed some funny behavior the other day when I made a query like this:

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

Note that the time range here is only 1000 seconds apart. What was strange is that my return nodes (which are all of the same type) looked like this:

 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}

Specifically, note that the value time:1308026580 is NOT within the bounds I provided. Now, I made this example up (because the query takes forever to run right now), but I was getting similar results the last time I ran the query.

So I investigated a little. First off, this is how I insert my data into the 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;

Notice the resolution: "Minute". When I first wrote this query as a function, I forgot to specify the resolution. So when I added about 4-5 records with this method, the resolution defaulted to "Day".

I didn't think this was an issue, so I just left these records in the graph at "Day" resolution and everything following would be at resolution "Minute".

So I decided to check out the graph using the Neo4J browser to see if anything weird is going on. From here, I executed the following query:

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

Browser results

Ah ha! I noticed that all those records attached to the Minute node are consecutive records in terms of their time value. For example:

KAOU_20110613v20001_0956 has time:1307998620

KAOU_20110613v20001_0957 has time:1307998680

These consecutive records are all 1 minute apart. (i.e. time1 - time2 == 60)

So why are they being added to the same Minute node? I used an epoch time converter to verify that these time stamps are in fact 1 minute apart and represent the dates they are intended to.

I believe this problem is contributing to my performance lag since all my records are globbing up on Minute nodes.

So, either I missed something regarding the time values and how the Time Tree handles them, or something else fishy is going on.

spanishgum
  • 1,030
  • 1
  • 14
  • 29

1 Answers1

1

I figured out my problem. Going back through some documentation, I found the following in the Examples section:

"time instant represented by {time} which is a long (the number of milliseconds since 1/1/1970)."

I must have misread this somewhere, and assumed the value was represented in seconds. That explains the behavior I am experiencing perfectly. All I need to do is multiply all my time values by 1000 to get milliseconds instead.

spanishgum
  • 1,030
  • 1
  • 14
  • 29