2016-10-29 16 views
0

this use caseを参照すると、人名と企業の所有権を含む同様のデータがあります。ただし、所有権はパーセンテージで識別され、番号は頻繁に変更されます。 "トム自身のX社"を単に記録することはできませんが、2015年1月1日から2015年6月6日まで、トムはX社の50%、2015年6月7日から2016年10月10日までは55%が必要です。Neo4jに量的および時系列データを保存する方法

データをモデル化する方法は?最終的に、Neo4Jはこのタイプのデータに適したツールですか?

答えて

1

私はあなたが考えているかもしれないと思うかもしれないと思うかもしれません:時間の範囲内で有効な会社のパーセンテージの所有者を表す所有権ノード。あなたのタイムスタンプのインデックスを作成する必要があります。

//時点の会社で所有権の割合を見つける

WITH {params.instant} as instant 
MATCH (p:Person{name:'Bob Barker'})-[:Owns]->(o:Ownership)-[:Of]->(:Company{name:'KrispyKreme'}) 
WHERE o.start <= instant <= o.end 
RETURN o.percentage 

//ユーザーが今まで所有している最大の割合を見つける:

これは、次のようなクエリを実行させることができますどのような企業の

MATCH (p:Person{name:'Bob Barker'})-[:Owns]->(o:Ownership) 
ORDER BY o.percentage DESC 
LIMIT 1 
WITH o 
MATCH (o)-[:OF]->(c:Company) 
RETURN c, o.percentage 

//所有者を見つける時点でどのような企業の割合

WITH {params.instant} as instant 
MATCH (o:Ownership)-[:Of]->(c:Company{name:'KripsyKreme'}) 
WHERE o.start <= instant <= o.end 
WITH o 
MATCH (p:Person)-[:Owns]->(o) 
RETURN p, o.percentage 

このモデルの弱点は、所有ノードが非常に多くなることです。企業の所有権に関するクエリは、所有するデータの量に応じて遅くなる可能性がありますが、個人および所有者のクエリは、比較的速い。

+0

ありがとうございました!私はNeo4jやグラフDBについて全く新しいです。あなたは会社からの問い合わせが遅いと述べましたが、それは一般にリンクされているデータを照会するのが遅いためですか? Ownershipノードのリンケージを、「Being Owned」関係を表すPersonに単に追加することはできますか? –

+0

関係の方向はここでは関係ありません。遅さに関する私のコメントは、存在するデータの量と、ある方法と別の方法を照会するときにフィルタリングする必要があるためです。 1人の人は非常に少ない可能性があります。会社の全ライフタイムでの所有権を表す必要があるため、数千、数千、または数百万のノードを持つ単一の企業と比較して、 (システム内のデータ量によって異なります)。したがって、企業(または企業)からの所有権に関するクエリは、はるかに大きなサブグラフに触れなければなりません。 – InverseFalcon

関連する問題