Janusgraph/TinkerPop - Нарушение ограничения - Как добавить или обновить существующую вершину

Я определил в своей схеме ограничения, чтобы обеспечить уникальность заданных вершин на основе одного или нескольких свойств. Например:
mgmt.buildIndex('byTenandIdUnique',Vertex.class).addKey(tenantId).unique().buildCompositeIndex()

Как и ожидалось, теперь, когда я пытаюсь добавить уже существующую вершину, я получаю сообщение об ошибке, как показано ниже:

aiogremlin.exception.GremlinServerError: 500: Adding this property for key [tenantId] and value [ACME2_AX2] violates a uniqueness constraint [byTenandIdUnique]

Я пишу приложение Python для загрузки файлов журналов с помощью Goblin OGM, поэтому ожидается, что данные будут повторяться, и я не хочу нескольких экземпляров одной вершины, отсюда и ограничение.

Есть ли способ в TinkerPop или JanusGraph обновить Vertex в случае, если она уже существует, вместо того, чтобы выдавать это исключение? Или это то, что OGM должен обрабатывать, или, может быть, сам код, запрашивая график перед любой транзакцией?

1 ответ

TinkerPop ничего не делает для принудительного применения схемы, поэтому ограничение схемы здесь специфично для JanusGraph. Поведение такое же, как вы описали: если у вас определен уникальный индекс, а затем вы пытаетесь добавить другой элемент, который конфликтует с существующим элементом, выдается исключение.

С точки зрения JanusGraph ваша логика должна учитывать это должным образом. Код ниже основан на общем рецепте с использованием coalesce() шаг, который вы можете прочитать больше о здесь.

// check for existence of a vertex with the tenantId property
// if the vertex exists, return that vertex
// else create a new vertex with the tenantId
v = g.V().property("tenantId", "ACME2_AX2").fold(). \
    coalesce( __.unfold(), __.addV().property("tenantId", "ACME2_AX2") ). \
    next();

Я не использую Goblin, поэтому я не знаю, способен ли Goblin справиться с этим или передает эту ответственность разработчику приложения, но проверка существования перед установкой свойства все еще является подходящим способом справиться с ситуацией.,

Другие вопросы по тегам