Я думаю, вы могли бы подумать: узлы владения, которые представляют собой владельца процентной доли компании, действительной во время диапазона. Вероятно, ваши метки времени должны быть проиндексированы.
Это может позволить вам выполнять запросы, такие как:
// найти процент владения в компании на момент времени
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
Недостаток этой модели заключается в том, что существует ограниченное количество узлов владения, поэтому запросы на владение от компании или компаний могут замедляться в зависимости от того, сколько данных у вас есть, но запросы отдельных лиц и их владельцев должны быть сравнительно быстрым.
Большое спасибо! Я совершенно не знаком с Neo4j или графическим DB. Вы упомянули, что запрос из компании медленный, потому что он, как правило, медленно запрашивает данные, которые связаны с? Могу ли я просто добавить ссылку от узла Ownership к Person, представляющему отношения «Будучи владельцем»? –
Направление отношений здесь не имеет значения. Мой комментарий о медлительности объясняется количеством данных, присутствующим и нуждающимся в фильтрации, когда вы запрашиваете один путь против другого. У одного человека, вероятно, будет очень мало: узлы владения, к которым они привязаны, по сравнению с одной компанией, которая может иметь тысячи, сотни тысяч или даже миллионы узлов, поскольку она должна представлять собой владение с течением времени на протяжении всей жизни компании (в зависимости от того, сколько данных в вашей системе). Поэтому запросы от компании (или компаний) о собственности должны касаться гораздо большего подграфа. – InverseFalcon