Model de date Cassandra cu exemplu simplu

Cuprins:

Anonim

Deși limbajul de interogare Cassandra seamănă cu limbajul SQL, metodele lor de modelare a datelor sunt total diferite.

În Cassandra, un model de date defectuos poate degrada performanța, mai ales atunci când utilizatorii încearcă să implementeze conceptele RDBMS pe Cassandra. Cel mai bine este să rețineți câteva reguli detaliate mai jos.

În acest tutorial, veți învăța-

  • Regulile modelului de date Cassandra
  • Modelează-ți datele în Cassandra
  • Gestionarea relației unu la unu
  • Gestionarea unei relații cu mai multe relații
  • Gestionarea relației dintre mulți și mulți

Regulile modelului de date Cassandra

În Cassandra, scrisurile nu sunt scumpe. Cassandra nu acceptă asocierile, gruparea după, clauza SAU, agregările etc. Așadar, trebuie să stocați datele în așa fel încât să fie complet recuperabile. Deci, aceste reguli trebuie să fie luate în considerare la modelarea datelor în Cassandra.

  1. Maximizați numărul de scrieri

    În Cassandra, scrisurile sunt foarte ieftine. Cassandra este optimizată pentru performanțe ridicate la scriere. Deci, încercați să vă maximizați scrierile pentru o mai bună performanță de citire și disponibilitate a datelor. Există un compromis între scrierea datelor și citirea datelor. Deci, optimizați-vă performanța citirii datelor, maximizând numărul de scrieri de date.

  2. Maximizați duplicarea datelor

    Denormalizarea datelor și duplicarea datelor sunt defacto ale Cassandrei. Spațiul pe disc nu este mai scump decât memoria, procesarea procesorului și funcționarea IO-urilor. Deoarece Cassandra este o bază de date distribuită, astfel duplicarea datelor oferă disponibilitate instantanee a datelor și nu există un singur punct de eșec.

Obiective de modelare a datelor

Ar trebui să aveți următoarele obiective în timp ce modelați date în Cassandra.

  1. Răspândiți datele uniform în jurul clusterului

    Doriți o cantitate egală de date pe fiecare nod al clusterului Cassandra. Datele sunt răspândite în diferite noduri pe baza cheilor de partiție, care este prima parte a cheii primare. Deci, încercați să alegeți numere întregi ca cheie primară pentru răspândirea uniformă a datelor în jurul clusterului.

  2. Minimizați numărul de partiții citite în timpul interogării datelor

    Partiția este un grup de înregistrări cu aceeași cheie de partiție. Când este emisă interogarea citită, aceasta colectează date de la diferite noduri de la partiții diferite.

    Dacă vor fi multe partiții, toate aceste partiții trebuie vizitate pentru colectarea datelor de interogare.

    Nu înseamnă că partițiile nu trebuie create. Dacă datele dvs. sunt foarte mari, nu puteți păstra acea cantitate imensă de date pe o singură partiție. Partiția unică va fi încetinită.

    Deci, încercați să alegeți un număr echilibrat de partiții.

Bună cheie primară

Să luăm un exemplu și să găsim care cheie primară este bună.

Iată tabelul MusicPlaylist.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));

În exemplul de mai sus, tabelul MusicPlaylist,

  • Songid este cheia partiției și
  • SongName este coloana de grupare
  • Datele vor fi grupate pe baza SongName. O singură partiție va fi creată cu SongId. Nu va exista nicio altă partiție în tabelul MusicPlaylist.

Recuperarea datelor va fi lentă prin acest model de date din cauza cheii primare defectuoase.

Iată un alt tabel MusicPlaylist.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));

În exemplul de mai sus, tabelul MusicPlaylist,

  • Songid și Year sunt cheia partiției și
  • SongName este coloana de grupare.
  • Datele vor fi grupate pe baza SongName. În acest tabel, în fiecare an, va fi creată o nouă partiție. Toate melodiile anului vor fi pe același nod. Această cheie primară va fi foarte utilă pentru date.

Recuperarea datelor noastre va fi rapidă prin acest model de date.

Modelează-ți datele în Cassandra

Urmărirea lucrurilor trebuie reținută în timp ce vă modelați interogările.

  1. Stabiliți ce interogări doriți să acceptați
  2. În primul rând, determinați ce interogări doriți.

    De exemplu, ai nevoie?

    • Se alătură
    • A se grupa cu
    • Filtrarea pe ce coloană etc.
  3. Creați un tabel în funcție de interogări

    Creați un tabel în funcție de interogări. Creați un tabel care să vă satisfacă întrebările. Încercați să creați un tabel în așa fel încât să fie citit un număr minim de partiții.

Gestionarea relației unu la unu

Relația unu la unu înseamnă că două tabele au corespondență unu la unu. De exemplu, studentul poate înregistra un singur curs și vreau să caut pe un student în care curs este înscris un anumit student.

Deci, în acest caz, schema dvs. de tabel ar trebui să cuprindă toate detaliile studentului în corespondența la cursul respectiv, cum ar fi numele cursului, numărul rulant al studentului, numele studentului etc.

Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);

Gestionarea unei relații cu mai multe relații

O relație între mai multe înseamnă a avea o corespondență între mai multe tabele.

De exemplu, un curs poate fi studiat de mulți studenți. Vreau să caut toți studenții care studiază un anumit curs.

Deci, interogând numele cursului, voi avea multe nume de studenți care vor studia un anumit curs.

Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);

Pot prelua toți studenții pentru un anumit curs prin următoarea interogare.

Select * from Student_Course where Course_name='Course Name';

Gestionarea relației dintre mulți și mulți

Relații între multe și multe înseamnă a avea corespondență între multe tabele.

De exemplu, un curs poate fi studiat de mulți studenți, iar un student poate studia și multe cursuri.

Vreau să caut toți studenții care studiază un anumit curs. De asemenea, vreau să caut tot cursul pe care îl studiază un anumit student.

Deci, în acest caz, voi avea două tabele, adică împărțesc problema în două cazuri.

În primul rând, voi crea un tabel prin care puteți găsi cursuri de un anumit student.

Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);

Pot găsi toate cursurile unui anumit student prin următoarea interogare. ->

Select * from Student_Course where student_rollno=rollno;

În al doilea rând, voi crea un tabel prin care puteți găsi câți studenți studiază un anumit curs.

Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);

Pot găsi un student într-un anumit curs prin următoarea interogare.

Select * from Course_Student where Course_name=CourseName;

Diferența dintre RDBMS și modelarea datelor Cassandra

RDBMS

Cassandra

Stochează datele în formă normalizată

Stochează date sub formă denormalizată

Dbms vechi; date structurate

Magazin cu rând larg, dinamic; date structurate și nestructurate

rezumat

Modelarea datelor în Cassandra este diferită de alte baze de date RDBMS. Modelarea datelor Cassandra are câteva reguli. Aceste reguli trebuie respectate pentru o bună modelare a datelor. Pe lângă aceste reguli, am văzut trei cazuri diferite de modelare a datelor și cum să le rezolvăm.