如何在Neo4j中存储定量和时间序列数据

时间:2016-10-29 16:53:02

标签: neo4j graph-databases

参考this use case,我有一组类似的数据,其中包含人名和公司所有权。但是,所有权由百分比确定,数字经常变化。所以我不能简单地记录汤姆自己的X公司"但是我需要" Tom从2015年1月1日到2015年6月6日拥有X公司50%的股份,2015年6月7日至2016年10月10日期间55%#34;

对数据建模的最佳方法是什么?最终,Neo4J是这类数据的好工具吗?

1 个答案:

答案 0 :(得分: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

这种模式的弱点在于必然存在大量的所有权节点,因此根据您拥有的数据量,对公司或公司所有权的查询可能会变慢,但对个人及其所有权的查询应该相对较少快。