Wymagania dotyczące usług pamięci masowej
Usługi przechowywania danych firmy Datomic powinny zasadniczo spełniać 3 wymagania:
- Zaimplementuj semantykę sklepu typu klucz-wartość :wydajny dostęp do odczytu/zapisu przy użyciu indeksowanych wartości kluczy
- Obsługuj spójne odczyty . np. czytaj własne pisma. Idealnie, odczyty bez kontrowersji/bez blokad.
- Obsługa warunkowych miejsc . np. optymistyczne blokowanie + izolacja migawki.
Datomic używa usług magazynów do przechowywania bloków posortowanych, skompresowanych danych, podobnie jak tradycyjne systemy baz danych używają systemów plików, a powyższe wymagania są w zasadzie interfejsem API między podstawową usługą magazynu a Datomic. Więc wybór w usługach pamięci masowej zależą od jak dobrze obsługują te trzy wymagania .
Skalowalność zapisu
Datomic zwykle nie wywiera dużego nacisku na zapis w podstawowej usłudze pamięci masowej, ponieważ zapisuje w niej tylko jeden komponent, Transactor. Ponadto Datomic wykorzystuje zadanie indeksowania w tle, aby zintegrować nowości z pamięcią masową po zgromadzeniu wystarczającej ich ilości (domyślnie ~32 MB, ale można to skonfigurować), co dodatkowo zmniejsza stałe obciążenie zapisu. Jedyną rzeczą, którą Datomic natychmiast zapisuje, jest dziennik transakcji.
Skalowalność odczytu
Datomic używa wielu warstw pamięci podręcznej, tj. pamięci podręcznej memcached i pamięci równorzędnej, więc w idealnych okolicznościach, tj. gdy zestaw roboczy mieści się w pamięci, systemy również nie będą wywierały dużego nacisku na odczyt.
Obciążenie systemu
Jeśli Twój system nie wymaga wielkiego skalowalność zapisu, a dane aplikacji zwykle mieszczą się w pamięci, wtedy wybór konkretnej usługi pamięci masowej jest nieistotny z wyjątkiem, oczywiście, ich możliwości operacyjnych (kopie zapasowe, narzędzia administracyjne itp.), które nie mają nic wspólnego z Datomic.
Z drugiej strony, jeśli Twój system wymaga wielkiego skalowalność zapisu lub masz dużą liczbę peerów, z których każdy pracuje z większą ilością danych, niż może zmieścić się w jego pamięci (wymusza to wyniesienie wielu segmentów danych z pamięci), będziesz potrzebować systemu pamięci masowej, który może skalować w poziomie, np. DynamoDB. Jak wspomniano w jednym z komentarzy, jeśli potrzebujesz dowolnej skalowalności zapisu, Datomic i tak nie jest odpowiednim systemem dla Ciebie.