Cassandra Model podataka s primjerom jednostavne baze podataka
Iako Cassandra jezik upita sliči sa SQL jeziku, njihove metode modeliranja podataka potpuno su različite.
In Cassandra, loš podatkovni model može pogoršati performanse, posebno kada korisnici pokušavaju implementirati koncepte RDBMS-a Cassandra. Najbolje je imati na umu nekoliko pravila koja su navedena u nastavku.
Cassandra Pravila podatkovnog modela
In Cassandra, piše nisu skupi. Cassandra ne podržava pridruživanje, grupiranje po, klauzulu OR, združivanje, itd. Dakle, morate pohraniti svoje podatke na takav način da bi trebali biti potpuno dostupni. Stoga se ova pravila moraju imati na umu tijekom modeliranja podataka Cassandra.
Maksimizirajte broj pisanja
In Cassandra, piše vrlo su jeftini. Cassandra je optimiziran za visoke performanse pisanja. Stoga pokušajte maksimizirati pisanje za bolju izvedbu čitanja i dostupnost podataka. Postoji kompromis između pisanja i čitanja podataka. Dakle, optimizirajte performanse čitanja podataka maksimiziranjem broja pisanja podataka.
Povećajte umnožavanje podataka
Denormalizacija podataka i dupliciranje podataka su defacto of Cassandra. Prostor na disku nije skuplji od memorije, CPU obrade i rada IO-a. Kao Cassandra je distribuirana baza podataka, tako da dupliciranje podataka pruža trenutnu dostupnost podataka i nema jedinstvene točke kvara.
Cassandra Ciljevi modeliranja podataka
Tijekom modeliranja podataka trebali biste imati sljedeće ciljeve Cassandra:
Ravnomjerno rasporedite podatke oko Cluster
Želite jednaku količinu podataka na svakom čvoru Cassandra Cluster. Podaci se šire na različite čvorove na temelju particijskih ključeva koji su prvi dio primarnog ključa. Dakle, pokušajte odabrati cijele brojeve kao primarni ključ za ravnomjerno širenje podataka po klasteru.
Minimizirajte broj particija koje se čitaju tijekom upita za podatke
Particija je grupa zapisa s istim ključem particije. Kada se izda upit za čitanje, on prikuplja podatke iz različitih čvorova s različitih particija.
Ako će biti mnogo particija, tada sve te particije treba posjetiti radi prikupljanja podataka upita.
To ne znači da particije ne treba stvarati. Ako su vaši podaci jako veliki, ne možete držati tu ogromnu količinu podataka na jednoj particiji. Pojedinačna particija bit će usporena.
Stoga pokušajte odabrati uravnotežen broj particija.
Dobar primarni ključ Cassandra
Uzmimo primjer i otkrijmo koji je primarni ključ dobar.
Ovdje je tablica MusicPlaylist.
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key(SongId, SongName) );
U gornjem primjeru, tablica MusicPlaylist,
- Songid je particijski ključ i
- SongName je stupac klasteriranja
- Podaci će se grupirati na temelju naziva pjesme. Samo će se jedna particija stvoriti s SongId-om. Neće biti nijedne druge particije u tablici MusicPlaylist.
Dohvaćanje podataka bit će sporo s ovim podatkovnim modelom zbog lošeg primarnog ključa.
Evo još jedne tablice MusicPlaylist.
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key((SongId, Year), SongName) );
U gornjem primjeru, tablica MusicPlaylist,
- Songid i Godina su ključ particije, i
- SongName je stupac klasteriranja.
- Podaci će se grupirati na temelju naziva pjesme. U ovoj će se tablici svake godine izraditi nova particija. Sve će pjesme godine biti na istom čvoru. Ovaj primarni ključ će biti vrlo koristan za podatke.
Naše će dohvaćanje podataka biti brzo pomoću ovog podatkovnog modela.
Modelirajte svoje podatke Cassandra
Sljedeće stvari treba imati na umu tijekom modeliranja vaših upita:
Odredite koje upite želite podržati
Prije svega odredite koje upite želite.
Na primjer, trebate li?
- Pridružuje
- Grupa po
- Filtriranje po kojem stupcu itd.
Napravite tablicu prema svojim upitima
Napravite tablicu prema svojim upitima. Napravite tablicu koja će zadovoljiti vaše upite. Pokušajte kreirati tablicu na takav način da je potrebno pročitati minimalan broj particija.
Rukovanje odnosom jedan na jedan Cassandra
Odnos jedan prema jedan znači da dvije tablice imaju korespondenciju jedan prema jedan. Na primjer, student može prijaviti samo jedan kolegij, a ja želim na studentu pretražiti na kojem kolegiju je određeni student upisan.
Dakle, u ovom slučaju, vaša shema tablice trebala bi uključivati sve pojedinosti o studentu koji odgovaraju tom određenom kolegiju kao što je naziv kolegija, broj studenta, ime studenta itd.
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
Rukovanje odnosom jedan prema više Cassandra
Odnosi jedan prema više znače korespondenciju jedan prema više između dvije tablice.
Na primjer, tečaj može proučavati mnogo studenata. Želim pretražiti sve studente koji studiraju određeni predmet.
Dakle, upitom o nazivu kolegija, imat ću mnogo imena studenata koji će učiti određeni kolegij.
Create table Student_Course ( Student_rollno int, Student_name text, Course_name text, );
Mogu dohvatiti sve studente za određeni kolegij pomoću sljedećeg upita.
Select * from Student_Course where Course_name='Course Name';
Rukovanje odnosom više prema mnogima Cassandra
Odnosi mnogo prema mnogima znače korespondenciju između dvije tablice mnogo prema mnogima.
Na primjer, kolegij može studirati mnogo studenata, a student također može studirati mnogo kolegija.
Želim pretražiti sve studente koji studiraju određeni predmet. Također, želim pretražiti sve kolegije koje određeni student studira.
Dakle, u ovom slučaju ću imati dvije tablice, tj. podijeliti problem na dva slučaja.
Prvo ću napraviti tablicu po kojoj možete pronaći tečajeve po određenom studentu.
Create table Student_Course ( Student_rollno int primary key, Student_name text, Course_name text, );
Sljedećim upitom mogu pronaći sve tečajeve određenog studenta.
Select * from Student_Course where student_rollno=rollno;
Drugo, napravit ću tablicu po kojoj možete saznati koliko studenata studira određeni kolegij.
Create table Course_Student ( Course_name text primary key, Student_name text, student_rollno int );
Mogu pronaći studenta na određenom kolegiju pomoću sljedećeg upita.
Select * from Course_Student where Course_name=CourseName;
Razlika između RDBMS i Cassandra Modeliranje podataka
RDBMS | Cassandra |
---|---|
Pohranjuje podatke u normaliziranom obliku | Pohranjuje podatke u denormaliziranom obliku |
Naslijeđeni dbms; strukturirani podaci | Spremnik širokih redova, dinamičan; strukturirani i nestrukturirani podaci |
rezime
- Modeliranje podataka u Cassandra je drugačiji od drugih RDBMS baze podataka.
- Cassandra modeliranje podataka ima neka pravila. Ova se pravila moraju poštivati za dobro modeliranje podataka. Osim ovih pravila, vidjeli smo tri različita slučaja modeliranja podataka i kako se s njima nositi.
- Odnos jedan prema jedan znači da dvije tablice imaju korespondenciju jedan prema jedan.
- Odnosi jedan prema više znače korespondenciju jedan prema više između dvije tablice.
- Odnosi mnogo prema mnogima znače korespondenciju između dvije tablice mnogo prema mnogima.