DSE Graph позволяет указывать краевые мощности, то есть для определенных меток границ, он может обеспечить, чтобы только один край с такой меткой удалялся из любой вершины. Это очень хорошо работает в ручных линеаризованных тестах - попытка установить второй край с той же меткой не удастся.Гарантийные гарантии на грани в сценариях параллелизма
Однако нам непонятно, какие точные гарантии предоставляются в сценариях параллелизма, то есть когда два потока пытаются добавить к одной вершине одну и ту же метку примерно в одно и то же время.
Учитывая Кассандры в качестве базового хранилища данных, не может быть два способа можно себе представить:
Обе нити не наблюдают не присутствуют ребра. Оба потока преуспевают в добавлении ребер, первое добавление перезаписывается и видно только последнее дополнение.
Используется некоторый механизм, например, облегченные транзакции Cassandra, так что край будет добавляться только в том случае, если его нет («Сравнить и устанавливать»). Один из потоков гарантированно провалится.
Мы предполагаем, что гарантии DSE Graph достаточно прочны, что мы не можем завершить двумя наблюдаемыми ребрами с одной и той же меткой. Есть ли какая-либо информация о фактической реализации DSE Graph относительно этого?
Да, вы правы в варианте 2. так как теперь их нет документации от dse по этому поводу. Также граф DSE не предоставляет транзакцию и предоставляет транзакцию только при одном выполнении запроса. –
Знаете ли вы, как можно наблюдать отказ от добавления края с гремлином? LWT от Cassandra возвращает флаг «прикладной», есть ли эквивалент для DSE Graph? –
К сожалению, я также не нашел предопределенного пути, только то, что мы сделали, - это использование обработки исключений, а если успех - выбор края. –