2017-02-07 2 views
1

DSE Graph позволяет указывать краевые мощности, то есть для определенных меток границ, он может обеспечить, чтобы только один край с такой меткой удалялся из любой вершины. Это очень хорошо работает в ручных линеаризованных тестах - попытка установить второй край с той же меткой не удастся.Гарантийные гарантии на грани в сценариях параллелизма

Однако нам непонятно, какие точные гарантии предоставляются в сценариях параллелизма, то есть когда два потока пытаются добавить к одной вершине одну и ту же метку примерно в одно и то же время.

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

  1. Обе нити не наблюдают не присутствуют ребра. Оба потока преуспевают в добавлении ребер, первое добавление перезаписывается и видно только последнее дополнение.

  2. Используется некоторый механизм, например, облегченные транзакции Cassandra, так что край будет добавляться только в том случае, если его нет («Сравнить и устанавливать»). Один из потоков гарантированно провалится.

Мы предполагаем, что гарантии DSE Graph достаточно прочны, что мы не можем завершить двумя наблюдаемыми ребрами с одной и той же меткой. Есть ли какая-либо информация о фактической реализации DSE Graph относительно этого?

+0

Да, вы правы в варианте 2. так как теперь их нет документации от dse по этому поводу. Также граф DSE не предоставляет транзакцию и предоставляет транзакцию только при одном выполнении запроса. –

+0

Знаете ли вы, как можно наблюдать отказ от добавления края с гремлином? LWT от Cassandra возвращает флаг «прикладной», есть ли эквивалент для DSE Graph? –

+0

К сожалению, я также не нашел предопределенного пути, только то, что мы сделали, - это использование обработки исключений, а если успех - выбор края. –

ответ

3

Одиночные края мощности в графе DSE не позволяют добавить более одного края одной метки между парой вершин. Это достигается наличием идентификатора края с фиксированным компонентом. LWT не используется. Возможно иметь несколько краев одиночной мощности одного типа, связанных с вершиной, если другие стороны ребер связаны с разными вершинами.

+1

Вопреки наблюдениям в моем первоначальном сообщении это, по-видимому, является фактическим поведением. Титан поддерживал множественные кратности MANY2ONE и ONE2MANY, что и есть то, что нам нужно. Есть ли что-то эквивалентное в DSE Graph? –

Смежные вопросы