Cassandra Datamodell med enkelt databaseeksempel
Selv Cassandra spørrespråk ligner med SQL språk, er deres datamodelleringsmetoder helt forskjellige.
In Cassandra, kan en dårlig datamodell forringe ytelsen, spesielt når brukere prøver å implementere RDBMS-konseptene på Cassandra. Det er best å huske på noen regler beskrevet nedenfor.
Cassandra Datamodellregler
In Cassandra, skriver er ikke dyre. Cassandra støtter ikke joins, group by, OR-klausul, aggregeringer osv. Så du må lagre dataene dine på en slik måte at de skal være fullstendig gjenfinnbare. Så disse reglene må huskes når du modellerer data Cassandra.
Maksimer antall skrivinger
In Cassandra, skriver er veldig billig. Cassandra er optimert for høy skriveytelse. Så prøv å maksimere skrivingene dine for bedre leseytelse og datatilgjengelighet. Det er en avveining mellom dataskriving og datalesing. Så optimaliser ytelsen for datalesing ved å maksimere antallet dataskrivinger.
Maksimer dataduplisering
Datadenormalisering og dataduplisering er defacto of Cassandra. Diskplass er ikke dyrere enn minne, CPU-behandling og IO-drift. Som Cassandra er en distribuert database, så dataduplisering gir umiddelbar datatilgjengelighet og ikke noe enkelt punkt for feil.
Cassandra Mål for datamodellering
Du bør ha følgende mål mens du modellerer data Cassandra:
Spre data jevnt rundt Cluster
Du vil ha en lik mengde data på hver node av Cassandra Cluster. Data spres til forskjellige noder basert på partisjonsnøkler som er den første delen av primærnøkkelen. Så prøv å velge heltall som en primærnøkkel for å spre data jevnt rundt klyngen.
Minimer antall partisjoner som leses mens du spør etter data
Partisjon er en gruppe poster med samme partisjonsnøkkel. Når lesespørringen utstedes, samler den inn data fra forskjellige noder fra forskjellige partisjoner.
Hvis det vil være mange partisjoner, må alle disse partisjonene besøkes for å samle inn spørringsdataene.
Det betyr ikke at partisjoner ikke skal opprettes. Hvis dataene dine er veldig store, kan du ikke beholde den enorme mengden data på den enkelte partisjonen. Enkeltpartisjonen vil bli bremset.
Så prøv å velge et balansert antall partisjoner.
God primærnøkkel inn Cassandra
La oss ta et eksempel og finne hvilken primærnøkkel som er bra.
Her er tabellen MusicPlaylist.
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key(SongId, SongName) );
I eksemplet ovenfor, tabellen MusicPlaylist,
- Songid er partisjonsnøkkelen, og
- SongName er klyngekolonnen
- Data vil bli gruppert på grunnlag av SongName. Bare én partisjon vil bli opprettet med SongId. Det vil ikke være noen annen partisjon i tabellen MusicPlaylist.
Datainnhentingen vil gå tregt av denne datamodellen på grunn av den dårlige primærnøkkelen.
Her er en annen tabell MusicPlaylist.
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key((SongId, Year), SongName) );
I eksemplet ovenfor, tabellen MusicPlaylist,
- Songid og Year er partisjonsnøkkelen, og
- SongName er klyngekolonnen.
- Data vil bli gruppert på grunnlag av SongName. I denne tabellen vil det bli opprettet en ny partisjon hvert år. Alle årets sanger vil være på samme node. Denne primærnøkkelen vil være svært nyttig for dataene.
Datainnhentingen vår vil være rask med denne datamodellen.
Modeller dataene dine inn Cassandra
Følgende ting bør huskes når du modellerer søkene dine:
Bestem hvilke spørsmål du vil støtte
Først av alt, bestemme hvilke søk du vil ha.
Trenger du for eksempel?
- tiltrer
- Gruppe av
- Filtrering på hvilken kolonne osv.
Lag tabell i henhold til dine spørsmål
Lag tabell i henhold til dine spørsmål. Lag en tabell som vil tilfredsstille dine spørsmål. Prøv å lage en tabell på en slik måte at et minimum antall partisjoner må leses.
Håndtere ett til ett forhold i Cassandra
En til en relasjon betyr at to tabeller har en til en korrespondanse. For eksempel kan studenten registrere kun ett emne, og jeg ønsker å søke på en student som i hvilket emne en bestemt student er registrert i.
Så i dette tilfellet bør tabellskjemaet ditt omfatte alle detaljene til studenten i samsvar med det aktuelle kurset, som navnet på kurset, rullenummeret til studenten, studentnavnet osv.
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
Håndtere ett til mange forhold i Cassandra
En til mange relasjoner betyr å ha en til mange korrespondanse mellom to tabeller.
For eksempel kan et emne studeres av mange studenter. Jeg vil søke etter alle studentene som studerer et bestemt emne.
Så ved å spørre på emnenavn, vil jeg ha mange studentnavn som skal studere et bestemt emne.
Create table Student_Course ( Student_rollno int, Student_name text, Course_name text, );
Jeg kan hente alle studentene for et bestemt kurs ved å bruke følgende spørring.
Select * from Student_Course where Course_name='Course Name';
Håndtere mange til mange forhold i Cassandra
Mange til mange relasjoner betyr å ha mange til mange korrespondanse mellom to tabeller.
For eksempel kan et emne studeres av mange studenter, og en student kan også studere mange emner.
Jeg vil søke etter alle studentene som studerer et bestemt emne. Jeg ønsker også å søke i hele kurset som en bestemt student studerer.
Så i dette tilfellet vil jeg ha to tabeller, dvs. dele opp problemet i to tilfeller.
Først vil jeg lage en tabell der du kan finne kurs av en bestemt student.
Create table Student_Course ( Student_rollno int primary key, Student_name text, Course_name text, );
Jeg kan finne alle kursene til en bestemt student ved å følge spørsmålet nedenfor.
Select * from Student_Course where student_rollno=rollno;
For det andre vil jeg lage en tabell der du kan finne hvor mange studenter som studerer et bestemt kurs.
Create table Course_Student ( Course_name text primary key, Student_name text, student_rollno int );
Jeg kan finne en student i et bestemt kurs ved å følge spørsmålet nedenfor.
Select * from Course_Student where Course_name=CourseName;
Forskjellen mellom RDBMS og Cassandra Datamodellering
RDBMS | Cassandra |
---|---|
Lagrer data i normalisert form | Lagrer data i denormalisert form |
Legacy dbms; strukturerte data | Store rekker, Dynamisk; strukturerte og ustrukturerte data |
Sammendrag
- Datamodellering i Cassandra er annerledes enn andre RDBMS databaser.
- Cassandra datamodellering har noen regler. Disse reglene må følges for god datamodellering. I tillegg til disse reglene, så vi tre forskjellige datamodelleringssaker og hvordan vi skal håndtere dem.
- En til en relasjon betyr at to tabeller har en til en korrespondanse.
- En til mange relasjoner betyr å ha en til mange korrespondanse mellom to tabeller.
- Mange til mange relasjoner betyr å ha mange til mange korrespondanse mellom to tabeller.