Cassandrin podatkovni model s preprostim primerom

Kazalo:

Anonim

Čeprav je jezik poizvedb Cassandra podoben jeziku SQL, so njihovi načini modeliranja podatkov popolnoma drugačni.

V Cassandri lahko slab podatkovni model poslabša zmogljivost, zlasti kadar uporabniki poskušajo na Cassandri implementirati koncepte RDBMS. Najbolje je, da upoštevate nekaj spodaj opisanih pravil.

V tej vadnici boste izvedeli-

  • Pravila podatkovnega modela Cassandra
  • Oblikujte svoje podatke v Cassandri
  • Obravnavanje odnosov ena do ena
  • Obravnavanje enega do številnih odnosov
  • Reševanje odnosov med mnogimi in mnogimi

Pravila podatkovnega modela Cassandra

V Cassandri pisanje ni drago. Cassandra ne podpira združevanja, klavzule po, ali klavzule OR, združevanja itd. Torej morate podatke shraniti tako, da bi jih bilo mogoče popolnoma dobiti. Torej je treba ta pravila upoštevati pri modeliranju podatkov v Cassandri.

  1. Povečajte število zapisov

    V Cassandri so pisanja zelo poceni. Cassandra je optimizirana za visoko zmogljivost pisanja. Poskusite torej povečati število zapisov za boljše branje in dostopnost podatkov. Med zapisovanjem in branjem podatkov obstaja kompromis. Torej optimizirajte uspešnost branja podatkov tako, da povečate število zapisov podatkov.

  2. Povečajte podvajanje podatkov

    Denormalizacija in podvajanje podatkov sta defacto Cassandre. Prostor na disku ni dražji od pomnilnika, obdelave CPE in delovanja IO-jev. Ker je Cassandra porazdeljena baza podatkov, tako podvajanje podatkov zagotavlja takojšnjo razpoložljivost podatkov in nobene točke odpovedi.

Cilji podatkovnega modeliranja

Med modeliranjem podatkov v Cassandri bi morali imeti naslednje cilje.

  1. Podatke enakomerno razporedite po gruči

    Želite enako količino podatkov na vsakem vozlišču grozda Cassandra. Podatki se razširijo na različna vozlišča na podlagi particijskih ključev, ki so prvi del primarnega ključa. Poskusite torej izbrati cela števila kot primarni ključ za enakomerno širjenje podatkov po gruči.

  2. Zmanjšajte število prebranih particij med poizvedovanjem po podatkih

    Particija je skupina zapisov z istim particijskim ključem. Ko je izdana poizvedba za branje, zbira podatke iz različnih vozlišč z različnih particij.

    Če bo particij veliko, je treba za zbiranje podatkov o poizvedbah obiskati vse te particije.

    To ne pomeni, da se particije ne smejo ustvarjati. Če so vaši podatki zelo veliki, te velike količine podatkov ne morete hraniti na eni particiji. Posamezna particija bo upočasnjena.

    Poskusite torej izbrati uravnoteženo število particij.

Dober primarni ključ

Vzemimo primer in ugotovimo, kateri primarni ključ je dober.

Tu je tabela MusicPlaylist.

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

V zgornjem primeru tabela MusicPlaylist,

  • Songid je particijski ključ in
  • SongName je grozdni stolpec
  • Podatki bodo razvrščeni na podlagi SongName. Z SongId bo ustvarjena samo ena particija. V tabeli MusicPlaylist ne bo nobene druge particije.

Zaradi slabega primarnega ključa bo ta podatkovni model počasi pridobival podatke.

Tu je še ena tabela MusicPlaylist.

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

V zgornjem primeru tabela MusicPlaylist,

  • Songid in Year sta particijski ključ in
  • SongName je grozdni stolpec.
  • Podatki bodo razvrščeni na podlagi SongName. V tej tabeli bo vsako leto ustvarjena nova particija. Vse skladbe leta bodo na istem vozlišču. Ta primarni ključ bo zelo koristen za podatke.

Ta podatkovni model bo hitro pridobival naše podatke.

Oblikujte svoje podatke v Cassandri

Pri modeliranju poizvedb je treba upoštevati naslednje stvari.

  1. Določite, katere poizvedbe želite podpirati
  2. Najprej določite, katera vprašanja želite.

    Na primer, ali potrebujete?

    • Pridruži se
    • Razvrsti po
    • Filtriranje na katerem stolpcu itd.
  3. Ustvarite tabelo glede na vaša vprašanja

    Ustvarite tabelo glede na vaša vprašanja. Ustvarite tabelo, ki bo zadovoljila vaša vprašanja. Poskusite ustvariti tabelo tako, da je treba prebrati najmanjše število particij.

Obravnavanje odnosov ena do ena

Razmerje ena proti ena pomeni, da imata dve tabeli korespondenco ena do ena. Na primer, študent lahko prijavi samo en tečaj, študenta pa želim poiskati, v katerem predmetu je določen študent registriran.

V tem primeru bi morala vaša shema tabel vsebovati vse podrobnosti študenta, ki ustrezajo temu predmetu, kot je ime predmeta, ime študenta, ime študenta itd.

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

Obravnavanje enega do številnih odnosov

Razmerje ena do številka pomeni, da se med dvema tabelama ujema ena do številka.

Na primer, tečaj lahko preučujejo številni študentje. Iskati želim vse študente, ki študirajo določen predmet.

Tako da bom z vprašanji o imenu predmeta imel veliko imen študentov, ki bodo študirali določen predmet.

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

Z naslednjo poizvedbo lahko poiščem vse študente določenega predmeta.

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

Reševanje odnosov med mnogimi in mnogimi

Razmerja med mnogimi in mnogimi pomeni, da imamo med dvema tabelama veliko ali veliko korespondence.

Na primer, tečaj lahko preučuje veliko študentov, študent pa lahko tudi veliko predmetov.

Preiskati želim vse študente, ki študirajo določen predmet. Prav tako želim preiskati vse tečaje, ki jih študira določen študent.

V tem primeru bom imel dve tabeli, tj. Problem razdelil na dva primera.

Najprej bom ustvaril tabelo, v kateri boste našli tečaje določenega študenta.

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

Vse tečaje določenega študenta najdem po naslednjem vprašanju. ->

Select * from Student_Course where student_rollno=rollno;

Drugič, ustvaril bom tabelo, v kateri boste našli, koliko študentov študira določen predmet.

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

Študenta na določenem tečaju lahko najdem po naslednjem vprašanju.

Select * from Course_Student where Course_name=CourseName;

Razlika med RDBMS in Cassandra Data Modelling

RDBMS

Cassandra

Shrani podatke v normalizirani obliki

Shrani podatke v denormalizirani obliki

Zapuščeni dbms; strukturirani podatki

Široka trgovina, Dynamic; strukturirani in nestrukturirani podatki

Povzetek

Modeliranje podatkov v Cassandri se razlikuje od drugih baz podatkov RDBMS. Modeliranje podatkov Cassandra ima nekaj pravil. Ta pravila je treba upoštevati za dobro modeliranje podatkov. Poleg teh pravil smo videli še tri različne primere modeliranja podatkov in kako z njimi ravnati.