Kuigi Cassandra päringukeel sarnaneb SQL-keelega, on nende andmete modelleerimise meetodid täiesti erinevad.
Cassandras võib halb andmemudel halvendada jõudlust, eriti kui kasutajad üritavad RDBMS-ideid Cassandrale rakendada. Parim on meeles pidada mõnda allpool täpsustatud reeglit.
Selles õpetuses saate teada
- Cassandra andmemudeli reeglid
- Modelleerige oma andmed Cassandras
- Üks-ühele suhtlemine
- Üks-paljud suhted
- Paljude ja paljude suhete käsitlemine
Cassandra andmemudeli reeglid
Cassandras pole kirjutised kallid. Cassandra ei toeta liitumisi, grupeerimisvõtteid, VÕI klausleid, liitmisi jne. Nii et peate oma andmed salvestama nii, et need peaksid olema täielikult leitavad. Nii et neid reegleid tuleb Cassandras andmeid modelleerides meeles pidada.
- Maksimeeri kirjutamiste arv
Cassandras on kirjutised väga odavad. Cassandra on optimeeritud suure kirjutamisvõime saavutamiseks. Nii et proovige oma kirjutamisi maksimeerida, et lugemisvõime ja andmete kättesaadavus paraneks. Andmete kirjutamise ja loetud andmete vahel on kompromiss. Seega optimeerige andmete lugemise jõudlust, maksimeerides andmete kirjutamise arvu.
- Maksimeeri andmete dubleerimine
Andmete denormaliseerimine ja andmete dubleerimine on Cassandra defacto. Kettaruum pole kallim kui mälu, protsessori töötlemine ja IO-d. Kuna Cassandra on hajutatud andmebaas, tagab andmete dubleerimine andmete kohese kättesaadavuse ja ühe rikkepunkti.
Andmete modelleerimise eesmärgid
Cassandras andmete modelleerimisel peaksid teil olema järgmised eesmärgid.
- Levitage andmeid klastri ümber ühtlaselt
Soovite Cassandra klastri igas sõlmes võrdset andmemahtu. Andmed levitatakse erinevatesse sõlmedesse, lähtudes partitsioonivõtmetest, mis on primaarvõtme esimene osa. Niisiis, proovige valida täisarvud peamiseks võtmeks andmete ühtlaseks levitamiseks klastri ümber.
- Minimeerige andmete päringu ajal loetud partitsioonide arv
Partitsioon on sama partitsioonivõtmega kirjete rühm. Kui loetud päring väljastatakse, kogub see andmeid erinevatest sõlmedest erinevatest jaotistest.
Kui partitsioone on palju, tuleb päringuandmete kogumiseks külastada kõiki neid partitsioone.
See ei tähenda, et vaheseinu ei tohiks luua. Kui teie andmed on väga suured, ei saa te seda tohutut andmemahtu ühes partitsioonis hoida. Üksik partitsioon aeglustub.
Nii et proovige valida tasakaalustatud arv vaheseinu.
Hea esmane võti
Võtame näite ja leiame, milline primaarvõti on hea.
Siin on tabel MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));
Ülaltoodud näites tabel MusicPlaylist,
- Songid on jaotusvõti ja
- SongName on klastrite veerg
- Andmed rühmitatakse SongName'i põhjal. SongId-iga luuakse ainult üks sektsioon. Tabelis MusicPlaylist pole ühtegi muud sektsiooni.
Andmete otsimine on selle andmemudeli poolt aeglane, kuna vale primaarvõti on võti.
Siin on veel üks tabel MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));
Ülaltoodud näites tabel MusicPlaylist,
- Songid ja Year on jaotusvõti ja
- SongName on klastrite veerg.
- Andmed rühmitatakse SongName'i põhjal. Selles tabelis luuakse igal aastal uus sektsioon. Kõik aasta laulud jäävad samasse sõlme. See esmane võti on andmete jaoks väga kasulik.
Selle andmemudeli abil saab meie andmed kiiresti kätte.
Modelleerige oma andmed Cassandras
Päringute modelleerimisel tuleks meeles pidada järgmisi asju.
- Tehke kindlaks, milliseid päringuid soovite toetada
- Liitub
- Grupeerige
- Filtreerimine millises veerus jne
- Looge tabel vastavalt oma päringutele
Looge tabel vastavalt oma päringutele. Looge tabel, mis rahuldaks teie päringuid. Proovige luua tabel selliselt, et oleks vaja lugeda minimaalset arvu partitsioone.
Kõigepealt tehke kindlaks, milliseid päringuid soovite.
Kas vajate näiteks?
Üks-ühele suhtlemine
Üks suhe tähendab, et kahel tabelil on üks ühele vastavus. Näiteks saab üliõpilane registreerida ainult ühe kursuse ja ma tahan õpilaselt otsida, millisel kursusel konkreetne õpilane on registreeritud.
Nii et sel juhul peaks teie tabeliskeem hõlmama kõiki õpilase üksikasju vastavalt sellele konkreetsele kursusele nagu kursuse nimi, õpilase nimekiri, õpilase nimi jne.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Üks-paljud suhted
Üks mitmest suhe tähendab, et kahe tabeli vahel on üks-paljud vastavus.
Näiteks saavad kursust õppida paljud üliõpilased. Soovin läbi otsida kõik üliõpilased, kes konkreetset kursust õpivad.
Nii et küsides kursuse nime järgi, on mul palju õpilasnimesid, kes konkreetset kursust õpivad.
Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);
Saan järgmise päringu abil leida kõik konkreetse kursuse õpilased.
Select * from Student_Course where Course_name='Course Name';
Paljude ja paljude suhete käsitlemine
Paljudest paljudeni suhted tähendavad paljude tabelite vahelise vastastikuse kirjavahetuse olemasolu.
Näiteks saavad kursust õppida paljud üliõpilased, samuti saab õpilane õppida palju kursusi.
Soovin läbi otsida kõik üliõpilased, kes konkreetset kursust õpivad. Samuti tahan otsida kogu kursuse, mida konkreetne õpilane õpib.
Nii et sel juhul on mul kaks tabelit, st jagan probleemi kaheks.
Kõigepealt koostan tabeli, mille järgi leiate konkreetse õpilase kursused.
Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);
Kõik konkreetse õpilase kursused leian järgmise päringu järgi. ->
Select * from Student_Course where student_rollno=rollno;
Teiseks koostan tabeli, mille abil saate leida, kui palju õpilasi konkreetset kursust õpib.
Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);
Ühe konkreetse kursuse üliõpilase leian järgmise päringu järgi.
Select * from Course_Student where Course_name=CourseName;
Erinevus RDBMS-i ja Cassandra andmete modelleerimise vahel
RDBMS |
Cassandra |
Salvestab andmeid normaliseeritud kujul |
Salvestab andmeid denormaliseeritud kujul |
Pärand dbms; struktureeritud andmed |
Lai rida, Dynamic; struktureeritud ja struktureerimata andmed |
Kokkuvõte
Andmete modelleerimine Cassandras erineb teistest RDBMS-i andmebaasidest. Cassandra andmete modelleerimisel on mõned reeglid. Andmete hea modelleerimise jaoks tuleb järgida neid reegleid. Nende reeglite kõrval nägime kolme erinevat andmemudeli juhtumit ja kuidas nendega toime tulla.