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 件のレコードを追加すると、解像度はデフォルトで「日」になりました。

これが問題だとは思わなかったので、これらのレコードを「日」の解像度でグラフに残しただけで、それ以降はすべて「分」の解像度になります。

そこで、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)

では、なぜそれらは同じ分のノードに追加されているのでしょうか? エポック タイム コンバーターを使用して、これらのタイム スタンプが実際には 1 分ずれており、意図した日付を表していることを確認しました。

すべてのレコードが Minute ノードに蓄積されているため、この問題がパフォーマンス ラグの原因になっていると思います。

つまり、時間の値とタイム ツリーがそれらを処理する方法に関して何かを見逃したか、何か怪しいことが起こっているかのどちらかです。

4

1 に答える 1