Как лучше всего выполнять мягкое удаление в базе данных Graph?

Как лучше всего реализовать мягкое удаление с отметками времени (дата начала и дата окончания) в базе данных Graph?

1 ответ

Решение

Что ж, довольно просто закрыть обход на основе временной метки. Возьмем этот пример графика, где "ts" - это фиктивная временная метка, представленная как длинное:

      gremlin> g.addV('person').property('name','alice').as('a').
......1>   addV('person').property('name','bob').as('b').
......2>   addV('person').property('name','claire').as('c').
......3>   addE('interacted').property('ts', 125).from('a').to('b').
......4>   addE('interacted').property('ts', 126).from('a').to('b').
......5>   addE('interacted').property('ts', 127).from('a').to('b').
......6>   addE('interacted').property('ts', 126).from('b').to('c').
......7>   addE('interacted').property('ts', 150).from('b').to('c').
......8>   addE('interacted').property('ts', 151).from('a').to('b').iterate()

Вы можете просто написать свой Гремлин для учета "ts":

      gremlin> yesterday = 130
==>130
gremlin> g.V().has('person','name','alice').
......1>   outE('interacted').has('ts',gt(yesterday)).inV().
......2>   values('name')
==>bob

В зависимости от сложности ваших требований добавление этого фильтра к «ts» может стать обременительным и загромождать ваш код. Если это так, возможно, что SubgraphStrategy может помочь:

      gremlin> sg = g.withStrategies(SubgraphStrategy.build().edges(has('ts',gt(yesterday))).create())
==>graphtraversalsource[tinkergraph[vertices:3 edges:6], standard]
gremlin> sg.V().has('person','name','alice').out('interacted').values('name')
==>bob
gremlin> g.V().has('person','name','alice').out('interacted').values('name')
==>bob
==>bob
==>bob
==>bob
Другие вопросы по тегам