Cassandrin model podataka s jednostavnim primjerom

Sadržaj:

Anonim

Iako Cassandrin jezik upita sliči SQL jeziku, njihove metode modeliranja podataka potpuno su različite.

U Cassandri loš model podataka može pogoršati performanse, posebno kada korisnici pokušavaju implementirati RDBMS koncepte na Cassandri. Najbolje je imati na umu nekoliko pravila koja su detaljno opisana u nastavku.

U ovom vodiču naučit ćete-

  • Pravila modela podataka Cassandra
  • Modelirajte svoje podatke u Cassandri
  • Rukovanje odnosom jedan prema jedan
  • Rukovanje jednom do mnogim vezama
  • Rukovanje vezom mnogi do mnogi

Pravila modela podataka Cassandra

U Cassandri pisanja nisu skupa. Cassandra ne podržava pridruživanje, grupiranje po klauzuli ILI klauzulu, agregacije itd. Stoga svoje podatke morate pohraniti na takav način da bi trebali biti u potpunosti dostupni. Dakle, ova pravila moramo imati na umu prilikom modeliranja podataka u Cassandri.

  1. Povećajte broj upisa

    U Cassandri su pisanja vrlo jeftina. Cassandra je optimizirana za visoke performanse pisanja. Zato pokušajte maksimizirati svoje upise radi bolje izvedbe čitanja i dostupnosti podataka. Postoji kompromis između pisanja podataka i čitanja podataka. Dakle, optimizirajte izvedbu čitanja podataka maksimalizirajući broj upisa podataka.

  2. Povećajte dupliciranje podataka

    Denormalizacija podataka i dupliciranje podataka defacto su Cassandre. Prostor na disku nije skuplji od memorije, obrade CPU-a i rada IO-a. Kako je Cassandra distribuirana baza podataka, tako dupliciranje podataka pruža trenutnu dostupnost podataka i nema niti jedne točke kvara.

Ciljevi modeliranja podataka

Tijekom modeliranja podataka u Cassandri trebali biste imati sljedeće ciljeve.

  1. Podijelite podatke ravnomjerno oko klastera

    Želite jednaku količinu podataka na svakom čvoru klastera Cassandra. Podaci se šire na različite čvorove na temelju particijskih ključeva koji su prvi dio primarnog ključa. Dakle, pokušajte odabrati cijele brojeve kao primarni ključ za ravnomjerno širenje podataka oko klastera.

  2. Smanjite broj pročitanih particija dok tražite podatke

    Particija je skupina zapisa s istim particijskim ključem. Kada se izda upit za čitanje, on prikuplja podatke s različitih čvorova s ​​različitih particija.

    Ako će biti mnogo particija, tada je potrebno prikupiti sve te particije za prikupljanje podataka upita.

    To ne znači da se particije ne smiju stvarati. Ako su vaši podaci vrlo veliki, ne možete zadržati tu ogromnu količinu podataka na jednoj particiji. Pojedinačna particija bit će usporena.

    Zato pokušajte odabrati uravnoteženi broj particija.

Dobar primarni ključ

Uzmimo primjer i pronađimo koji je primarni ključ dobar.

Ovdje je tablica MusicPlaylist.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));

U gornjem primjeru, tablica MusicPlaylist,

  • Songid je particijski ključ i
  • SongName je stupac grupiranja
  • Podaci će se grupirati na temelju SongName. Samo će se jedna particija stvoriti s SongId-om. U tablici MusicPlaylist neće biti nijedne druge particije.

Ovaj model podataka usporavat će prikupljanje podataka zbog lošeg primarnog ključa.

Evo još jedne tablice MusicPlaylist.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));

U gornjem primjeru, tablica MusicPlaylist,

  • Songid i Godina su particijski ključ, i
  • SongName je stupac grupiranja.
  • Podaci će se grupirati na temelju SongName. U ovoj će se tablici svake godine stvarati nova particija. Sve pjesme godine bit će na istom čvoru. Ovaj će primarni ključ biti vrlo koristan za podatke.

Naše će pretraživanje podataka biti brzo pomoću ovog modela podataka.

Modelirajte svoje podatke u Cassandri

Pri modeliranju upita treba imati na umu sljedeće.

  1. Odredite koje upite želite podržati
  2. Prije svega odredite koje upite želite.

    Na primjer, trebate li?

    • Pridružuje se
    • Grupiraj prema
    • Filtriranje na kojem stupcu itd.
  3. Stvorite tablicu prema vašim upitima

    Stvorite tablicu prema vašim upitima. Stvorite tablicu koja će zadovoljiti vaše upite. Pokušajte stvoriti tablicu na takav način da treba pročitati minimalni broj particija.

Rukovanje odnosom jedan prema jedan

Odnos jedan prema jedan znači da dvije tablice imaju korespondenciju jedan prema jedan. Na primjer, student može prijaviti samo jedan tečaj, a ja ga želim potražiti u kojem je tečaju određeni student prijavljen.

Dakle, u ovom bi slučaju vaša shema tablice trebala obuhvaćati sve detalje o studentu koji odgovaraju tom određenom tečaju, poput naziva tečaja, broja studenta, imena studenta itd.

Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);

Rukovanje jednom do mnogim vezama

Odnos jedan prema mnogo znači da postoji međusobna korespondencija dviju tablica.

Na primjer, tečaj mogu proučavati mnogi studenti. Želim pretražiti sve studente koji studiraju određeni predmet.

Dakle, postavljanjem upita o imenu predmeta imat ću mnoga imena studenata koji će proučavati određeni predmet.

Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);

Sljedećim upitom mogu pronaći sve studente za određeni tečaj.

Select * from Student_Course where Course_name='Course Name';

Rukovanje vezom mnogi do mnogi

Veze između mnogih i mnogih znači imati puno ili puno korespondencije između dviju tablica.

Na primjer, tečaj mogu proučavati mnogi studenti, a student također može proučavati mnoge tečajeve.

Želim pretražiti sve studente koji studiraju određeni predmet. Također, želim pretražiti sve tečajeve koje studira određeni student.

Dakle, u ovom slučaju imat ću dvije tablice, tj. Podijeliti problem u dva slučaja.

Prvo ću stvoriti tablicu pomoću koje možete pronaći tečajeve određenog studenta.

Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);

Sve tečajeve određenog studenta mogu pronaći prema sljedećem upitu. ->

Select * from Student_Course where student_rollno=rollno;

Drugo, izradit ću tablicu pomoću koje možete pronaći koliko učenika studira određeni tečaj.

Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);

Sljedećeg upita mogu pronaći studenta na određenom tečaju.

Select * from Course_Student where Course_name=CourseName;

Razlika između RDBMS-a i Cassandrinog modeliranja podataka

RDBMS

Cassandra

Pohranjuje podatke u normaliziranom obliku

Pohranjuje podatke u denormaliziranom obliku

Ostavljeni dbms; strukturirani podaci

Široka trgovina, Dynamic; strukturirani i nestrukturirani podaci

Sažetak

Modeliranje podataka u Cassandri razlikuje se od ostalih RDBMS baza podataka. Modeliranje podataka Cassandre ima neka pravila. Ova se pravila moraju poštivati ​​za dobro modeliranje podataka. Pored ovih pravila, vidjeli smo tri različita slučaja modeliranja podataka i kako postupati s njima.