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

这个模型的缺点是必然会有很多所有权节点,所以从一个或多个公司查询所有权可能会变慢,这取决于你有多少数据,但查询个人及其所有权应该比较快。