Cassandra datamodell med enkelt exempel

Innehållsförteckning:

Anonim

Ä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.

  1. 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.

  2. 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.

  1. 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.

  2. 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.

  1. Bestäm vilka frågor du vill stödja
  2. Först och främst, bestäm vilka frågor du vill ha.

    Behöver du till exempel?

    • Går med
    • Grupp av
    • Filtrering på vilken kolumn etc.
  3. 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.

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.