2016-08-18 1 views
0

Некоторое время я занимаюсь этой проблемой, но хорошим решением я не смог найти. Представьте себе, что есть приложение CRUD узла, который взаимодействует с Кассандрой кластером :)Решение для одновременных изменений документов несколькими процессами nodejs?

Например, приложение имеет эти маршруты:

curl -X POST 127.0.0.1:8080/characters -d '{"id":1, "name": "boba fett"}' 
curl -X PUT 127.0.0.1:8080/characters/1 -d '{"name": "Boba Fett"}' #<-- the problem 
curl -X GET 127.0.0.1:8080/characters/1 
curl -X DELETE 127.0.0.1:8080/characters/1 

Теперь вы должны иметь возможность запускать несколько nodejs процессов с той же логикой, но для предотвращения возможности внесения изменений в один и тот же документ в базе данных двумя процессами.

Мои идеи были:

  • только один из процессов может изменить документ

  • каждый процесс получает диапазон идентификаторов (например, способ а изменяет документ с четным идентификатором, и способ б изменяет документ с нечетным ID)

Любые другие идеи?

ответ

1

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

Ссылка должна быть предоставлена ​​вам незамедлительно: Lightweight transactions.

+0

Я не думаю, что это может быть решением. Представьте сценарий, который обрабатывает ** A ** и процесс ** B ** обновляет документ ** A1 ** в то же время '01.01.2016T00: 00: 00.000Z'. Процесс ** C ** считывает документ ** A1 ** через одну секунду после. В: Какие данные получают процесс ** C **? 1) Изменения в процессе ** A **; 2) Изменения в процессе ** B **; 3) Изменения процесса, которые являются последними записанными данными в базе данных. – yacut

0

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

Вы можете указать временные метки для операций мутации в запросах CQL.

A nice article about CQL timestamps and race condition

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