Nors „Cassandra“ užklausos kalba primena SQL kalbą, jų duomenų modeliavimo metodai yra visiškai skirtingi.
„Cassandra“ netinkamas duomenų modelis gali pabloginti našumą, ypač kai vartotojai bando įdiegti RDBMS koncepcijas „Cassandra“. Geriausia nepamiršti kelių toliau aprašytų taisyklių.
Šioje pamokoje sužinosite
- „Cassandra“ duomenų modelio taisyklės
- Modeliuokite savo duomenis „Cassandra“
- Santykių „vienas su vienu“ tvarkymas
- Tvarkyti santykius nuo vieno iki daugelio
- Tvarkymasis su daugeliu santykių
„Cassandra“ duomenų modelio taisyklės
Kasandroje rašymai nėra brangūs. „Cassandra“ nepalaiko sujungimų, grupavimo pagal ARBA sąlygą, kaupimą ir pan. Taigi jūs turite saugoti savo duomenis taip, kad juos būtų galima visiškai nuskaityti. Taigi modeliuojant duomenis „Cassandra“ reikia nepamiršti šių taisyklių.
- Padidinkite rašymų skaičių
Kasandroje rašymai yra labai pigūs. „Cassandra“ yra optimizuota, kad rašymas būtų aukštas. Taigi pabandykite maksimaliai padidinti savo rašymą, kad skaitymo našumas ir duomenys būtų geresni. Yra kompromisas tarp duomenų rašymo ir duomenų skaitymo. Taigi, optimizuokite duomenų skaitymo našumą maksimaliai padidindami duomenų rašymo skaičių.
- Padidinkite duomenų dubliavimąsi
Kasandros defaktas yra duomenų denormalizavimas ir duomenų dubliavimas. Disko vieta nėra brangesnė nei atmintis, procesoriaus apdorojimas ir IO operacijos. „Cassandra“ yra paskirstyta duomenų bazė, todėl duomenų dubliavimasis užtikrina greitą duomenų prieinamumą ir nėra vieno gedimo taško.
Duomenų modeliavimo tikslai
Modeliuodami duomenis „Cassandra“ turėtumėte turėti šiuos tikslus.
- Paskirstykite duomenis tolygiai aplink klasterį
Norite vienodo duomenų kiekio kiekviename „Cassandra“ sankaupos mazge. Duomenys skleidžiami į skirtingus mazgus, atsižvelgiant į skaidinio raktus, kurie yra pirmojo pirminio rakto dalis. Taigi, pabandykite pasirinkti sveikus skaičius kaip pagrindinį raktą, kad duomenys būtų tolygiai paskleisti aplink klasterį.
- Sumažinkite perskaitytų skaidinių skaičių užklausdami duomenis
Sritis yra įrašų grupė su tuo pačiu skaidinio raktu. Kai išduodama perskaityta užklausa, ji renka duomenis iš skirtingų mazgų iš skirtingų skaidinių.
Jei bus daug skaidinių, reikia rinkti visus šiuos skirsnius, kad būtų renkami užklausos duomenys.
Tai nereiškia, kad pertvaros neturėtų būti kuriamos. Jei jūsų duomenys yra labai dideli, jūs negalite laikyti to didžiulio duomenų kiekio viename skaidinyje. Vieno skaidinio veikimas bus sulėtintas.
Taigi pabandykite pasirinkti subalansuotą skaidinių skaičių.
Geras pagrindinis raktas
Paimkime pavyzdį ir raskime, kuris pagrindinis raktas yra geras.
Čia yra lentelė „MusicPlaylist“.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));
Aukščiau pateiktame pavyzdyje lentelėje „MusicPlaylist“,
- „Songid“ yra skaidinio raktas ir
- „SongName“ yra grupių stulpelis
- Duomenys bus kaupiami naudojant „SongName“. Su „SongId“ bus sukurtas tik vienas skaidinys. Lentelėje „MusicPlaylist“ nebus jokio kito skaidinio.
Duomenų paieška pagal šį duomenų modelį bus lėta dėl netinkamo pirminio rakto.
Čia yra dar viena lentelė „MusicPlaylist“.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));
Aukščiau pateiktame pavyzdyje lentelėje „MusicPlaylist“,
- „Songid“ ir „Year“ yra skaidinio raktas ir
- „SongName“ yra grupių stulpelis.
- Duomenys bus kaupiami naudojant „SongName“. Šioje lentelėje kiekvienais metais bus sukurtas naujas skaidinys. Visos metų dainos bus tame pačiame mazge. Šis pagrindinis raktas bus labai naudingas duomenims.
Pagal šį duomenų modelį mūsų duomenų paieška bus greita.
Modeliuokite savo duomenis „Cassandra“
Modeliuodami savo klausimus turėtumėte nepamiršti šių dalykų.
- Nustatykite, kokias užklausas norite palaikyti
- Prisijungia
- Grupuoti pagal
- Filtravimas ant kurio stulpelio ir pan.
- Sukurkite lentelę pagal savo užklausas
Sukurkite lentelę pagal savo užklausas. Sukurkite lentelę, kuri patenkins jūsų užklausas. Pabandykite sukurti lentelę taip, kad reikia perskaityti minimalų skaidinių skaičių.
Pirmiausia nustatykite, kokių užklausų norite.
Pavyzdžiui, ar jums reikia?
Santykių „vienas su vienu“ tvarkymas
Ryšys vienas su vienu reiškia, kad dvi lentelės susirašinėja viena su kita. Pavyzdžiui, studentas gali registruoti tik vieną kursą, o aš noriu ieškoti studento, kuriame kurse yra registruotas konkretus studentas.
Taigi šiuo atveju jūsų stalo schema turėtų apimti visą informaciją apie studentą, atitinkančią tą konkretų kursą, pvz., Kurso pavadinimą, studento vardo numerį, studento vardą ir kt.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Tvarkyti santykius nuo vieno iki daugelio
Vienas iš daugelio santykių reiškia, kad susirašinėjimas tarp dviejų lentelių yra vienas prieš daug.
Pavyzdžiui, kursą gali studijuoti daugelis studentų. Noriu ieškoti visų studentų, kurie studijuoja tam tikrą kursą.
Taigi, klausdamas kurso pavadinimo, turėsiu daug studentų vardų, kurie studijuos tam tikrą kursą.
Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);
Pagal šią užklausą galiu surasti visus tam tikro kurso studentus.
Select * from Student_Course where Course_name='Course Name';
Tvarkymasis su daugeliu santykių
Ryšiai tarp daugelio reiškia, kad tarp dviejų lentelių susirašinėjama daugeliu atvejų.
Pavyzdžiui, kursą gali studijuoti daugelis studentų, taip pat studentas gali studijuoti daug kursų.
Noriu ieškoti visų studentų, kurie studijuoja tam tikrą kursą. Be to, noriu ieškoti visų kursų, kuriuos studijuoja konkretus studentas.
Taigi šiuo atveju turėsiu dvi lenteles, ty problemą padalysiu į du atvejus.
Pirmiausia sukursiu lentelę, pagal kurią rasite konkretaus studento kursus.
Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);
Visus konkretaus studento kursus galiu rasti pagal šią užklausą. ->
Select * from Student_Course where student_rollno=rollno;
Antra, sukursiu lentelę, pagal kurią galėsite sužinoti, kiek studentų studijuoja tam tikrą kursą.
Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);
Pagal šią užklausą galiu rasti studentą tam tikrame kurse.
Select * from Course_Student where Course_name=CourseName;
Skirtumas tarp RDBMS ir „Cassandra“ duomenų modeliavimo
RDBMS |
Kasandra |
Duomenys saugomi normalizuota forma |
Duomenys saugomi denormalizuota forma |
Senasis dbms; struktūrizuoti duomenys |
Plati eilių parduotuvė, „Dynamic“; struktūrizuoti ir nestruktūrizuoti duomenys |
Santrauka
Duomenų modeliavimas „Cassandra“ skiriasi nuo kitų RDBMS duomenų bazių. „Cassandra“ duomenų modeliavimas turi keletą taisyklių. Norint tinkamai modeliuoti duomenis, reikia laikytis šių taisyklių. Be šių taisyklių, matėme tris skirtingus duomenų modeliavimo atvejus ir kaip su jais elgtis.