Även om Cassandra-frågespråk liknar SQL-språk är deras datamodelleringsmetoder helt olika.
I Cassandra kan en dålig datamodell försämra prestanda, särskilt när användare försöker implementera RDBMS-koncepten på Cassandra. Det är bäst att komma ihåg några regler som beskrivs nedan.
I den här handledningen lär du dig-
- Cassandra datamodellregler
- Modellera dina data i Cassandra
- Hantera en till en relation
- Hantera en till många relationer
- Hantering av många till många förhållanden
Cassandra datamodellregler
I Cassandra är skrivningar inte dyra. Cassandra stöder inte sammanfogningar, gruppera efter, ELLER klausuler, aggregeringar osv. Så du måste lagra dina data på ett sådant sätt att de ska kunna hämtas helt. Så dessa regler måste hållas i åtanke när du modellerar data i Cassandra.
- Maximera antalet skrivningar
I Cassandra är skrivningar 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 dataskrifter.
- Maximera dataduplicering
Datanormalisering och duplicering av data är defacto för Cassandra. Diskutrymme är inte dyrare än minne, CPU-bearbetning och IO-drift. Eftersom Cassandra är en distribuerad databas så ger dataduplicering omedelbar datatillgänglighet och ingen enda felpunkt.
Datamodelleringsmål
Du bör ha följande mål när du modellerar data i Cassandra.
- Sprid data jämnt runt klustret
Du vill ha lika mycket data på varje nod i Cassandra-klustret. 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är nyckel för att sprida data jämnt runt klustret.
- Minimera antalet lästa partitioner medan 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 dina data är mycket stora kan du inte behålla den enorma mängden data på den enda partitionen. Den enda partitionen kommer att sakta ner.
Så försök att välja ett balanserat antal partitioner.
Bra primär nyckel
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, tabell MusicPlaylist,
- Songid är partitionsnyckeln och
- SongName är klustringskolumnen
- Data kommer att grupperas på grundval av SongName. Endast en partition skapas med SongId. Det kommer inte finnas någon annan partition i tabellen MusicPlaylist.
Datahämtningen kommer att ske långsamt av denna datamodell på grund av den dåliga primära nyckeln.
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, tabell MusicPlaylist,
- Songid och Year är partitionsnyckeln, och
- SongName är klustringskolumnen.
- Data kommer att grupperas på grundval av SongName. I den här tabellen skapas varje år en ny partition. 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 ske snabbt av denna datamodell.
Modellera dina data i Cassandra
Följande saker bör komma ihåg när du modellerar dina frågor.
- Bestäm vilka frågor du vill stödja
- Går med
- Grupp av
- Filtrering på vilken kolumn etc.
- Skapa tabell enligt dina frågor
Skapa tabell enligt dina frågor. Skapa en tabell som uppfyller dina frågor. Försök att skapa en tabell på ett sådant sätt att ett minimum antal partitioner måste läsas.
Först och främst, bestäm vilka frågor du vill ha.
Behöver du till exempel?
Hantera en till en relation
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 i vilken kurs en viss student är registrerad.
Så i det här fallet bör ditt tabellschema omfatta alla detaljer om studenten som motsvarar den specifika kursen, som namnet på kursen, rullar ingen av studenten, studentens namn etc.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Hantera en till många relationer
En till många relationer innebär att ha en till många korrespondens mellan två tabeller.
En kurs kan till exempel studeras av många studenter. Jag vill söka bland alla studenter som studerar en viss kurs.
Så genom att fråga om 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 studenter för en viss kurs genom följande fråga.
Select * from Student_Course where Course_name='Course Name';
Hantering av många till många förhållanden
Många till många relationer innebär att man har många till många korrespondenser mellan två tabeller.
Till exempel kan en kurs studeras av många studenter, och en student kan också studera många kurser.
Jag vill söka i alla studenter som studerar en viss kurs. Jag vill också söka igenom hela kursen som en viss student studerar.
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 ska jag skapa en tabell där du kan hitta hur många studenter som studerar 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;
Skillnad mellan RDBMS och Cassandra Data Modeling
RDBMS |
Cassandra |
Lagrar data i normaliserad form |
Lagrar data i denormaliserad form |
Äldre dbms; strukturerade data |
Bred radbutik, dynamisk; strukturerad och ostrukturerad data |
Sammanfattning
Datamodellering i Cassandra skiljer sig från andra RDBMS-databaser. Cassandra datamodellering har vissa regler. Dessa regler måste följas för god datamodellering. Förutom dessa regler såg vi tre olika datamodelleringsfall och hur man hanterar dem.