Cassandra andmemudel lihtsa näitega

Lang L: none (table-of-contents):

Anonim

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.

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

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

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

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

  1. Tehke kindlaks, milliseid päringuid soovite toetada
  2. Kõigepealt tehke kindlaks, milliseid päringuid soovite.

    Kas vajate näiteks?

    • Liitub
    • Grupeerige
    • Filtreerimine millises veerus jne
  3. 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.

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