Cassandra Tietomalli yksinkertaisella tietokantaesimerkillä

Vaikka Cassandra kyselykieli muistuttaa SQL kielellä, niiden datamallinnusmenetelmät ovat täysin erilaisia.

In Cassandra, huono tietomalli voi heikentää suorituskykyä, varsinkin kun käyttäjät yrittävät toteuttaa RDBMS-konsepteja Cassandra. On parasta pitää mielessä muutama alla kuvattu sääntö.

Cassandra Tietomallin säännöt

In Cassandra, kirjoitukset eivät ole kalliita. Cassandra ei tue liittymiä, ryhmittelyä, OR-lausetta, aggregaatioita jne. Joten sinun on tallennettava tietosi siten, että ne ovat täysin noudettavissa. Nämä säännöt on siis pidettävä mielessä, kun tietoja mallinnetaan Cassandra.

Maksimoi kirjoitusten määrä

In Cassandra, kirjoitukset ovat erittäin halpoja. Cassandra on optimoitu korkealle kirjoitussuorituskyvylle. Yritä siis maksimoida kirjoitustasi parantaaksesi lukusuorituskykyä ja tietojen saatavuutta. Tiedon kirjoittamisen ja lukemisen välillä on kompromissi. Optimoi siis tietojen lukusuorituskykysi maksimoimalla kirjoitettavien tietojen määrä.

Maksimoi tietojen päällekkäisyys

Tietojen denormalisointi ja tietojen kopiointi ovat tosiasiassa Cassandra. Levytila ​​ei ole kalliimpaa kuin muisti, prosessorikäsittely ja IO:iden toiminta. Kuten Cassandra on hajautettu tietokanta, joten tietojen päällekkäisyys tarjoaa välittömän tiedon saatavuuden eikä yhtä vikakohtaa.

Cassandra Tiedon mallinnuksen tavoitteet

Sinulla pitäisi olla seuraavat tavoitteet mallintaessasi tietoja Cassandra:

Levitä tiedot tasaisesti ympäri Cluster

Haluat yhtä paljon dataa jokaisessa solmussa Cassandra Cluster. Tiedot levitetään eri solmuihin osioavainten perusteella, jotka ovat ensisijaisen avaimen ensimmäinen osa. Yritä siis valita kokonaisluvut ensisijaiseksi avaimeksi tietojen levittämiseksi tasaisesti klusterin ympärille.

Minimoi luettavien osioiden määrä tietoja kyselyn aikana

Osio ovat ryhmä tietueita, joilla on sama osioavain. Kun lukukysely annetaan, se kerää tietoja eri solmuista eri osioista.

Jos osioita on useita, kaikissa näissä osioissa tulee käydä kyselytietojen keräämiseksi.

Se ei tarkoita, että osioita ei pitäisi luoda. Jos tietosi ovat erittäin suuria, et voi pitää niin suurta määrää dataa yhdessä osiossa. Yksittäinen osio hidastuu.

Joten yritä valita tasapainoinen määrä osioita.

Hyvä ensisijainen avain Cassandra

Otetaan esimerkki ja selvitetään, mikä ensisijainen avain on hyvä.

Tässä on MusicPlaylist-taulukko.

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

Yllä olevassa esimerkissä taulukko MusicPlaylist,

  • Songid on osioavain ja
  • SongName on klusterisarake
  • Tiedot ryhmitellään kappaleen nimen perusteella. Vain yksi osio luodaan SongId:llä. Taulukon MusicPlaylist ei sisällä muita osioita.

Tämä tietomalli hidastaa tietojen hakua huonon ensisijaisen avaimen vuoksi.

Tässä on toinen taulukko MusicPlaylist.

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

Yllä olevassa esimerkissä taulukko MusicPlaylist,

  • Songid ja vuosi ovat osioavain, ja
  • SongName on klusterisarake.
  • Tiedot ryhmitellään kappaleen nimen perusteella. Tässä taulukossa luodaan joka vuosi uusi osio. Kaikki vuoden kappaleet ovat samassa solmussa. Tämä ensisijainen avain on erittäin hyödyllinen tiedoille.

Tietojen haku on nopea tällä tietomallilla.

Mallinna tietosi Cassandra

Seuraavat asiat tulee pitää mielessä kyselyjäsi mallintaessa:

