Как избежать дублирования ребра между двумя вершинами в Gremlin apache Tinker pop?

#graph #gremlin #tinkerpop

Вопрос:

Как избежать дублирования edge между двумя вершинами в Gremlin apache Tinker pop ?

 A ->(has) -> B
 

край с одной и той же меткой HAS не должен дублироваться.

Ответ №1:

Один простой способ обеспечить уникальность-использовать составной идентификатор для каждого ребра, состоящий из идентификатора исходной вершины, метки ребра и идентификатора целевой вершины. Это гарантировало бы, что попытка добавить еще одно ребро между двумя вершинами с одинаковой меткой приведет к ошибке (поскольку каждая вершина и ребро в TinkerPop должны иметь уникальный идентификатор).

 gremlin> g.addV('vertex').property(id,'v1').as('a').
... addV('vertex').property(id,'v2').as('b').
... addE('HAS').property(id,'v1-HAS-v2').from('a').to('b')
==>e[v1-HAS-v2][v1-HAS->v2]

gremlin> g.addE('HAS').property(id,'v1-HAS-v2').from(V('v1')).to(V('v2'))
Edge with id already exists: v1-HAS-v2
Type ':help' or ':h' for help.
Display stack trace? [yN]N