Cassandra Datamodel med simpelt databaseeksempel

Skønt Cassandra forespørgselssprog ligner med SQL sprog, er deres datamodelleringsmetoder helt forskellige.

In Cassandra, kan en dårlig datamodel forringe ydeevnen, især når brugere forsøger at implementere RDBMS-koncepterne på Cassandra. Det er bedst at huske på nogle få regler beskrevet nedenfor.

Cassandra Regler for datamodel

In Cassandra, skriver er ikke dyre. Cassandra understøtter ikke joins, group by, OR-klausul, aggregeringer osv. Du skal altså gemme dine data på en sådan måde, at de skal være fuldstændigt genfindelige. Så disse regler skal huskes, mens data modelleres ind Cassandra.

Maksimer antallet af skrivninger

In Cassandra, skriver er meget billige. Cassandra er optimeret til høj skriveydelse. Så prøv at maksimere dine skrivninger for bedre læseydelse og datatilgængelighed. Der er en afvejning mellem dataskrivning og datalæsning. Så optimer din datalæseydelse ved at maksimere antallet af dataskrivninger.

Maksimer dataduplikering

Datadenormalisering og dataduplikering er defacto af Cassandra. Diskplads er ikke dyrere end hukommelse, CPU-behandling og IOs-drift. Som Cassandra er en distribueret database, så dataduplikering giver øjeblikkelig datatilgængelighed og intet enkelt fejlpunkt.

Cassandra Mål for datamodellering

Du bør have følgende mål, mens du modellerer data ind Cassandra:

Fordel data jævnt rundt om Cluster

Du vil have en lige stor mængde data på hver node af Cassandra Cluster. Data spredes til forskellige noder baseret på partitionsnøgler, der er den første del af den primære nøgle. Så prøv at vælge heltal som en primær nøgle til at sprede data jævnt rundt i klyngen.

Minimer antallet af læste partitioner, mens du forespørger data

Partition er en gruppe af poster med den samme partitionsnøgle. Når læseforespørgslen udsendes, indsamler den data fra forskellige noder fra forskellige partitioner.

Hvis der vil være mange partitioner, skal alle disse partitioner besøges for at indsamle forespørgselsdataene.

Det betyder ikke, at partitioner ikke skal oprettes. Hvis dine data er meget store, kan du ikke beholde den enorme mængde data på den enkelte partition. Den enkelte partition vil blive langsommere.

Så prøv at vælge et afbalanceret antal partitioner.

God primær nøgle ind Cassandra

Lad os tage et eksempel og finde ud af, hvilken primær nøgle der er god.

Her er tabellen MusicPlaylist.

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

I ovenstående eksempel, tabellen MusicPlaylist,

  • Songid er partitionsnøglen, og
  • SongName er klyngekolonnen
  • Data vil blive grupperet på basis af SongName. Kun én partition vil blive oprettet med SongId. Der vil ikke være nogen anden partition i tabellen MusicPlaylist.

Datahentning vil være langsom af denne datamodel på grund af den dårlige primærnøgle.

Her er en anden tabel MusicPlaylist.

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

I ovenstående eksempel, tabellen MusicPlaylist,

  • Songid og Year er partitionsnøglen, og
  • SongName er klyngekolonnen.
  • Data vil blive grupperet på basis af SongName. I denne tabel vil der hvert år blive oprettet en ny partition. Alle årets sange vil være på samme node. Denne primære nøgle vil være meget nyttig for dataene.

Vores datahentning vil være hurtig med denne datamodel.

Modellér dine data i Cassandra

Følgende ting skal huskes, når du modellerer dine forespørgsler:

Bestem, hvilke forespørgsler du vil støtte

Først og fremmest skal du bestemme, hvilke forespørgsler du ønsker.

Har du for eksempel brug for?

  • Sammenføjninger
  • Gruppe af
  • Filtrering på hvilken kolonne mv.

Opret tabel i henhold til dine forespørgsler

Opret tabel i henhold til dine forespørgsler. Opret en tabel, der vil tilfredsstille dine forespørgsler. Prøv at oprette en tabel på en sådan måde, at et minimum antal partitioner skal læses.

Håndtering af et-til-én-forhold i Cassandra

En til en relation betyder, at to tabeller har en til en korrespondance. For eksempel kan eleven kun tilmelde ét kursus, og jeg vil søge på en studerende, der i hvilket kursus en bestemt elev er tilmeldt.

Så i dette tilfælde skal dit tabelskema omfatte alle detaljerne om den studerende, der svarer til det pågældende kursus, såsom kursets navn, rullenummer på eleven, elevens navn osv.

Et til et forhold i Cassandra
Et til et forhold i Cassandra

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

Håndtering af et til mange forhold i Cassandra

En til mange relationer betyder at have en til mange korrespondance mellem to tabeller.

For eksempel kan et kursus læses af mange studerende. Jeg vil søge efter alle de studerende, der studerer et bestemt kursus.

Så ved at forespørge på kursusnavnet, vil jeg have mange elevnavne, som vil studere et bestemt kursus.

Et til mange forhold i Cassandra
Et til mange forhold i Cassandra

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

Jeg kan hente alle eleverne til et bestemt kursus ved følgende forespørgsel.

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

Håndtering af mange til mange forhold i Cassandra

Mange til mange relationer betyder at have mange til mange korrespondance mellem to tabeller.

For eksempel kan et kursus læses af mange studerende, og en studerende kan også læse mange kurser.

Mange til mange forhold i Cassandra
Mange til mange forhold i Cassandra

Jeg vil søge efter alle de studerende, der studerer et bestemt kursus. Jeg vil også søge i hele det kursus, som en bestemt studerende studerer.

Så i dette tilfælde vil jeg have to tabeller, dvs. dele problemet op i to tilfælde.

Først vil jeg oprette en tabel, hvor du kan finde kurser af en bestemt studerende.

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

Jeg kan finde alle kurser af en bestemt studerende ved følgende forespørgsel.

Select * from Student_Course where student_rollno=rollno;

For det andet vil jeg oprette en tabel, hvor du kan finde ud af, hvor mange studerende der studerer et bestemt kursus.

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

Jeg kan finde en studerende i et bestemt kursus ved følgende forespørgsel.

Select * from Course_Student where Course_name=CourseName;

Forskellen mellem RDBMS og Cassandra Datamodellering

RDBMS Cassandra
Gemmer data i normaliseret form Gemmer data i denormaliseret form
Ældre dbms; strukturerede data Store rækker, Dynamisk; strukturerede og ustrukturerede data

Resumé

  • Datamodellering i Cassandra er anderledes end andre RDBMS databaser.
  • Cassandra datamodellering har nogle regler. Disse regler skal følges for god datamodellering. Udover disse regler så vi tre forskellige datamodelleringssager og hvordan man håndterer dem.
  • En til en relation betyder, at to tabeller har en til en korrespondance.
  • En til mange relationer betyder at have en til mange korrespondance mellem to tabeller.
  • Mange til mange relationer betyder at have mange til mange korrespondance mellem to tabeller.