„Cassandra“ duomenų modelis su paprastu pavyzdžiu

Turinys:

Anonim

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ų.

  1. 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ų.

  2. 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.

  1. 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į.

  2. 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ų.

  1. Nustatykite, kokias užklausas norite palaikyti
  2. Pirmiausia nustatykite, kokių užklausų norite.

    Pavyzdžiui, ar jums reikia?

    • Prisijungia
    • Grupuoti pagal
    • Filtravimas ant kurio stulpelio ir pan.
  3. 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ų.

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.