Cassandra Andmemudel lihtsa andmebaasi näitega
Kuigi Cassandra päringukeel sarnaneb -ga SQL keeles, on nende andmemodelleerimismeetodid täiesti erinevad.
In Cassandra, võib halb andmemudel jõudlust halvendada, eriti kui kasutajad proovivad RDBMS-i kontseptsioone sisse viia Cassandra. Parim on meeles pidada mõnda allpool kirjeldatud reeglit.
Cassandra Andmemudeli reeglid
In Cassandra, kirjutised pole kallid. Cassandra ei toeta liitumisi, rühmitamist, VÕI-klauslit, koondamisi jne. Seega peate oma andmed salvestama nii, et need oleksid täielikult taastatavad. Seega tuleb neid reegleid andmete modelleerimisel meeles pidada Cassandra.
Maksimeerige kirjutamiste arv
In Cassandra, kirjutised on väga odavad. Cassandra on optimeeritud suure kirjutamisjõudluse jaoks. Nii et proovige oma kirjutisi maksimeerida, et lugemisjõudlus ja andmete kättesaadavus oleks parem. Andmete kirjutamise ja lugemise vahel on kompromiss. Seega optimeerige andmete lugemise jõudlust, maksimeerides andmete kirjutamise arvu.
Maksimeerige andmete dubleerimine
Andmete denormaliseerimine ja andmete dubleerimine on defacto Cassandra. Kettaruum ei ole kallim kui mälu, protsessori töötlemine ja IO-de töö. Nagu Cassandra on hajutatud andmebaas, nii et andmete dubleerimine tagab andmete kohese kättesaadavuse ja pole ühtegi tõrkepunkti.
Cassandra Andmete modelleerimise eesmärgid
Andmete modelleerimisel peaksid teil olema järgmised eesmärgid Cassandra:
Jaotage andmed ühtlaselt ümber Cluster
Soovite võrdsel hulgal andmeid iga sõlme kohta Cassandra Cluster. Andmed levitatakse erinevatesse sõlmedesse partitsioonivõtmete alusel, mis on primaarvõtme esimene osa. Seega proovige valida primaarvõtmeks täisarvud andmete ühtlaseks levitamiseks klastri ümber.
Minimeerige andmete pärimise ajal loetavate partitsioonide arv
Partitsioon on sama partitsioonivõtmega kirjete rühm. Kui lugemispäring väljastatakse, kogub see andmeid erinevatest sektsioonidest erinevatest sõlmedest.
Kui partitsioone on palju, tuleb päringuandmete kogumiseks külastada kõiki neid sektsioone.
See ei tähenda, et partitsioone ei tohiks luua. Kui teie andmed on väga suured, ei saa te seda tohutut andmemahtu ühes partitsioonis hoida. Üks partitsioon aeglustub.
Nii et proovige valida tasakaalustatud partitsioonide arv.
Hea esmane võti Cassandra
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 tabelis MusicPlaylist,
- Songid on partitsioonivõti ja
- SongName on klastrite veerg
- Andmed rühmitatakse SongName'i alusel. SongId-iga luuakse ainult üks partitsioon. Tabelis MusicPlaylist ei ole ühtegi teist partitsiooni.
Selle andmemudeli tõttu on andmete toomine kehva primaarvõtme tõttu aeglane.
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 tabelis MusicPlaylist,
- Songid ja Aasta on partitsioonivõti ja
- SongName on klastrite veerg.
- Andmed rühmitatakse SongName'i alusel. Selles tabelis luuakse igal aastal uus partitsioon. Kõik aasta laulud jäävad samale sõlmele. See primaarvõti on andmete jaoks väga kasulik.
Selle andmemudeli abil on meie andmete hankimine kiire.
Modelleerige oma andmed Cassandra
Päringute modelleerimisel tuleks meeles pidada järgmisi asju.
Määrake, milliseid päringuid soovite toetada
Kõigepealt määrake kindlaks, milliseid päringuid soovite.
Näiteks kas vajate?
- Liita
- Grupi poolt
- Filtreerimine millise veeru järgi jne.
Koostage tabel vastavalt oma päringutele
Koostage tabel vastavalt oma päringutele. Looge tabel, mis rahuldab teie päringuid. Proovige luua tabel nii, et oleks vaja lugeda minimaalset arvu partitsioone.
Üks-ühele suhete käsitlemine Cassandra
Üks ühele seos tähendab, et kahel tabelil on üks ühele vastavus. Näiteks saab üliõpilane registreerida ainult ühe kursuse ja ma tahan õpilase pealt otsida, millisele kursusele konkreetne õpilane on registreerunud.
Sellisel juhul peaks teie tabeliskeem hõlmama kõiki konkreetsele kursusele vastava õpilase üksikasju, nagu kursuse nimi, õpilase number, õpilase nimi jne.
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
Üks paljudele suhete käsitlemine Cassandra
Üks kuni mitu seost tähendab, et kahe tabeli vahel on üks kuni mitu vastavust.
Näiteks kursust saavad õppida paljud õpilased. Soovin otsida kõiki õpilasi, kes õpivad konkreetsel kursusel.
Nii et kui küsin kursuse nime järgi, saan teada paljude õpilaste nimesid, kes õpivad konkreetset kursust.
Create table Student_Course ( Student_rollno int, Student_name text, Course_name text, );
Saan leida kõik konkreetse kursuse õpilased järgmise päringu abil.
Select * from Student_Course where Course_name='Course Name';
Paljude ja mitmete suhete käsitlemine Cassandra
Paljud-palju seosed tähendavad, et kahe tabeli vahel on palju või palju vastavust.
Näiteks võib ühte kursust õppida palju tudengeid ja ka tudeng võib õppida paljusid kursusi.
Soovin otsida kõiki õpilasi, kes õpivad konkreetsel kursusel. Samuti tahan otsida kõiki kursusi, mida konkreetne üliõpilane õpib.
Nii et sel juhul on mul kaks tabelit, st jagage probleem kaheks juhtumiks.
Kõigepealt koostan tabeli, mille järgi leiad konkreetse õpilase kursused.
Create table Student_Course ( Student_rollno int primary key, Student_name text, Course_name text, );
Leian kõik konkreetse õpilase kursused järgmise päringu abil.
Select * from Student_Course where student_rollno=rollno;
Teiseks koostan tabeli, mille järgi saate teada, kui palju õpilasi konkreetsel kursusel õpib.
Create table Course_Student ( Course_name text primary key, Student_name text, student_rollno int );
Leian mõne konkreetse kursuse õpilase järgmise päringu abil.
Select * from Course_Student where Course_name=CourseName;
Erinevus RDBMS-i ja Cassandra Andmete modelleerimine
RDBMS | Cassandra |
---|---|
Salvestab andmed normaliseeritud kujul | Salvestab andmeid denormaliseeritud kujul |
Pärand dbms; struktureeritud andmed | Laia rea pood, dünaamiline; struktureeritud ja struktureerimata andmed |
kokkuvõte
- Andmete modelleerimine sisse Cassandra on teistsugune kui teised RDBMS-i andmebaasid.
- Cassandra andmete modelleerimisel on mõned reeglid. Hea andmete modelleerimise jaoks tuleb neid reegleid järgida. Lisaks nendele reeglitele nägime kolme erinevat andmemodelleerimise juhtumit ja nende käsitlemist.
- Üks ühele seos tähendab, et kahel tabelil on üks ühele vastavus.
- Üks kuni mitu seost tähendab, et kahe tabeli vahel on üks kuni mitu vastavust.
- Paljud-palju seosed tähendavad, et kahe tabeli vahel on palju või palju vastavust.