Cassandra datamodel med simpelt eksempel

Indholdsfortegnelse:

Anonim

Selvom Cassandra-forespørgselssprog ligner SQL-sprog, er deres datamodelleringsmetoder helt forskellige.

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

I denne vejledning lærer du-

  • Cassandra Data Model Rules
  • Model dine data i Cassandra
  • Håndtering af et til et forhold
  • Håndtering af en til mange relationer
  • Håndtering af mange til mange forhold

Cassandra Data Model Rules

I Cassandra er skriv ikke dyre. Cassandra understøtter ikke sammenføjninger, grupperer efter, ELLER klausul, sammenlægninger osv. Så du er nødt til at gemme dine data på en sådan måde, at de skal kunne hentes helt. Så disse regler skal holdes i tankerne under modellering af data i Cassandra.

  1. Maksimer antallet af skrivninger

    I Cassandra er skrivning meget billig. Cassandra er optimeret til høj skriveydelse. Så prøv at maksimere dine skriv for bedre læsepræstation og datatilgængelighed. Der er en kompromis mellem dataskrivning og læsning af data. Så optimer din datalæseydelse ved at maksimere antallet af dataskrivninger.

  2. Maksimer dataduplikering

    Data denormalisering og data duplikering er defacto af Cassandra. Diskplads er ikke dyrere end hukommelse, CPU-behandling og IO-drift. Da Cassandra er en distribueret database, giver dataoverførsel øjeblikkelig datatilgængelighed og intet enkelt fejlpunkt.

Datamodelleringsmål

Du skal have følgende mål, mens du modellerer data i Cassandra.

  1. Spred data jævnt rundt om klyngen

    Du vil have en lige mængde data på hver node i Cassandra-klyngen. 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.

  2. Minimer antallet af læste partitioner under forespørgsel på data

    Partition er en gruppe poster med den samme partitionsnøgle. Når læseforespørgslen udstedes, 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 gemme den enorme mængde data på den enkelte partition. Den enkelte partition bliver langsommere.

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

God primærnøgle

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

Her er bordet MusicPlaylist.

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

I ovenstående eksempel, MusicPlaylist-tabel,

  • Songid er partitionsnøglen, og
  • SongName er klyngekolonnen
  • Data klynges på basis af SongName. Der oprettes kun en partition 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ære nø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, MusicPlaylist-tabel,

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

Vores datahentning sker hurtigt ved hjælp af denne datamodel.

Model dine data i Cassandra

Følgende ting skal huskes, mens du modellerer dine forespørgsler.

  1. Bestem, hvilke forespørgsler du vil støtte
  2. Først og fremmest skal du bestemme, hvilke forespørgsler du vil have.

    Har du f.eks. Brug for?

    • Tilslutter sig
    • Gruppér efter
    • Filtrering på hvilken søjle osv.
  3. Opret tabel i henhold til dine forespørgsler

    Opret tabel i henhold til dine forespørgsler. Opret en tabel, der tilfredsstiller 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 et forhold

Et til et forhold betyder, at to tabeller har en til en korrespondance. For eksempel kan den studerende kun registrere et kursus, og jeg ønsker at søge på en studerende, i hvilket kursus en bestemt studerende er registreret.

Så i dette tilfælde skal dit bordskema omfatte alle detaljerne i den studerende svarende til det pågældende kursus som navnet på kurset, rull nr. På den studerende, studentens navn osv.

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

Håndtering af en til mange relationer

Et til mange forhold betyder at have en til mange korrespondance mellem to tabeller.

For eksempel kan et kursus studeres af mange studerende. Jeg vil søge i alle de studerende, der studerer et bestemt kursus.

Så ved at stille spørgsmål til kursusnavn, vil jeg have mange studerende navne, der vil studere et bestemt kursus.

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

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

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

Håndtering af mange til mange forhold

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

For eksempel kan et kursus studeres af mange studerende, og en studerende kan også studere mange kurser.

Jeg vil søge i 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. opdele problemet i to tilfælde.

Først opretter jeg 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 kurserne fra 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 på et bestemt kursus ved hjælp af følgende forespørgsel.

Select * from Course_Student where Course_name=CourseName;

Forskel mellem RDBMS og Cassandra Data Modeling

RDBMS

Cassandra

Gemmer data i normaliseret form

Gemmer data i denormaliseret form

Ældre dbms; strukturerede data

Bred række butik, 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 vi skulle håndtere dem.