Kaut arī Cassandra vaicājumu valoda atgādina SQL valodu, to datu modelēšanas metodes ir pilnīgi atšķirīgas.
Kasandrā slikts datu modelis var pasliktināt veiktspēju, it īpaši, ja lietotāji mēģina ieviest RDBMS koncepcijas Kasandrā. Vislabāk ir paturēt prātā dažus noteikumus, kas sīki aprakstīti zemāk.
Šajā apmācībā jūs uzzināsiet
- Kasandras datu modeļa noteikumi
- Modelējiet savus datus Kasandrā
- Darbs ar vienu pret vienu
- Darbs ar vienu pret daudzām attiecībām
- Darbs ar daudzām un daudzām attiecībām
Kasandras datu modeļa noteikumi
Kasandrā raksti nav dārgi. Kasandra neatbalsta pievienošanos, grupēšanu pēc VAI klauzulas, apkopošanu utt. Tāpēc dati ir jāuzglabā tā, lai tie būtu pilnībā izgūstami. Tātad, modelējot datus Kasandrā, šie noteikumi ir jāpatur prātā.
- Palieliniet rakstu skaitu
Kasandrā raksti ir ļoti lēti. Kasandra ir optimizēta augstai rakstīšanas veiktspējai. Tāpēc mēģiniet maksimāli palielināt savu rakstīšanu, lai nodrošinātu labāku lasīšanas veiktspēju un datu pieejamību. Pastāv kompromiss starp datu rakstīšanu un datu nolasīšanu. Tātad, optimizējiet datu nolasīšanas veiktspēju, maksimāli palielinot datu rakstīšanas skaitu.
- Maksimizēt datu dublēšanos
Datu denormalizācija un datu dublēšanās ir Kasandras defacto. Vieta diskā nav dārgāka par atmiņu, procesora apstrādi un IO darbību. Tā kā Cassandra ir izplatīta datu bāze, datu dublēšanās nodrošina tūlītēju datu pieejamību un nav viena kļūmes punkta.
Datu modelēšanas mērķi
Modelējot datus Kasandrā, jums vajadzētu būt šādiem mērķiem.
- Vienmērīgi izklājiet datus ap kopu
Jūs vēlaties vienādu datu apjomu par katru Kasandras klastera mezglu. Dati tiek izplatīti dažādos mezglos, pamatojoties uz nodalījuma atslēgām, kas ir primārās atslēgas pirmā daļa. Tātad, mēģiniet izvēlēties veselus skaitļus kā galveno atslēgu, lai vienmērīgi izplatītu datus ap kopu.
- Samaziniet lasīto nodalījumu skaitu, vienlaikus vaicājot par datiem
Partition ir ierakstu grupa ar vienu un to pašu nodalījuma atslēgu. Kad tiek izsniegts lasītais vaicājums, tas apkopo datus no dažādiem mezgliem no dažādiem nodalījumiem.
Ja būs daudz nodalījumu, vaicājuma datu apkopošanai ir jāapmeklē visi šie nodalījumi.
Tas nenozīmē, ka nevajadzētu izveidot nodalījumus. Ja jūsu dati ir ļoti lieli, jūs nevarat saglabāt šo milzīgo datu daudzumu vienā nodalījumā. Vienu nodalījumu palēninās.
Tāpēc mēģiniet izvēlēties sabalansētu nodalījumu skaitu.
Laba primārā atslēga
Ņemsim piemēru un atradīsim, kura primārā atslēga ir laba.
Šeit ir tabula MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));
Iepriekš minētajā piemērā tabula MusicPlaylist,
- Songid ir nodalījuma atslēga un
- Dziesmas nosaukums ir kopu kolonna
- Dati tiks grupēti, pamatojoties uz SongName. Ar SongId tiks izveidots tikai viens nodalījums. Tabulā MusicPlaylist nebūs neviena cita nodalījuma.
Datu izguve šajā datu modelī būs lēna, jo ir slikta primārā atslēga.
Šeit ir vēl viena tabula MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));
Iepriekš minētajā piemērā tabula MusicPlaylist,
- Songid un Year ir nodalījuma atslēga, un
- Dziesmas nosaukums ir kopu kolonna.
- Dati tiks grupēti, pamatojoties uz SongName. Šajā tabulā katru gadu tiks izveidots jauns nodalījums. Visas gada dziesmas būs vienā mezglā. Šī primārā atslēga būs ļoti noderīga datiem.
Izmantojot šo datu modeli, mūsu datu meklēšana būs ātra.
Modelējiet savus datus Kasandrā
Modelējot savus jautājumus, jāpatur prātā šādas lietas.
- Nosakiet, kādus vaicājumus vēlaties atbalstīt
- Pievienojas
- Grupēt pēc
- Filtrēšana uz kuras kolonnas utt.
- Izveidojiet tabulu atbilstoši saviem jautājumiem
Izveidojiet tabulu atbilstoši saviem jautājumiem. Izveidojiet tabulu, kas apmierinās jūsu jautājumus. Mēģiniet izveidot tabulu tā, lai būtu jāizlasa minimālais nodalījumu skaits.
Vispirms nosakiet, kādus vaicājumus vēlaties.
Piemēram, vai jums vajag?
Darbs ar vienu pret vienu
Viena pret vienu nozīmē, ka divām tabulām ir viena pret vienu sarakste. Piemēram, students var reģistrēt tikai vienu kursu, un es vēlos meklēt studentam, kurā kursā konkrētais students ir reģistrēts.
Tātad šajā gadījumā jūsu tabulas shēmai jāietver visa informācija par studentu, kas atbilst konkrētajam kursam, piemēram, kursa nosaukums, studenta saraksta numurs, studenta vārds utt.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Darbs ar vienu pret daudzām attiecībām
Attiecības “viens pret daudziem” nozīmē, ka starp divām tabulām ir sarakste no viena līdz daudziem.
Piemēram, kursu var apgūt daudzi studenti. Es gribu pārmeklēt visus studentus, kuri apgūst konkrētu kursu.
Tāpēc, vaicājot par kursa nosaukumu, man būs daudz studentu vārdu, kuri studēs konkrētu kursu.
Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);
Es varu iegūt visus studentus konkrētam kursam, izmantojot šādu vaicājumu.
Select * from Student_Course where Course_name='Course Name';
Darbs ar daudzām un daudzām attiecībām
Daudzas attiecības nozīmē, ka starp divām tabulām ir sarakste no daudz līdz daudziem.
Piemēram, kursu var apgūt daudzi studenti, un students var apgūt arī daudzus kursus.
Es gribu pārmeklēt visus studentus, kuri apgūst konkrētu kursu. Es arī vēlos meklēt visus kursus, kurus mācās konkrēts students.
Tāpēc šajā gadījumā man būs divas tabulas, ti, problēmu sadalīšu divos gadījumos.
Pirmkārt, es izveidošu tabulu, pēc kuras jūs varat atrast konkrēta studenta kursus.
Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);
Visus konkrētā studenta kursus varu atrast pēc šāda vaicājuma. ->
Select * from Student_Course where student_rollno=rollno;
Otrkārt, es izveidošu tabulu, pēc kuras jūs varat uzzināt, cik daudz studentu mācās konkrēto kursu.
Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);
Es varu atrast studentu noteiktā kursā pēc šāda vaicājuma.
Select * from Course_Student where Course_name=CourseName;
Atšķirība starp RDBMS un Kasandras datu modelēšanu
RDBMS |
Kasandra |
Saglabā datus normalizētā formā |
Glabā datus denormalizētā formā |
Mantotie dbms; strukturēti dati |
Plašs rindu veikals, Dynamic; strukturēti un nestrukturēti dati |
Kopsavilkums
Datu modelēšana Kasandrā atšķiras no citām RDBMS datu bāzēm. Kasandras datu modelēšanā ir daži noteikumi. Šie noteikumi jāievēro labai datu modelēšanai. Bez šiem noteikumiem mēs redzējām trīs dažādus datu modelēšanas gadījumus un to, kā ar tiem rīkoties.