Cassandra-gegevensmodel met eenvoudig voorbeeld

Inhoudsopgave:

Anonim

Hoewel Cassandra-querytaal lijkt op SQL-taal, zijn hun methoden voor gegevensmodellering totaal verschillend.

In Cassandra kan een slecht datamodel de prestaties verminderen, vooral wanneer gebruikers de RDBMS-concepten op Cassandra proberen te implementeren. Het is het beste om enkele onderstaande regels in gedachten te houden.

In deze tutorial leer je-

  • Cassandra-gegevensmodelregels
  • Modelleer uw gegevens in Cassandra
  • Omgaan met één-op-één-relatie
  • Omgaan met een tot veel relaties
  • Omgaan met veel tot veel relaties

Cassandra-gegevensmodelregels

In Cassandra zijn schrijven niet duur. Cassandra ondersteunt geen joins, group by, OR-clausule, aggregaties, etc. Je moet je gegevens dus zo opslaan dat ze volledig opvraagbaar moeten zijn. Dus deze regels moeten in gedachten worden gehouden bij het modelleren van gegevens in Cassandra.

  1. Maximaliseer het aantal schrijfbewerkingen

    In Cassandra is schrijven erg goedkoop. Cassandra is geoptimaliseerd voor hoge schrijfprestaties. Dus probeer uw schrijfacties te maximaliseren voor betere leesprestaties en beschikbaarheid van gegevens. Er is een afweging tussen het schrijven van gegevens en het lezen van gegevens. Optimaliseer dus uw gegevensleesprestaties door het aantal schrijfbewerkingen te maximaliseren.

  2. Maximaliseer gegevensduplicatie

    Data denormalisatie en data duplicatie zijn defacto van Cassandra. Schijfruimte is niet duurder dan geheugen, CPU-verwerking en IO-werking. Omdat Cassandra een gedistribueerde database is, biedt gegevensduplicatie directe gegevensbeschikbaarheid en geen enkel storingspunt.

Doelen voor datamodellering

U zou volgende doelen moeten hebben bij het modelleren van gegevens in Cassandra.

  1. Verspreid gegevens gelijkmatig over het cluster

    U wilt een gelijke hoeveelheid gegevens op elk knooppunt van de Cassandra-cluster. Gegevens worden over verschillende knooppunten verspreid op basis van partitiesleutels die het eerste deel van de primaire sleutel vormen. Probeer dus gehele getallen te kiezen als primaire sleutel om gegevens gelijkmatig over het cluster te verdelen.

  2. Minimaliseer het aantal gelezen partities tijdens het opvragen van gegevens

    Partities zijn een groep records met dezelfde partitiesleutel. Wanneer de leesquery wordt verzonden, verzamelt deze gegevens van verschillende knooppunten van verschillende partities.

    Als er veel partities zijn, moeten al deze partities worden bezocht om de querygegevens te verzamelen.

    Het betekent niet dat er geen partities moeten worden gemaakt. Als uw gegevens erg groot zijn, kunt u die enorme hoeveelheid gegevens niet op één partitie bewaren. De enkele partitie wordt vertraagd.

    Probeer dus een uitgebalanceerd aantal partities te kiezen.

Goede primaire sleutel

Laten we een voorbeeld nemen en kijken welke primaire sleutel goed is.

Hier is de tabel MusicPlaylist.

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

In het bovenstaande voorbeeld, tabel MusicPlaylist,

  • Songid is de partitiesleutel, en
  • SongName is de clusterkolom
  • Gegevens worden geclusterd op basis van SongName. Er wordt slechts één partitie gemaakt met de SongId. Er zal geen andere partitie in de tabel MusicPlaylist staan.

Het ophalen van gegevens zal traag zijn door dit gegevensmodel vanwege de slechte primaire sleutel.

Hier is nog een tafel MusicPlaylist.

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

In het bovenstaande voorbeeld, tabel MusicPlaylist,

  • Songid en Year zijn de partitiesleutel, en
  • SongName is de clusterkolom.
  • Gegevens worden geclusterd op basis van SongName. In deze tabel wordt elk jaar een nieuwe partitie aangemaakt. Alle nummers van het jaar staan ​​op hetzelfde knooppunt. Deze primaire sleutel is erg handig voor de gegevens.

Het opvragen van onze gegevens zal snel gaan door dit gegevensmodel.

Modelleer uw gegevens in Cassandra

De volgende zaken moeten in gedachten worden gehouden bij het modelleren van uw vragen.

  1. Bepaal welke vragen u wilt ondersteunen
  2. Bepaal allereerst welke vragen u wilt.

    Heeft u bijvoorbeeld nodig?

    • Doet mee
    • Groeperen op
    • Filteren op welke kolom etc.
  3. Maak een tabel op basis van uw vragen

    Maak een tabel op basis van uw vragen. Maak een tabel die aan uw vragen voldoet. Probeer een tabel zo te maken dat er een minimum aantal partities moet worden gelezen.

Omgaan met één-op-één-relatie

Een-op-een-relatie betekent dat twee tabellen een-op-een-overeenkomst hebben. De student kan bijvoorbeeld maar één cursus registreren en ik wil op een student zoeken naar dat vak waarin een bepaalde student is geregistreerd.

Dus in dit geval moet je tabelschema alle details van de student omvatten die overeenkomen met die specifieke cursus, zoals de naam van de cursus, het rolnummer van de student, de naam van de student, enz.

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

Omgaan met een tot veel relaties

Een-op-veel-relaties betekent een-op-veel-correspondentie tussen twee tabellen.

Een cursus kan bijvoorbeeld door veel studenten worden gevolgd. Ik wil alle studenten zoeken die een bepaalde cursus volgen.

Dus door op cursusnaam te vragen, zal ik veel studentennamen hebben die een bepaalde cursus zullen bestuderen.

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

Ik kan alle studenten voor een bepaalde cursus terugvinden met de volgende zoekopdracht.

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

Omgaan met veel tot veel relaties

Veel-tot-veel-relaties betekent veel-tot-veel-overeenkomsten tussen twee tabellen.

Een cursus kan bijvoorbeeld door veel studenten worden gevolgd en een student kan ook veel cursussen volgen.

Ik wil alle studenten zoeken die een bepaalde cursus volgen. Ik wil ook de hele cursus doorzoeken die een bepaalde student studeert.

Dus in dit geval heb ik twee tabellen, dwz verdeel het probleem in twee gevallen.

Eerst zal ik een tabel maken waaraan u cursussen van een bepaalde student kunt vinden.

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

Ik kan alle cursussen van een bepaalde student vinden met de volgende zoekopdracht. ​

Select * from Student_Course where student_rollno=rollno;

Ten tweede zal ik een tabel maken waaraan u kunt zien hoeveel studenten een bepaalde cursus volgen.

Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);

Ik kan een student in een bepaalde cursus vinden met de volgende zoekopdracht.

Select * from Course_Student where Course_name=CourseName;

Verschil tussen RDBMS en Cassandra Data Modeling

RDBMS

Cassandra

Slaat gegevens op in genormaliseerde vorm

Slaat gegevens op in gedenormaliseerde vorm

Oude dbms; gestructureerde gegevens

Brede winkel, Dynamic; gestructureerde en ongestructureerde gegevens

Overzicht

Datamodellering in Cassandra is anders dan in andere RDBMS-databases. Cassandra-datamodellering heeft enkele regels. Deze regels moeten worden gevolgd voor een goede datamodellering. Naast deze regels hebben we drie verschillende gevallen van datamodellering gezien en hoe daarmee om te gaan.