Cassandra Model de date cu exemplu de bază de date simplă
Cu toate ca Cassandra limbajul de interogare seamănă cu SQL limbaj, metodele lor de modelare a datelor sunt total diferite.
In Cassandra, un model de date prost poate degrada performanța, mai ales atunci când utilizatorii încearcă să implementeze conceptele RDBMS pe Cassandra. Cel mai bine este să țineți cont de câteva reguli detaliate mai jos.
Cassandra Regulile modelului de date
In Cassandra, scrierile nu sunt scumpe. Cassandra nu acceptă alăturari, grupare prin, clauză OR, agregări etc. Așa că trebuie să vă stocați datele în așa fel încât să fie complet recuperabile. Prin urmare, aceste reguli trebuie reținute în timpul modelării datelor Cassandra.
Maximizați numărul de scrieri
In Cassandra, scrierile sunt foarte ieftine. Cassandra este optimizat pentru performanțe ridicate de scriere. Așadar, încercați să vă maximizați scrierile pentru o performanță de citire mai bună și disponibilitatea datelor. Există un compromis între scrierea și citirea datelor. Deci, optimizați performanța citirii datelor prin maximizarea numărului de scrieri de date.
Maximizați duplicarea datelor
Denormalizarea datelor și duplicarea datelor sunt de fapt Cassandra. Spațiul pe disc nu este mai scump decât memoria, procesarea CPU și operarea IO-urilor. La fel de Cassandra este o bază de date distribuită, astfel încât duplicarea datelor oferă disponibilitate instantanee a datelor și nu există un singur punct de eșec.
Cassandra Obiectivele modelării datelor
Ar trebui să aveți următoarele obiective în timp ce modelați datele Cassandra:
Răspândiți datele uniform în jurul Cluster
Doriți o cantitate egală de date pe fiecare nod al Cassandra Cluster. Datele sunt răspândite în diferite noduri pe baza cheilor de partiție care reprezintă prima parte a cheii primare. Deci, încercați să alegeți numerele întregi ca cheie primară pentru distribuirea uniformă a datelor în jurul clusterului.
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 interogarea de citire este emisă, aceasta colectează date de la diferite noduri din diferite partiții.
Dacă vor exista multe partiții, atunci toate aceste partiții trebuie să fie vizitate pentru a colecta datele de interogare.
Nu înseamnă că partițiile nu ar trebui 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.
Cheie primară bună Cassandra
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 de partiție și
- SongName este coloana de grupare
- Datele vor fi grupate pe baza SongName. Va fi creată o singură partiție cu SongId. Nu va exista nicio altă partiție în tabelul MusicPlaylist.
Preluarea datelor va fi lentă de către acest model de date din cauza cheii primare proaste.
Iată un alt MusicPlaylist de masă.
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 de partiție ș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.
Modelați datele dvs. în Cassandra
Următoarele lucruri trebuie reținute atunci când modelați interogările dvs.:
Stabiliți ce interogări doriți să susțineți
În primul rând, stabiliți ce interogări doriți.
De exemplu, ai nevoie?
- Se alătură
- A se grupa cu
- Filtrarea pe ce coloană etc.
Creați un tabel în funcție de întrebările dvs
Creați un tabel conform interogărilor dvs. Creați un tabel care vă va satisface î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 unei relații unu-la-unu în Cassandra
Relația unu la unu înseamnă că două tabele au corespondență unu la unu. De exemplu, studentul poate să înregistreze un singur curs și vreau să caut 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 care corespund cursului respectiv, cum ar fi numele cursului, numărul de rol al studentului, numele studentului etc.
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
Gestionarea unei relații de la unul la mai mulți în Cassandra
Relații unu la mai multe înseamnă a avea o corespondență între două 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, întrebâ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 de la mulți la mulți în Cassandra
Relații multe până la multe înseamnă a avea multe până la multe corespondență între două 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ți problema în două cazuri.
În primul rând, voi crea un tabel prin care puteți găsi cursuri ale unui 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 afla 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 la un anumit curs prin următoarea interogare.
Select * from Course_Student where Course_name=CourseName;
Diferența dintre RDBMS și Cassandra Modelarea datelor
RDBMS | Cassandra |
---|---|
Stochează datele în formă normalizată | Stochează datele într-o formă denormalizată |
Dbms vechi; date structurate | Magazin cu rânduri late,Dynamic; date structurate și nestructurate |
Rezumat
- Modelarea datelor în Cassandra este diferit de altul baze de date RDBMS.
- Cassandra modelarea datelor are unele 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 gestionăm.
- Relația unu la unu înseamnă că două tabele au corespondență unu la unu.
- Relații unu la mai multe înseamnă a avea o corespondență între două tabele.
- Relații multe până la multe înseamnă a avea multe până la multe corespondență între două tabele.