Pe această pagină
Introducere
Apache Cassandra este o bază de date NoSQL foarte scalabilă și distribuită, proiectată să gestioneze volume mari de date pe mai multe servere obișnuite. Una dintre caracteristicile cheie ale Cassandra este capacitatea de a gestiona automat distribuția datelor, replicarea și consistența într-un cluster de noduri, oferind disponibilitate ridicată și toleranță la defecte.
Un aspect important al gestionării datelor în Cassandra este compactarea. Compactarea este procesul de îmbinare și eliminare a datelor inutile din SSTable-uri, care sunt structurile de stocare pe disc folosite de Cassandra. De-a lungul timpului, pe măsură ce datele sunt scrise și șterse, SSTable-urile pot deveni fragmentate și ineficiente, ceea ce poate afecta performanța și poate consuma spațiu valoros pe disc. Compactarea ajută la optimizarea stocării și accesului la date în Cassandra, prin îmbinarea mai multor SSTable-uri într-un singur SSTable, mai eficient.
SSTable
În Apache Cassandra, un SSTable (Sorted String Table) este structura de bază de stocare pe disc care conține datele unei singure partiții. Un SSTable este un fișier imutabil care conține un set sortat de perechi cheie-valoare, unde cheile sunt chei de partiție, iar valorile sunt valorile coloanelor. Cassandra stochează SSTable-urile pe disc și le folosește pentru operațiuni eficiente de citire și scriere.
SSTable-urile sunt proiectate să fie compacte și eficiente. Sunt sortate după cheie, ceea ce le face ușor de căutat și din care datele pot fi extrase rapid. Când datele sunt scrise în Cassandra, ele sunt scrise mai întâi într-un commit log, un jurnal doar pentru adăugare care înregistrează toate operațiunile de scriere. Odată ce scrierea este confirmată, datele sunt scrise într-o structură de date din memorie numită Memtable. Pe măsură ce Memtable-ul crește, Cassandra îl scrie pe disc sub forma unui SSTable. Acest proces se numește minor compaction, în care mai multe SSTable-uri mici sunt îmbinate într-unul mai mare. Cassandra rulează, de asemenea, periodic o major compaction, în care toate SSTable-urile sunt îmbinate într-un singur SSTable compactat.
Să luăm în considerare un tabel simplu care conține două coloane - “name” și “age”. Iată un exemplu despre cum ar fi stocate datele într-un SSTable:
Partition Key: "John"------------------------------| Column Name | Column Value |------------------------------| name | John || age | 35 |------------------------------Partition Key: "Jane"------------------------------| Column Name | Column Value |------------------------------| name | Jane || age | 28 |------------------------------În acest exemplu, SSTable-ul conține două rânduri, unul pentru John și unul pentru Jane. Fiecare rând conține o cheie de partiție și un set de valori ale coloanelor. Numele și valorile coloanelor sunt stocate ca perechi cheie-valoare și sunt sortate după numele coloanei.
SSTable-urile din Cassandra conțin și metadate suplimentare pentru a ajuta la citiri și scrieri eficiente. De exemplu, fiecare SSTable conține un bloom filter, care permite Cassandra să stabilească rapid dacă o cheie este prezentă sau nu în SSTable. În plus, fiecare SSTable conține un index, care permite Cassandra să localizeze rapid o anumită cheie sau un interval de chei.
SSTable-urile din Cassandra sunt optimizate pentru citiri eficiente. Când interoghezi Cassandra, aceasta verifică mai întâi Memtable-ul pentru datele cerute. Dacă datele nu sunt găsite în Memtable, Cassandra caută în SSTable-urile de pe disc. Deoarece SSTable-urile sunt sortate după cheie, Cassandra poate localiza rapid datele printr-o căutare binară. Odată ce datele sunt găsite, Cassandra citește întregul rând de pe disc și returnează datele cerute.
SSTable-urile au, de asemenea, suport integrat pentru interogări eficiente pe intervale. Deoarece SSTable-urile sunt sortate după cheie, Cassandra poate extrage cu ușurință un interval de chei printr-o căutare binară după prima și ultima cheie din interval. Odată ce intervalul este localizat, Cassandra citește rândurile corespunzătoare de pe disc și returnează datele cerute.
Unul dintre avantajele utilizării SSTable-urilor în Cassandra este că sunt foarte reziliente la defecte. Deoarece SSTable-urile sunt imutabile, odată scrise pe disc, nu mai pot fi modificate. Acest lucru le face foarte rezistente la coruperea datelor și la defectele discului. În cazul unei defecțiuni, Cassandra poate pur și simplu să renunțe la SSTable-ul corupt și să folosească o replică pentru a restaura datele.
Pe scurt, SSTable-urile sunt structura de bază de stocare pe disc folosită de Apache Cassandra pentru a stoca și extrage date. Sunt imutabile, compacte și foarte optimizate pentru operațiuni de citire și scriere. Prin utilizarea SSTable-urilor, Cassandra oferă o soluție de bază de date foarte scalabilă și tolerantă la defecte pentru aplicații de mari dimensiuni.
Strategii de compactare
Cassandra oferă mai multe strategii de compactare integrate, care îți permit să controlezi modul în care SSTable-urile sunt compactate și când sunt îmbinate. Să aruncăm o privire mai atentă asupra unora dintre cele mai comune strategii de compactare din Cassandra:
SizeTieredCompactionStrategy SizeTieredCompactionStrategy este strategia de compactare implicită în Cassandra 2.x și 3.x. Se bazează pe dimensiunea SSTable-urilor și grupează împreună SSTable-urile de dimensiuni similare pentru a fi compactate. Această strategie este simplă și eficientă pentru sarcini de lucru cu multe scrieri, dar poate să nu fie optimă pentru sarcini de lucru cu multe citiri, deoarece datele accesate frecvent pot fi împrăștiate pe mai multe SSTable-uri, ceea ce duce la mai multe operațiuni I/O pe disc și la performanțe de citire mai slabe.
LeveledCompactionStrategy LeveledCompactionStrategy este o strategie de compactare mai avansată, care împarte SSTable-urile în niveluri, unde fiecare nivel conține SSTable-uri de dimensiuni similare. SSTable-urile sunt mai întâi compactate în cadrul nivelului lor și apoi promovate la nivelul următor. Acest proces continuă până la cel mai înalt nivel, care conține un singur SSTable. Această strategie este optimă pentru sarcini de lucru cu multe citiri, deoarece datele accesate frecvent sunt mai probabil stocate în nivelurile superioare, ceea ce duce la performanțe de citire mai bune. Totuși, poate fi mai puțin eficientă pentru sarcini de lucru cu multe scrieri, deoarece necesită mai multe operațiuni I/O pe disc pentru compactare.
DateTieredCompactionStrategy DateTieredCompactionStrategy este o strategie de compactare optimizată pentru date de tip serie temporală. SSTable-urile sunt grupate după vârstă, iar SSTable-urile mai vechi sunt compactate mai des decât cele mai noi. Această strategie este utilă pentru sarcini de lucru în care cele mai recente date sunt mai importante decât cele mai vechi. Opțiunile base_time_seconds și max_sstable_age_days controlează cât de des sunt compactate SSTable-urile și cât timp sunt păstrate.
TimeWindowCompactionStrategy TimeWindowCompactionStrategy este similară cu DateTieredCompactionStrategy, dar îți permite să specifici o fereastră de timp pentru păstrarea datelor. SSTable-urile sunt compactate în funcție de fereastra de timp, iar SSTable-urile mai vechi sunt șterse atunci când nu mai sunt necesare. Această strategie este utilă pentru sarcini de lucru în care vrei să expiri automat datele vechi.
Concluzie
Când alegi o strategie de compactare în Cassandra, este important să iei în considerare sarcina ta de lucru specifică și modelele de acces la date. Fiecare strategie are propriile puncte forte și slabe, iar strategia optimă depinde de factori precum raportul citire/scriere, distribuția datelor și cerințele de retenție.
Pe lângă strategiile de compactare integrate, Cassandra oferă și opțiuni pentru configurarea pragurilor de compactare, a compactării tombstone-urilor și multe altele. Aceste opțiuni îți permit să ajustezi fin procesul de compactare, pentru a se potrivi mai bine nevoilor tale.
Compactarea este un aspect critic al gestionării datelor în Apache Cassandra, iar înțelegerea modului de a configura și optimiza corect compactarea poate avea un impact semnificativ asupra performanței bazei tale de date și a eficienței stocării. Alegând strategia de compactare potrivită și ajustând opțiunile de compactare