2016-10-29 3 views
0

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

+0

Направление отношений здесь не имеет значения. Мой комментарий о медлительности объясняется количеством данных, присутствующим и нуждающимся в фильтрации, когда вы запрашиваете один путь против другого. У одного человека, вероятно, будет очень мало: узлы владения, к которым они привязаны, по сравнению с одной компанией, которая может иметь тысячи, сотни тысяч или даже миллионы узлов, поскольку она должна представлять собой владение с течением времени на протяжении всей жизни компании (в зависимости от того, сколько данных в вашей системе). Поэтому запросы от компании (или компаний) о собственности должны касаться гораздо большего подграфа. – InverseFalcon

Смежные вопросы