Dátový model Cassandra s jednoduchým príkladom

Obsah:

Anonim

Aj keď sa dopytovací jazyk Cassandra podobá na jazyk SQL, ich metódy modelovania údajov sú úplne odlišné.

V Cassandre môže zlý dátový model znížiť výkon, najmä keď sa používatelia pokúšajú implementovať koncepty RDBMS na Cassandre. Najlepšie je mať na pamäti niekoľko pravidiel podrobne uvedených nižšie.

V tomto návode sa naučíte

  • Pravidlá dátového modelu Cassandra
  • Vymodelujte svoje údaje v Cassandre
  • Riešenie vzťahu jeden na jedného
  • Riešenie jedného až mnohých vzťahov
  • Riešenie vzťahov medzi mnohými

Pravidlá dátového modelu Cassandra

V Cassandre nie sú zápisy drahé. Cassandra nepodporuje spojenia, zoskupovanie, klauzulu OR, agregácie atď. Vaše údaje teda musíte ukladať tak, aby ich bolo možné úplne vyhľadať. Pri modelovaní údajov v Cassandre je teda potrebné mať na pamäti tieto pravidlá.

  1. Maximalizujte počet zápisov

    V Cassandre sú zápisy veľmi lacné. Cassandra je optimalizovaná pre vysoký výkon zápisu. Snažte sa preto maximalizovať svoje zápisy, aby ste dosiahli lepší výkon čítania a dostupnosť údajov. Medzi zápisom a čítaním údajov existuje kompromis. Optimalizujte tak výkon čítania údajov maximalizáciou počtu zápisov údajov.

  2. Maximalizujte duplikáciu údajov

    Denormalizácia dát a duplikácia dát sú defacto Cassandry. Miesto na disku nie je nákladnejšie ako pamäť, spracovanie procesora a prevádzka vstupov a výstupov. Pretože Cassandra je distribuovaná databáza, duplikácia údajov poskytuje okamžitú dostupnosť údajov a jediný bod zlyhania.

Ciele modelovania údajov

Pri modelovaní údajov v Cassandre by ste mali mať nasledujúce ciele.

  1. Rovnomerne šírite údaje po celom klastri

    Chcete rovnaké množstvo údajov o každom uzle klastra Cassandra. Dáta sa šíria do rôznych uzlov na základe kľúčov oddielov, ktoré sú prvou časťou primárneho kľúča. Skúste teda zvoliť celé čísla ako primárny kľúč na rovnomerné rozloženie údajov po klastri.

  2. Minimalizujte počet načítaných oddielov pri vyhľadávaní údajov

    Oddiel je skupina záznamov s rovnakým kľúčom oddielu. Po zadaní prečítaného dopytu zhromažďuje údaje z rôznych uzlov z rôznych oddielov.

    Ak bude veľa oddielov, potom je potrebné všetky tieto oddiely navštíviť, aby ste mohli zhromaždiť údaje dotazu.

    Neznamená to, že by sa nemali vytvárať oddiely. Ak sú vaše dáta veľmi veľké, nemôžete uchovať to obrovské množstvo dát na jednom oddiele. Jeden oddiel sa spomalí.

    Skúste teda zvoliť vyvážený počet oddielov.

Dobrý primárny kľúč

Zoberme si príklad a zistime, ktorý primárny kľúč je dobrý.

Tu je tabuľka MusicPlaylist.

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

Vo vyššie uvedenom príklade je tabuľka MusicPlaylist,

  • Songid je kľúč oddielu a
  • SongName je klastrový stĺpec
  • Údaje budú zoskupené na základe názvu skladby. S SongId bude vytvorený iba jeden oddiel. V tabuľke MusicPlaylist nebude žiadny ďalší oddiel.

Získavanie údajov bude tento dátový model z dôvodu nesprávneho primárneho kľúča pomalé.

Tu je ďalší hudobný zoznam.

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

