2011-01-17 13 views
8

Czy istnieje również możliwość synchronizacji klienta za pomocą wbudowanych funkcji Kasandra?Kasowanie wzajemnego blokowania wykluczenia (synchronizacja)

Potrzebuję wykonać niektóre operacje i te operacje muszą zostać zsynchronizowane z wszystkimi innymi klientami (wzajemne wykluczenie).

W RDBMS mogę zablokować całą tabelę lub przygotować specjalną tabelę dla celów synchronizacji i użyć polecenia WYBIERZ ... DLA AKTUALIZACJI.

Czy mogę to osiągnąć z Cassandrą bez aplikacji innych firm? Jeśli nie, jaki jest najlepszy sposób na zrobienie tego? Preferowane języki to Java i Python.

Odpowiedz

8

Nie można zablokować całego (lub podzbioru) rodziny kolumn bez bibliotek osób trzecich, takich jak Apache ZooKeeper.

I pewnie zacząć patrzeć na Domic Williams cages przed rozpoczęciem toczenia mój własny rozprowadzane mechanizm blokujący

+1

I nie trzeba zablokować rodzinę kolumny. WYBIERZ DLA AKTUALIZACJI odpowiednik byłby najlepszy. Sprawdzę ZooKeeper – Daimon

+3

Jest również całkiem prawdopodobne, że możesz tego uniknąć, dostosowując swój model danych. Być może to by zrobić inne dobre pytanie WIĘCEJ? –

+2

Nie, potrzebuję architektury przetwarzania rozproszonego i Cassandry jako pamięci masowej. Potrzebuję synchronizacji niektórych operacji, aby zapobiec przetwarzaniu tych samych danych przez więcej niż jeden komputer. – Daimon

2

Jeśli aktualizujesz jeden wiersz w rodzinie kolumny, jest atomowy. Ale to nie będzie działać jak wybierz do aktualizacji. Powinieneś prawdopodobnie powrócić do swojego modelu danych mając na uwadze więcej denormalizacji, abyś nie musiał się martwić o synchronizację.

0

Szukałem również sposobu na synchronizację z Kasandra, ale o ile wiem, nie zapewnia mechanizmów do implementacji muteksów.

Jednak memcached posiada operację atomowej cas (check and set), której można użyć do implementacji mutex. Ma również klientów Pythona i Java.

Możesz użyć memcached do implementacji muteksów do synchronizacji i odczytuje/zapisuje dane z poziomem spójności kworum w Kasandra, aby upewnić się, że najnowsze zapisy są zawsze zwracane podczas czytania.

Czy ktoś ma doświadczenie w implementowaniu muteksa z memcached?

+0

Może to być trochę niestabilne, jeśli niektóre muteksy są opróżniane lub awarie serwera, które zwolnią blokadę zbyt wcześnie. Jednak nie jestem pewien, jak prawdopodobne jest to, że blokowanie odbywa się przez maksymalnie kilka sekund. Stabilność zależy od zastosowania, sposobu użycia muteksów. –