Cassandra Datamodell med enkelt databasexempel
Även Cassandra frågespråk liknar med SQL språk, är deras datamodelleringsmetoder helt olika.
In Cassandra, kan en dålig datamodell försämra prestandan, särskilt när användare försöker implementera RDBMS-koncepten på Cassandra. Det är bäst att tänka på några regler som beskrivs nedan.
Cassandra Datamodellregler
In Cassandra, skriver är inte dyra. Cassandra stöder inte joins, group by, OR-klausul, aggregering etc. Så du måste lagra dina data på ett sådant sätt att de ska vara helt återtagbara. Så dessa regler måste hållas i åtanke när data modelleras in Cassandra.
Maximera antalet skrivningar
In Cassandra, skriver är mycket billiga. Cassandra är optimerad för hög skrivprestanda. Så försök att maximera dina skrivningar för bättre läsprestanda och datatillgänglighet. Det finns en avvägning mellan dataskrivning och dataläsning. Så, optimera din dataläsningsprestanda genom att maximera antalet dataskrivningar.
Maximera dataduplicering
Datadenormalisering och dataduplicering är defacto of Cassandra. Diskutrymme är inte dyrare än minne, CPU-bearbetning och IO-drift. Som Cassandra är en distribuerad databas, så dataduplicering ger omedelbar datatillgänglighet och ingen enskild felpunkt.
Cassandra Datamodelleringsmål
Du bör ha följande mål när du modellerar in data Cassandra:
Sprid data jämnt runt Cluster
Du vill ha lika mycket data på varje nod av Cassandra Cluster. Data sprids till olika noder baserat på partitionsnycklar som är den första delen av primärnyckeln. Så försök att välja heltal som en primärnyckel för att sprida data jämnt runt klustret.
Minimera antalet partitioner som läses när du frågar efter data
Partition är en grupp poster med samma partitionsnyckel. När läsfrågan utfärdas samlar den in data från olika noder från olika partitioner.
Om det kommer att finnas många partitioner, måste alla dessa partitioner besökas för att samla in frågedata.
Det betyder inte att partitioner inte ska skapas. Om din data är mycket stor kan du inte behålla den stora mängden data på den enda partitionen. Den enskilda partitionen kommer att saktas ner.
Så försök att välja ett balanserat antal partitioner.
Bra primär nyckel in Cassandra
Låt oss ta ett exempel och hitta vilken primärnyckel som är bra.
Här är tabellen MusicPlaylist.
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key(SongId, SongName) );
I exemplet ovan, tabellen MusicPlaylist,
- Songid är partitionsnyckeln, och
- SongName är klustringskolumnen
- Data kommer att klustras på basis av SongName. Endast en partition kommer att skapas med SongId. Det kommer inte att finnas någon annan partition i tabellen MusicPlaylist.
Datainhämtningen kommer att gå långsamt av denna datamodell på grund av den dåliga primärnyckeln.
Här är en annan tabell MusicPlaylist.
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key((SongId, Year), SongName) );
I exemplet ovan, tabellen MusicPlaylist,
- Songid och Year är partitionsnyckeln, och
- SongName är klustringskolumnen.
- Data kommer att klustras på basis av SongName. I den här tabellen kommer en ny partition att skapas varje år. Alla årets låtar kommer att vara på samma nod. Denna primära nyckel kommer att vara mycket användbar för data.
Vår datahämtning kommer att gå snabbt med denna datamodell.
Modellera dina data i Cassandra
Följande saker bör tänkas på när du modellerar dina frågor:
Bestäm vilka frågor du vill stödja
Bestäm först och främst vilka frågor du vill ha.
Behöver du till exempel?
- Fogar
- Grupp av
- Filtrera på vilken kolumn osv.
Skapa tabell enligt dina frågor
Skapa tabell enligt dina frågor. Skapa en tabell som kommer att tillfredsställa dina frågor. Försök att skapa en tabell på ett sådant sätt att ett minimum antal partitioner behöver läsas.
Hantera ett till ett förhållande i Cassandra
En till en relation betyder att två tabeller har en till en korrespondens. Studenten kan till exempel bara registrera en kurs, och jag vill söka på en student som i vilken kurs en viss student är registrerad i.
Så i det här fallet bör ditt tabellschema omfatta alla detaljer om studenten som motsvarar den specifika kursen som kursens namn, elevens rollnummer, studentnamn, etc.
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
Hantera ett till många förhållande i Cassandra
En till många relationer innebär att ha en till många överensstämmelse mellan två tabeller.
Till exempel kan en kurs läsas av många studenter. Jag vill söka efter alla studenter som läser en viss kurs.
Så genom att fråga efter kursnamn kommer jag att ha många studentnamn som kommer att studera en viss kurs.
Create table Student_Course ( Student_rollno int, Student_name text, Course_name text, );
Jag kan hämta alla elever för en viss kurs genom följande fråga.
Select * from Student_Course where Course_name='Course Name';
Hantera många till många relationer i Cassandra
Många till många relationer innebär att ha många till många korrespondens mellan två tabeller.
Till exempel kan en kurs läsas av många studenter, och en student kan också läsa många kurser.
Jag vill söka efter alla studenter som läser en viss kurs. Jag vill också söka igenom hela kursen som en viss student läser.
Så i det här fallet kommer jag att ha två tabeller dvs dela upp problemet i två fall.
Först kommer jag att skapa en tabell där du kan hitta kurser av en viss student.
Create table Student_Course ( Student_rollno int primary key, Student_name text, Course_name text, );
Jag kan hitta alla kurser av en viss student genom följande fråga.
Select * from Student_Course where student_rollno=rollno;
För det andra kommer jag att skapa en tabell där du kan se hur många studenter som läser en viss kurs.
Create table Course_Student ( Course_name text primary key, Student_name text, student_rollno int );
Jag kan hitta en student i en viss kurs genom följande fråga.
Select * from Course_Student where Course_name=CourseName;
Skillnaden mellan RDBMS och Cassandra Datamodellering
RDBMS | Cassandra |
---|---|
Lagrar data i normaliserad form | Lagrar data i denormaliserad form |
Äldre dbms; strukturerad data | Bred rad butik, Dynamisk; strukturerad och ostrukturerad data |
Sammanfattning
- Datamodellering i Cassandra är annorlunda än andra RDBMS-databaser.
- Cassandra datamodellering har vissa regler. Dessa regler måste följas för bra datamodellering. Förutom dessa regler såg vi tre olika datamodelleringsfall och hur man hanterar dem.
- En till en relation betyder att två tabeller har en till en korrespondens.
- En till många relationer innebär att ha en till många överensstämmelse mellan två tabeller.
- Många till många relationer innebär att ha många till många korrespondens mellan två tabeller.