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á.
- 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.
- 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.
- 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.
- 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.
- Zistite, ktoré dotazy chcete podporiť
- Pripája sa
- Zoskupiť podľa
- Filtrovanie, na ktorom stĺpci atď.
- 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.
Najskôr si určte, aké dotazy chcete.
Potrebujete napríklad?
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.