Määritä, mitä kyselyitä haluat tukea

Ensinnäkin määritä, mitä kyselyitä haluat.

Tarvitsetko esimerkiksi?

  • Liitosten
  • Ryhmän mukaan
  • Suodatus mihin sarakkeeseen jne.

Luo taulukko kyselyjesi mukaan

Luo taulukko kyselyjesi mukaan. Luo taulukko, joka täyttää kyselysi. Yritä luoda taulukko siten, että vähimmäismäärä osioita on luettava.

Yksittäisen suhteen käsitteleminen Cassandra

Yksi yhteen -suhde tarkoittaa, että kahdella taulukolla on yksi vastaavuus. Esimerkiksi opiskelija voi ilmoittautua vain yhdelle kurssille, ja haluan etsiä opiskelijasta, mille kurssille tietty opiskelija on ilmoittautunut.

Joten tässä tapauksessa taulukkokaavion tulisi sisältää kaikki kyseistä kurssia vastaavan opiskelijan tiedot, kuten kurssin nimi, opiskelijan numero, opiskelijan nimi jne.

Yksi yhteen -suhde Cassandra
Yksi yhteen -suhde Cassandra

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

Yhdestä moneen -suhteen käsittely Cassandra

Yksi moniin -suhteet tarkoittaa, että kahden taulukon välillä on yhdestä useaan vastaavuus.

Esimerkiksi kurssia voivat opiskella monet opiskelijat. Haluan etsiä kaikki opiskelijat, jotka opiskelevat tiettyä kurssia.

Joten kysymällä kurssin nimeä, minulla on monia opiskelijoiden nimiä, jotka opiskelevat tiettyä kurssia.

Yksi moniin -suhde Cassandra
Yksi moniin -suhde Cassandra

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

Voin hakea kaikki tietyn kurssin opiskelijat seuraavalla kyselyllä.

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

Monen toiselle -suhteen käsitteleminen Cassandra

Monesta moneen -suhteet tarkoittaa sitä, että kahden taulukon välillä on monta useampaa vastaavuutta.

Esimerkiksi yhtä kurssia voi opiskella moni opiskelija, ja opiskelija voi myös opiskella monia kursseja.

Monelta moneen -suhde Cassandra
Monelta moneen -suhde Cassandra

Haluan etsiä kaikki opiskelijat, jotka opiskelevat tiettyä kurssia. Haluan myös etsiä kaikki kurssit, joita tietty opiskelija opiskelee.

Joten tässä tapauksessa minulla on kaksi taulukkoa eli jaa ongelma kahteen tapaukseen.

Ensin luon taulukon, josta löydät tietyn opiskelijan kurssit.

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

Löydän kaikki tietyn opiskelijan kurssit seuraavalla kyselyllä.

Select * from Student_Course where student_rollno=rollno;

Toiseksi luon taulukon, josta näet kuinka monta opiskelijaa opiskelee tiettyä kurssia.

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

Löydän opiskelijan tietyltä kurssilta seuraavalla kyselyllä.

Select * from Course_Student where Course_name=CourseName;

Ero RDBMS:n ja Cassandra Tietomallinnus

RDBMS Cassandra
Tallentaa tiedot normalisoidussa muodossa Tallentaa tiedot denormalisoidussa muodossa
Legacy dbms; jäsenneltyä dataa Leveä rivikauppa, dynaaminen; jäsenneltyä ja jäsentämätöntä dataa

Yhteenveto

  • Tietojen mallinnus sisään Cassandra on erilainen kuin muut RDBMS-tietokannat.
  • Cassandra Tietomallinnus sisältää joitain sääntöjä. Näitä sääntöjä on noudatettava hyvän tiedon mallinnuksen varmistamiseksi. Näiden sääntöjen lisäksi näimme kolme erilaista datamallinnustapausta ja kuinka käsitellä niitä.
  • Yksi yhteen -suhde tarkoittaa, että kahdella taulukolla on yksi vastaavuus.
  • Yksi moniin -suhteet tarkoittaa, että kahden taulukon välillä on yhdestä useaan vastaavuus.
  • Monesta moneen -suhteet tarkoittaa sitä, että kahden taulukon välillä on monta useampaa vastaavuutta.