Neo4j中如何存储定量和时间序列数据
How to store quantitative and time series data in Neo4j
参考this use case,我有一组类似的数据,其中包含人名和他们对公司的所有权。但是,所有权是按百分比确定的,并且数字经常变化。所以我不能简单地记录 "Tom own X company" 但我需要 "Tom own 50% of X company from 1 Jan 2015 to 6 Jun 2015, 55% from 7 Jun 2015 to 10 Oct 2016"
数据建模的最佳方式是什么?最终,Neo4J 是处理此类数据的好工具吗?
我认为您可能需要考虑 :Ownership 节点,它代表在一定时间范围内有效的公司一定百分比的所有者。您的时间戳可能需要编入索引。
这可以让您执行如下查询:
// 求某个时间点公司的所有权百分比
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
这个模型的缺点是必然会有很多所有权节点,所以从一个或多个公司查询所有权可能会变慢,这取决于你有多少数据,但查询个人及其所有权应该比较快。
参考this use case,我有一组类似的数据,其中包含人名和他们对公司的所有权。但是,所有权是按百分比确定的,并且数字经常变化。所以我不能简单地记录 "Tom own X company" 但我需要 "Tom own 50% of X company from 1 Jan 2015 to 6 Jun 2015, 55% from 7 Jun 2015 to 10 Oct 2016"
数据建模的最佳方式是什么?最终,Neo4J 是处理此类数据的好工具吗?
我认为您可能需要考虑 :Ownership 节点,它代表在一定时间范围内有效的公司一定百分比的所有者。您的时间戳可能需要编入索引。
这可以让您执行如下查询:
// 求某个时间点公司的所有权百分比
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
这个模型的缺点是必然会有很多所有权节点,所以从一个或多个公司查询所有权可能会变慢,这取决于你有多少数据,但查询个人及其所有权应该比较快。