jak szybko zwiększyć liczniki w Cassandrze bez przestojów

Mam pytanie Cassandry. Czy wiesz, jak Cassandra dokonuje aktualizacji / przyrostów liczników?

Chcę użyć burzy (CassandraCounterBatchingBolt z repozytorium storm-contrib na github), która zapisuje w kasandrze. Nie jestem jednak pewien, jak działa część implementacji metody incrementCounterColumn (). Istnieją również ograniczenia dotyczące liczników Cassandra (z:http://wiki.apache.org/cassandra/Counters) co czyni je bezużytecznymi dla mojego scenariusza IMHO:

Jeśli zapis nieoczekiwanie zakończy się niepowodzeniem (przekroczenie limitu czasu lub utrata połączenia z węzłem koordynatora), klient nie będzie wiedział, czy operacja została wykonana. Ponowna próba może spowodować przekroczenie liczby CASSANDRA-2495.

Usuwanie kontrpar jest z natury ograniczone. Na przykład, jeśli bardzo szybko wydasz sekwencję „zwiększ, usuń, zwiększ”, możliwe jest, że usunięcie zostanie utracone

W każdym razie oto mój scenariusz:
Aktualizuję ten sam licznik szybciej niż aktualizacje propagowane do innych węzłów Cassandra.

Przykład:
Powiedz, że mam 3 węzły Cassandra. Liczniki na każdym z tych węzłów wynoszą 0.
Węzeł1: 0, węzeł2: 0, węzeł3: 0

Przyrost wynosi: 5 -> Węzeł1: 0, węzeł2: 0, węzeł3: 0

Przyrost rozpoczyna się w węźle 2 - nadal musi być propagowany do węzła 1 i węzła 3
Węzeł1: 0, węzeł2: 5, węzeł3: 0

W międzyczasie pojawia się kolejny przyrost przed poprzednim przyrostem
jest propagowane: 3 -> Węzeł1: 0, węzeł2: 5, węzeł3: 0

Zakładając, że 3 zaczyna się w innym węźle niż gdzie 5 się zaczęło, mamy:
Węzeł1: 3, węzeł2: 5, węzeł3: 0

Teraz, jeśli 3 zostanie propagowane do innych węzłów JAKO INCREMENT, a nie jako nowa wartość (i to samo dla 5), ​​to ostatecznie węzły będą równe 8 i tego właśnie chcę.

Jeśli 3 nadpisuje 5 (ponieważ ma późniejszy znacznik czasu), jest to problematyczne - nie to, czego chcę.

Czy wiesz, jak te aktualizacje / przyrosty są obsługiwane przez Cassandrę?

Zauważ, że odczyt przed zapisaniem jest nadal podatny na ten sam problem, w zależności od tego, który węzeł repliki wykonuje odczyt (kworum może nadal zawieść, jeśli propagacja nie jest zbyt długa)

Myślę też, że może umieszczenie pamięci podręcznej b / w mojej burzy i Cassandry może rozwiązać ten problem, ale to historia na inny czas.

questionAnswers(3)

yourAnswerToTheQuestion