Vo vyššie uvedenom príklade je tabuľka MusicPlaylist,

  • Songid a Year sú kľúčom oddielu a
  • SongName je klastrový stĺpec.
  • Údaje budú zoskupené na základe názvu skladby. V tejto tabuľke sa každý rok vytvorí nový oddiel. Všetky skladby roka budú na rovnakom uzle. Tento primárny kľúč bude pre dáta veľmi užitočný.

Naše dátové modely budú naše vyhľadávanie dát rýchle.

Vymodelujte svoje údaje v Cassandre

Pri modelovaní vašich otázok by ste mali mať na pamäti nasledujúce veci.

  1. Zistite, ktoré dotazy chcete podporiť
  2. Najskôr si určte, aké dotazy chcete.

    Potrebujete napríklad?

    • Pripája sa
    • Zoskupiť podľa
    • Filtrovanie, na ktorom stĺpci atď.
  3. Vytvorte tabuľku podľa vašich dotazov

    Vytvorte tabuľku podľa vašich dotazov. Vytvorte tabuľku, ktorá uspokojí vaše dotazy. Pokúste sa vytvoriť tabuľku takým spôsobom, že je potrebné prečítať minimálny počet oddielov.

Riešenie vzťahu jeden na jedného

Vzťah jedna k jednej znamená, že dve tabuľky majú korešpondenciu jedna k jednej. Napríklad študent si môže zaregistrovať iba jeden kurz a chcem vyhľadať študenta, v ktorom kurze je konkrétny študent zaregistrovaný.

V takom prípade by preto vaša tabuľková schéma mala obsahovať všetky podrobnosti študenta zodpovedajúce konkrétnemu kurzu, ako je napríklad názov kurzu, číslo študenta, meno študenta atď.

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

Riešenie jedného až mnohých vzťahov

Jeden k mnohým vzťahom znamená mať jednu až veľa korešpondencie medzi dvoma tabuľkami.

Napríklad kurz môže študovať veľa študentov. Chcem prehľadať všetkých študentov, ktorí študujú konkrétny kurz.

Takže dotazom na názov kurzu budem mať veľa mien študentov, ktorí budú študovať konkrétny kurz.

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

Nasledujúcim dotazom môžem získať všetkých študentov pre konkrétny kurz.

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

Riešenie vzťahov medzi mnohými

Mnoho až veľa vzťahov znamená mať veľa a veľa korešpondencie medzi dvoma tabuľkami.

Napríklad kurz môže študovať veľa študentov a študent môže študovať aj veľa kurzov.

Chcem prehľadať všetkých študentov, ktorí študujú konkrétny kurz. Tiež by som chcel prehľadať celý kurz, ktorý konkrétny študent študuje.

Takže v tomto prípade budem mať dve tabuľky, tj rozdeliť problém na dva prípady.

Najskôr vytvorím tabuľku, pomocou ktorej nájdete kurzy konkrétneho študenta.

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

Nasledujúcim dotazom nájdem všetky kurzy od konkrétneho študenta. ->

Select * from Student_Course where student_rollno=rollno;

Po druhé, vytvorím tabuľku, pomocou ktorej nájdete, koľko študentov študuje konkrétny kurz.

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

Nasledujúcim dotazom nájdem študenta v konkrétnom kurze.

Select * from Course_Student where Course_name=CourseName;

Rozdiel medzi dátovými modelmi RDBMS a Cassandra

RDBMS

Cassandra

Ukladá údaje v normalizovanej podobe

Ukladá údaje v denormalizovanej podobe

Staršie dbms; štruktúrované údaje

Široký radový obchod, Dynamic; štruktúrované a neštruktúrované údaje

Zhrnutie

Dátové modelovanie v Cassandre sa líši od iných databáz RDBMS. Dátové modelovanie Cassandry má určité pravidlá. Tieto pravidlá sa musia dodržiavať pri dobrom modelovaní údajov. Okrem týchto pravidiel sme videli tri rôzne prípady modelovania údajov a spôsob riešenia týchto problémov.