Bazy klucz-wartość
Bazy klucz-wartość to proste hashmapy, pozwalające zapisać i odczytać umieszczone pod określonym kluczem – identyfikatorem, dowolne dane, często poświęcające trwałość w celu uzyskania wyższej szybkości (potwierdzenie zapisu danych po zapisie do pamięci operacyjnej, przed zapisem do pamięci masowej). Wykorzystywane są one głównie do przechowywania danych tymczasowych – cache obiektów z właściwej bazy danych, przechowywanie sesji zalogowanych użytkowników, czy zawartości ich koszyków zakupowych.
Riak
- Zawartość: Typowy key-value store – nie wnika w wartość, jest to dla niego blob, aczkolwiek istnieją rozszerzenia (Riak Search) pozwalające na przeszukiwanie wartości. Biblioteki klienckie zajmują się serializacją i deserializacją danych. Najczęściej pojedynczy bucket odpowiada pojedynczej serializowanej klasie. Poszczególne wartości mogą wygasać po zadanym czasie.
- Komunikacja: REST API (CRUD)
- Dostęp: Baza danych ➔ Bucket ➔ Klucz ➔ Wartość
- Skalowanie/architektura klastra: Istnieje klaster z automatyczną replikacją i shardingiem. Przestrzeń wszystkich możliwych hashy kluczy dzielona jest na X partycji, następnie partycje te przydzielane są w cyklu round-robin kolejnym węzłom klastra, tak, że każdy węzeł odpowiada za przechowywanie danych z co X-tej partycji. np. klaster może być podzielony na 32 partycje i składać się z 4 węzłów – wtedy każdy z nich obsługuje po 8 “ułożonych naprzemiennie” partycji (ilustracja nr 1). W trakcie zapisu dane umieszczane są na N kolejnych partycjach (obsługiwanych przez N kolejnych węzłów, ilustracja nr 2). Użytkownik w celu zapisu lub odczytu, może połączyć się z dowolnym węzłem klastra. Więcej informacji tutaj.
- Spójność: Tworząc bucket decydujemy ile ma mieć replik [N] (na ilu kolejnych partycjach ma być zapisany każdy klucz) oraz na ile potwierdzeń zapisu oczekujemy [W], z ilu replik [R] odczytujemy dane (j/w) oraz co ma się stać, jeśli w trakcie zapisu nastąpi inny zapis do tego samego klucza na innym serwerze (wygrywa najnowszy po synchronizacji lub zapisywane są obie wersie klucza ze znacznikiem czasowym).
- Trwałość: Konfigurując bucket, oprócz ustawienia parametru [W] mówiącego nam o tym, na ile potwierdzeń zapisu oczekujemy, możemy także ustawić parametr [DW], mówiący o tym, ile replik ma potwierdzić zapis danych do pamięci masowej, zanim uznamy zapis za wykonany. Więcej informacji tutaj.
- Transakcje: Brak. Atomowe zmiany w obrębie jednego dokumentu.