Cassandra Příklad datového modelu s jednoduchou databází

Ačkoli Cassandra dotazovací jazyk se podobá s SQL jejich metody modelování dat jsou zcela odlišné.

In Cassandra, může špatný datový model snížit výkon, zvláště když se uživatelé snaží implementovat koncepty RDBMS Cassandra. Nejlepší je mít na paměti několik níže uvedených pravidel.

Cassandra Pravidla datového modelu

In Cassandra, zápisy nejsou drahé. Cassandra nepodporuje spojení, seskupení podle, klauzuli OR, agregace atd. Takže musíte svá data ukládat tak, aby je bylo možné zcela získat. Tato pravidla je tedy třeba mít na paměti při modelování dat Cassandra.

Maximalizujte počet zápisů

In Cassandra, píše jsou velmi levné. Cassandra je optimalizován pro vysoký výkon zápisu. Zkuste tedy maximalizovat své zápisy pro lepší výkon při čtení a dostupnost dat. Mezi zápisem dat a čtením dat existuje kompromis. Optimalizujte tedy výkon čtení dat maximalizací počtu zápisů dat.

Maximalizujte duplikaci dat

Denormalizace dat a duplikace dat jsou defacto Cassandra. Místo na disku není dražší než paměť, zpracování CPU a provoz IO. Jak Cassandra je distribuovaná databáze, takže duplikace dat poskytuje okamžitou dostupnost dat a žádný jediný bod selhání.

Cassandra Cíle datového modelování

Při modelování dat byste měli mít následující cíle Cassandra:

Rozložte data rovnoměrně kolem Cluster

Chcete stejné množství dat na každém uzlu Cassandra Cluster. Data se šíří do různých uzlů na základě klíčů oddílu, který je první částí primárního klíče. Zkuste tedy zvolit celá čísla jako primární klíč pro rovnoměrné šíření dat po clusteru.

Minimalizujte počet oddílů čtených při dotazování na data

Oddíl je skupina záznamů se stejným klíčem oddílu. Když je zadán dotaz na čtení, shromažďuje data z různých uzlů z různých oddílů.

Pokud bude oddílů mnoho, je třeba navštívit všechny tyto oddíly, aby bylo možné shromáždit data dotazu.

Neznamená to, že by se oddíly neměly vytvářet. Pokud jsou vaše data velmi velká, nemůžete mít takové množství dat na jediném oddílu. Jediný oddíl bude zpomalen.

Zkuste tedy zvolit vyvážený počet oddílů.

Dobrý primární klíč Cassandra

Vezměme si příklad a zjistíme, který primární klíč je dobrý.

Zde je tabulka MusicPlaylist.

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

Ve výše uvedeném příkladu tabulka MusicPlaylist,

  • Songid je klíč oddílu a
  • Název skladby je sloupec shlukování
  • Data budou seskupena na základě názvu skladby. S SongId bude vytvořen pouze jeden oddíl. V tabulce MusicPlaylist nebude žádný další oddíl.

Načítání dat bude u tohoto datového modelu pomalé kvůli špatnému primárnímu klíči.

Zde je další tabulka MusicPlaylist.

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

Ve výše uvedeném příkladu tabulka MusicPlaylist,

  • Songid a Year jsou klíčem oddílu a
  • Název skladby je sloupec shlukování.
  • Data budou seskupena na základě názvu skladby. V této tabulce bude každý rok vytvořen nový oddíl. Všechny písně roku budou na stejném uzlu. Tento primární klíč bude velmi užitečný pro data.

Naše načítání dat bude díky tomuto datovému modelu rychlé.

Modelujte svá data Cassandra

Při modelování vašich dotazů je třeba mít na paměti následující věci:

Určete, jaké dotazy chcete podporovat

Nejprve si určete, jaké dotazy chcete.

Například potřebujete?

  • Připojuje
  • Skupina vytvořená
  • Filtrování podle kterého sloupce atd.

Vytvořte tabulku podle vašich dotazů

Vytvořte tabulku podle vašich dotazů. Vytvořte tabulku, která uspokojí vaše dotazy. Pokuste se vytvořit tabulku tak, aby bylo potřeba načíst minimální počet oddílů.

Zvládání vztahu jeden k jednomu Cassandra

Vztah jedna ku jedné znamená, že dvě tabulky mají shodu jedna ku jedné. Student si například může zapsat pouze jeden kurz a já chci na studentovi vyhledat, ve kterém kurzu je konkrétní student zapsán.

V tomto případě by tedy vaše schéma tabulky mělo zahrnovat všechny podrobnosti o studentovi odpovídající danému kurzu, jako je název kurzu, číslo studenta, jméno studenta atd.

Vztah jeden k jednomu Cassandra
Vztah jeden k jednomu Cassandra

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

Zvládání vztahu jeden k mnoha Cassandra

Jeden až mnoho vztahů znamená mít mezi dvěma tabulkami jednu až mnoho korespondence.

Například kurz může studovat mnoho studentů. Chci vyhledat všechny studenty, kteří studují konkrétní kurz.

Takže dotazem na název kurzu budu mít mnoho jmen studentů, kteří budou studovat konkrétní kurz.

Vztah jeden k mnoha Cassandra
Vztah jeden k mnoha Cassandra

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

Pomocí následujícího dotazu mohu vyhledat všechny studenty určitého kurzu.

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

Zvládání vztahů mnoho k mnoha Cassandra

Mnoho až mnoho vztahů znamená mít mnoho až mnoho korespondence mezi dvěma tabulkami.

Například kurz může studovat mnoho studentů a student může studovat také mnoho předmětů.

Mnoho k mnoha vztah v Cassandra
Mnoho k mnoha vztah v Cassandra

Chci vyhledat všechny studenty, kteří studují konkrétní kurz. Také chci prohledat všechny kurzy, které konkrétní student studuje.

Takže v tomto případě budu mít dvě tabulky, tj. rozdělím problém na dva případy.

Nejprve vytvořím tabulku, ve které najdete kurzy konkrétního studenta.

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

Všechny kurzy konkrétního studenta najdu podle následujícího dotazu.

Select * from Student_Course where student_rollno=rollno;

Za druhé vytvořím tabulku, pomocí které zjistíte, kolik studentů studuje konkrétní kurz.

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

Pomocí následujícího dotazu mohu najít studenta v konkrétním kurzu.

Select * from Course_Student where Course_name=CourseName;

Rozdíl mezi RDBMS a Cassandra Datové modelování

RDBMS Cassandra
Ukládá data v normalizované podobě Ukládá data v denormalizované formě
Starší dbms; strukturovaná data Široká řada obchod, Dynamic; strukturovaná a nestrukturovaná data

Shrnutí

  • Datové modelování v Cassandra je jiný než ostatní databáze RDBMS.
  • Cassandra datové modelování má určitá pravidla. Pro dobré datové modelování je nutné tato pravidla dodržovat. Kromě těchto pravidel jsme viděli tři různé případy datového modelování a jak se s nimi vypořádat.
  • Vztah jedna ku jedné znamená, že dvě tabulky mají shodu jedna ku jedné.
  • Jeden až mnoho vztahů znamená mít mezi dvěma tabulkami jednu až mnoho korespondence.
  • Mnoho až mnoho vztahů znamená mít mnoho až mnoho korespondence mezi dvěma tabulkami.