У меня есть этот сценарий, где каждый (источник) Entity
имеет Properties
, у которых есть цель, указывающая на другую Entity
. Эти сопоставления свойств группируются вместе. То, что я хочу сделать, - это запросить те объекты, которые имеют определенные свойства с соответствующими целевыми объектами, но находятся в одной группе.Какое моделирование данных лучше для этого гиперграфа, используя Gremlin и DSE Graph?
Гиперграф хотел бы, что (прямоугольники гиперребра):
JSON
будет выглядеть так:
{
id: 1, label: "Entity",
propertyGroups: [
{
propertyGroupUuid: GroupUuid1,
property: {id: 1, label: "Property", name: "aName1"},
target: {id: 2, label: "Entity"}
},
{
propertyGroupUuid: GroupUuid2,
property: {id: 2, label: "Property", name: "aName2"},
target: {id: 3, label: "Entity"}
},
{
propertyGroupUuid: GroupUuid2,
property: {id: 3, label: "Property", name: "aName3"},
target: {id: 4, label: "Entity"}
}]
}
самой плоской версии этого в базе данных графа может выглядеть например:
Хотя наиболее расширенная версия этого может выглядеть так:
Так что, если я хочу:
- получить все
Entities
, которые имеютProperty 2
иProperty 3
под тем же PropertyGroupUuid «нацеливание "Entity 3
иEntity 4
соответственно Я должен был вернутьсяEntity 1
- получить все
Entities
t шляпа естьProperty 1
иProperty 2
под тем же PropertyGroupUuid «ориентации»Entity 2
иEntity 3
соответственно я должен НЕ вернутьсяEntity 1
Как это можно сделать с помощью гном против двух версий графика и какой из них более гибкими/эффективными, используя правильные индексы, такие как те, которые включены в DSE Graph? Есть ли лучшие альтернативы, о которых я не думал? Если ответ будет подробным и хорошо объясненным, я дам награду как минимум 50 :)
Спасибо!
Вы меня путаете, потому что вы показываете свойства как узлы. Как правило, гиперребрами реализуются как узлы. Если посмотреть только на начальную диаграмму, вы добавите три HE-узла, по одному для каждого из трех прямоугольников, и добавьте ссылку от каждой сущности на каждый узел HE, в котором она находится. Если свойства и группы свойств являются узлами, тогда у них будут ссылки на их содержащих HE-узлы. –
Да, мои свойства на самом деле являются объектами с именами, а не свойствами графика. Вот почему у меня есть их как узлы. –
Итак, как вы получаете доступ к «проти»? 'g.V(). имеет (« Свойство »,« имя »,« Свойство 1 »)'? –