Как хранить количественные данные и данные временных рядов в Neo4j
Ссылаясь на этот вариант использования, у меня есть набор похожих данных, которые содержат имена людей и их права собственности на компании. Тем не менее, право собственности определяется в процентах, а цифры часто меняются. Поэтому я не могу просто записать "Tom own X company", но мне нужно, чтобы "Tom владел 50% компании X с 1 января 2015 года по 6 июня 2015 года, 55% с 7 июня 2015 года по 10 октября 2016 года"
Каков наилучший способ для моделирования данных? В конечном счете, 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
Слабость этой модели заключается в том, что существует множество узлов владения, поэтому запросы на владение компанией или компаниями могут замедляться в зависимости от того, сколько у вас данных, но запросы отдельных лиц и их владельцев должны быть сравнительно быстрыми.