Un prim pentru înțelegerea fragmentării bazei de date

Publicat: 2022-11-05

Crearea unui site web este primul pas atunci când vă configurați prezența pe Internet. Pentru a prospera pe termen lung, trebuie, de asemenea, să vă asigurați că site-ul dvs. se poate extinde pentru a se adapta la creștere. Și unul dintre primii pași este să implementați o bază de date care se poate scala cu dvs. În caz contrar, riscați să experimentați performanță lentă a interogărilor și întreruperi ale bazei de date.

Această postare va discuta despre cum puteți utiliza fragmentarea bazei de date pentru a obține scalabilitate și disponibilitate ridicate pentru datele dvs. Vom atinge, de asemenea, dezavantajele sharding-ului și diferitele arhitecturi sharding pe care le puteți utiliza.

Ce este partajarea bazei de date?

Sharding-ul este o tehnică de optimizare care distribuie tabele pe alte servere de baze de date. Este ca și partiționarea în sensul că ambele implică împărțirea datelor în subseturi mai mici. Diferența este că shardingul distribuie aceste subseturi la diferite servere în timp ce partiționarea le stochează într-o singură bază de date. Aceste servere folosesc același motor de bază de date și același tip de hardware pentru a obține un nivel de performanță similar pentru toate fragmentele.

Sharding își propune să realizeze o arhitectură care să nu partajeze, eliminând blocajele de procesare și punctele de eșec unice.

O ilustrație pentru a explica fragmentarea bazei de date.
Un exemplu de sharding. (Sursa imagine: Analytics Vidhya)

Puteți implementa fragmentarea în două moduri - pe orizontală și pe verticală. Fracționarea orizontală împarte tabelul în funcție de rânduri, în timp ce fragmentarea verticală împarte tabelele în funcție de coloane.

În acest sens, sharding-ul este ca și partiționarea, care împarte mesele mari în altele mai mici.

Partajarea orizontală este eficientă pentru bazele de date în care majoritatea interogărilor returnează un subset de rânduri, cum ar fi o bază de date pentru clienți care returnează date (cum ar fi numele, adresa, e-mailul și așa mai departe) simultan.

Partajarea verticală este eficientă pentru bazele de date ale căror interogări returnează coloane individuale. De exemplu, dacă baza de date cu clienți a returnat numele sau e-mailul clientului separat, puteți separa numele și e-mailul în grupuri diferite.

Beneficiile partajării bazei de date

Mai jos sunt câteva dintre avantajele sharding-ului bazei de date.

Scalare orizontală îmbunătățită

Puteți scala baza de date vertical sau orizontal. Scalare verticală se referă la adăugarea mai multor unități centrale de procesare (CPU) și memorie cu acces aleatoriu (RAM) la server pentru a îmbunătăți performanța. Scalare verticală este o soluție utilă pentru bazele de date mici și mijlocii. Cu toate acestea, pe măsură ce datele dvs. cresc, scalarea verticală devine imposibilă. Există doar atât de multă putere pe care o poți adăuga la un singur server.

Scalare orizontală este mai flexibilă. Vă permite să vă scalați baza de date după cum este necesar, adăugând mai multe servere la sistemul dumneavoastră. Fiecare dintre aceste servere oferă resurse diferitelor fragmente de baze de date. Acest lucru distribuie volumul de lucru și îmbunătățește capacitatea sistemului de a gestiona mai multe solicitări.

Timpi de răspuns la interogări mai rapid

Cioburile au doar câteva rânduri și coloane. Din acest motiv, este nevoie de mai puțin timp pentru a procesa interogările bazei de date. În schimb, o interogare a unei baze de date fără fragmente poate necesita o căutare prin sute – sau chiar mii – de rânduri.

Fiabilitate sporită în situații de întrerupere

Întreruperea bazei de date se întâmplă din diverse motive, inclusiv ștergerea accidentală a datelor, erori de conexiune și atacuri de securitate cibernetică. Sharding minimizează efectele întreruperilor. Deoarece fiecare cioburi este autonomă, numai ciobul afectat se confruntă cu timp de nefuncționare. De exemplu, dacă aveți patru cioburi și aveți o întrerupere într-una dintre ele, doar 25 la sută din operațiuni vor fi afectate.

Dezavantajele Sharding

Deși sharding-ul îmbunătățește fiabilitatea și disponibilitatea bazei de date, implementarea acesteia este complexă. Folosirea unei arhitecturi de sharding greșită poate încetini performanța și poate duce la pierderea datelor.

Asigurați-vă că alegeți o tehnică de fragmentare care permite o distribuție echilibrată a datelor în toate fragmentele. Fără acest echilibru, riști să creezi hotspot-uri de baze de date, care se întâmplă atunci când un fragment stochează majoritatea datelor, în timp ce celelalte fragmente rămân practic goale. Acest lucru reduce debitul de scriere la un singur fragment.

Pentru a rezolva acest lucru, puteți particționa și mai mult fragmentul dezechilibrat, dar acest proces este dificil și vă poate distruge baza de date în timp ce migrați datele.

Un alt dezavantaj al sharding-ului este că îmbinările SQL care implică mai multe tabele în fragmente diferite pot deveni prea lente și pot degrada performanța. Cu toate acestea, cu arhitectura potrivită, puteți evita această problemă.

