Кластер Кассандры: как разрешить обновления с одной отметкой времени? - PullRequest
1 голос
/ 24 марта 2019

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

Вот пример сценария

Initial data: KeyA: { colA:"val AA", colB:"val BB"}

Client 1 sends update:  `update data set colA:"val C1_ColA" where 
colB="val BB"` and data becomes below at node_1

KeyA: { colA:"val C1_ColA",  colB:"val BB"}

Client 2 `update data set colA:"val C2_ColA" where 
colB="val BB"` and data becomes becomes below at node_2

KeyA: { colA:"val C2_ColA",  colB:"val BB"}

Теперь, как значение colA будет в конечном итоге разрешено здесь?

1 Ответ

2 голосов
/ 25 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...