Organizacja Apache Software Foundation zaprezentowała wersję rozproszonej bazy danych Apache Cassandra 4.0, która należy do klasy systemów noSQL i jest przeznaczona do tworzenia wysoko skalowalnych i niezawodnych magazynów ogromnych zbiorów danych, przechowywanych w formie tablicy asocjacyjnej (haszu). Wydanie Cassandra 4.0 uznano za gotowe do wdrożeń w produkcji i już przetestowano w infrastrukturach takich firm jak Amazon, Apple, DataStax, Instaclustr, iland i Netflix z klastrami liczącymi ponad 1000 węzłów. Kod projektu napisano w języku Java i jest dystrybuowany na zasadzie licencji Apache 2.0.
Początkowo baza danych Cassandra została opracowana przez firmę Facebook i w 2009 roku przekazana pod patronat fundacji Apache. Przemysłowe rozwiązania oparte na Cassandrze są wdrożone w celu zapewnienia wsparcia dla usług takich firm jak Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit i Twitter. Na przykład infrastruktura przechowywania oparta na Apache Cassandra wdrożona przez firmę Apple liczy ponad tysiąc klastrów, obejmujących 160 tysięcy węzłów i przechowujących ponad 100 petabajtów danych. W firmie Huawei używanych jest ponad 300 klastrów Apache Cassandra, obejmujących 30 tysięcy węzłów, a w Netflixie — ponad 100 klastrów, które pokrywają 10 tysięcy węzłów i przetwarzają ponad trylion zapytań dziennie.
Baza danych Cassandra łączy w sobie w pełni rozproszony system hash Dynamo, który zapewnia praktycznie liniową skalowalność przy zwiększającym się wolumenie danych. Cassandra używa modelu przechowywania danych opartego na rodzinach kolumn (ColumnFamily), różniącego się od systemów podobnych do memcachedb, które przechowują dane tylko w parze klucz/wartość, możliwością organizacji przechowywania haszy z wieloma poziomami zagnieżdżenia. Aby uprościć interakcję z bazą danych, wspierany jest język do tworzenia strukturalnych zapytań CQL (Cassandra Query Language), przypominający SQL, lecz ograniczony pod względem funkcji. Można wymienić wsparcie dla przestrzeni nazw i rodzin kolumn, a także tworzenie indeksów za pomocą wyrażenia „CREATE INDEX”.
Baza danych pozwala na tworzenie odpornych na awarie magazynów: dane wprowadzane do bazy danych automatycznie replikowane są na kilka węzłów rozproszonej sieci, która może obejmować różne centra przetwarzania danych. W przypadku awarii węzła, jego funkcje są na bieżąco przejmowane przez inne węzły. Dodawanie nowych węzłów do klastra oraz aktualizacja wersji Cassandra odbywa się na bieżąco, bez potrzeby dodatkowej ingerencji ręcznej i rekonfiguracji innych węzłów. Sterowniki z obsługą CQL są przygotowane dla języków Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ i JavaScript (Node.js).
Główne nowości:
- Zwiększona wydajność i skalowalność. Zwiększona efektywność wymiany danych w formacie SSTable (Sorted Strings Table) między węzłami. Optymalizowany protokół wymiany wiadomości między węzłami (Internode Messaging Protocol). Prędkość przesyłania strumieni danych między węzłami wzrosła do 5 razy (głównie dzięki zastosowaniu techniki Zero Copy i przesyłania SSTables w całości), a przepustowość w operacjach odczytu i zapisu do 25%. Optymalizowany proces inkrementalnego przywracania. Opóźnienia spowodowane wstrzymywaniem działania przez kolektor śmieci zmniejszone do kilku milisekund.
- Dodano wsparcie dla logu audytu, umożliwiającego śledzenie operacji autoryzacji użytkowników oraz wszystkich wykonywanych zapytań CQL.
- Dodano możliwość prowadzenia pełnego binarnego logu zapytań, umożliwiającego zachowanie całego ruchu zapytań i odpowiedzi. Do zarządzania proponowane są komendy «nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog», a do analizy loga dostarczono narzędzie fqltool. Udostępniono komendy do przekształcania loga w czytelny format (Dump), porównywania zrzutów aktywności (Compare) oraz ponownego wykonania (Replay) do analizy z odtworzeniem warunków charakterystycznych dla rzeczywistego obciążenia.
- Dodano wsparcie dla wirtualnych tabel, które odzwierciedlają nie dane przechowywane w SSTables, ale informacje dostarczane przez API (metryki wydajności, informacje o ustawieniach, zawartość pamięci podręcznej, dane o podłączonych klientach itp.).
- Zwiększona efektywność przechowywania danych w skompresowanej formie, co pozwala na zmniejszenie zużycia przestrzeni dyskowej oraz zwiększenie wydajności operacji odczytu.
- Dane odnoszące się do przestrzeni kluczy systemowych (system.*) są teraz domyślnie umieszczane w pierwszym katalogu zamiast rozprzestrzenienia po wszystkich katalogach z danymi, co pozwala zachować funkcjonalność węzła w przypadku awarii jednego z dodatkowych dysków.
- Dodano eksperymentalne wsparcie dla replikacji czasowej (Transient Replication) oraz lekkich quorumów (Cheap Quorums). Repliki czasowe nie przechowują wszystkich danych i używają inkrementalnego przywracania, aby synchronizować się z pełnymi replikami. Lekkie quorumy realizują optymalizację operacji zapisu, gdzie zapis do replik czasowych nie jest dokonywany, dopóki nie będzie dostępny wystarczający zestaw pełnych replik.
- Dodano eksperymentalne wsparcie dla Java 11.
- Dodano eksperymentalną opcję do porównywania wszystkich drzew Merkle (Merkle Tree). Na przykład włączenie tej opcji w klastrze z 3 węzłami, w którym dwie repliki są identyczne, a jedna przestarzała, spowoduje zaktualizowanie przestarzałej repliki z wykorzystaniem tylko jednej operacji kopiowania aktualnej repliki.
- Dodano nowe funkcje currentTimestamp, currentDate, currentTime i currentTimeUUID.
- Dodano wsparcie dla operacji arytmetycznych w zapytaniach CQL.
- Umożliwiono wykonywanie operacji arytmetycznych pomiędzy danymi z typów 'timestamp'/'date' i 'duration'.
- Dodano tryb do podglądu strumieni danych potrzebnych do przywracania (nodetool repair —preview) oraz możliwość weryfikacji integralności przywracanych danych (nodetool repair —validate).
- W zapytaniach SELECT dodano możliwość przetwarzania elementów Map i Set.
- Dodano wsparcie dla równoległego etapu początkowego budowania materializowanych widoków (cassandra.yaml:concurrent_materialized_view_builders).
- W poleceniu „nodetool cfstats” dodano wsparcie dla sortowania według określonych metryk oraz ograniczenia liczby wyświetlanych wierszy.
- Udostępniono ustawienia do ograniczenia dostępu użytkownika tylko do określonych centrów danych.
- Dodano możliwość ograniczenia intensywności (rate limit) operacji tworzenia i usuwania migawków.
- W cqlsh i cqlshlib dodano wsparcie dla Pythona 3 (wsparcie dla Pythona 2.7 pozostaje).
- Zaprzestano wsparcia dla platformy Windows. Aby uruchomić Cassandra w systemie Windows, zaleca się korzystanie z środowisk Linux opartych na subsystemie WSL2 (Windows Subsystem for Linux 2) lub systemach wirtualizacji.

Źródło: opennet.ru