Sharding Architectures

Puteți implementa sharding folosind trei arhitecturi:

  • fragmentare bazată pe chei
  • fragmentare bazată pe intervale
  • sharding bazat pe director

Arhitectura pe care o alegeți depinde de cazul dvs. de utilizare.

Partajarea bazată pe chei

Într-o arhitectură de sharding bazată pe cheie sau hashed, o aplicație de bază de date utilizează o cheie shard pentru a localiza o shard. O funcție de hashing calculează valoarea cheii de fragmentare, iar rezultatul mapează datele la un anumit fragment. O funcție simplă de hashing poate fi modulul cheii și numărul de fragmente.

Funcția hash poate lua mai mult de o cheie de fragmentare. Din acest motiv, fragmentarea bazată pe chei este potrivită pentru înregistrările de date care pot avea chei partajate. Distribuirea algoritmică a datelor minimizează posibilitatea de a crea hotspot-uri de baze de date în care un fragment conține mai multe date decât celălalt.

Cu toate acestea, deoarece distribuția se bazează doar pe funcția de hashing, este imposibil să grupați logic datele împreună. Prin urmare, operațiunile de baze de date care necesită date din mai multe fragmente pot fi ineficiente, deoarece necesită citirea datelor din fiecare fragment.

Sharding bazat pe interval

sharding-ul bazat pe interval implică sharding-ul unei baze de date în funcție de un interval specificat de valori.

Utilizează o cheie de sharding pentru a determina căreia shard-i să-i atribuie o valoare. Aplicația de bază de date verifică shard-ul care corespunde cheii sharding într-un tabel de căutare și stochează datele. Din acest motiv, fragmentarea bazată pe intervale este ușor de proiectat și implementat.

De exemplu, puteți utiliza valoarea ID-ului utilizatorului dintr-o bază de date de utilizatori ca cheie de fragmentare. Ai putea stoca utilizatorii cu ID-uri de la 0 la 2.000 pe un fragment, cei între 2.000 și 4.000 pe un alt fragment și așa mai departe.

Sharding-ul bazat pe interval poate cauza hotspot-uri în bazele de date. Luați în considerare o bază de date de utilizatori în care majoritatea ID-urilor dvs. de utilizator se află între 2.001 și 4.000. Procesul le atribuie unui singur fragment, creând un dezechilibru în timp. Prin urmare, fragmentarea bazată pe intervale funcționează cel mai bine pentru date distribuite uniform.

Partajarea bazată pe director

Sharding-ul bazat pe director grupează datele legate logic în același shard. Utilizează un tabel de căutare care conține o listă de mapări pentru fiecare entitate din baza de date. Fiecare mapare corespunde unui fragment de bază de date.

sharding-ul bazat pe director este mai flexibil decât sharding-ul bazat pe interval sau pe cheie, deoarece puteți adăuga date în shard-uri în mod dinamic. Nu există nicio funcție de sharding de urmat sau valori de interval în care să rămână. Această flexibilitate crește eficiența bazei de date: puteți stoca datele asociate într-un singur fragment, ceea ce înseamnă că executarea interogărilor comune durează mai puțin timp.

De exemplu, dacă ați folosit sharding bazat pe director și ați grupat utilizatorii în funcție de locația lor, preluând utilizatori dintr-un anumit loc, interogați doar o singură shard.

Partajarea bazei de date cu Kinsta

Cele mai multe motoare de baze de date moderne oferă suport pentru fragmentarea bazei de date. Unul dintre aceste motoare de baze de date este MariaDB, un furk al MySQL acceptat comercial. Este un sistem de baze de date open-source de înaltă performanță, adoptat de companii precum IBM, GitHub și Wikimedia. De asemenea, face parte din stiva de servere de înaltă performanță de la Kinsta.

MariaDB oferă funcții de sharding încorporate prin motorul de stocare spider. Motorul de stocare spider este un motor de formare a clusterelor care acceptă tranzacții de partiționare și arhitectură extinsă (XA). Vă permite să tratați tabelele la distanță din instanțe diferite ca și cum ar fi în aceeași instanță. Odată ce creați un tabel în motorul de stocare spider, tabelul se leagă de un alt tabel din serverul MariaDB la distanță. Odată stabilită conexiunea, motorul de stocare partajează legătura cu toate tabelele care fac parte din aceeași tranzacție.

rezumat

Partajarea bazei de date este o tehnică de scalare care partiţionează tabelele în subseturi mai mici şi le distribuie pe diferite servere numite fragmente. Puteți implementa sharding prin diferite mijloace, cum ar fi sharding bazat pe cheie, sharding bazat pe interval și sharding bazat pe director.

În timp ce sharding-ul îmbunătățește scalabilitatea, fiabilitatea și disponibilitatea unei baze de date, este foarte complex de implementat. În plus, odată ce ați creat un shard, nu este ușor să reveniți baza de date la starea nesharded. Din acest motiv, utilizați sharding pentru optimizare numai atunci când sunteți sigur că alte opțiuni de scalabilitate nu vor funcționa.

Indiferent dacă afacerea dvs. este o întreprindere nonprofit sau la nivel de întreprindere, soluțiile experte Kinsta vă pot îndepărta grijile legate de găzduirea site-ului, permițându-vă să vă concentrați pe ceea ce contează cel mai mult.