Cassandra Model danych z prostym przykładem bazy danych

Chociaż Cassandra język zapytań przypomina z SQL język, ich metody modelowania danych są zupełnie inne.

In Cassandra, zły model danych może obniżyć wydajność, zwłaszcza gdy użytkownicy próbują wdrożyć koncepcje RDBMS Cassandra. Najlepiej jest pamiętać o kilku zasadach opisanych poniżej.

Cassandra Reguły modelu danych

In Cassandra, pisze, że nie są drogie. Cassandra nie obsługuje złączeń, grupowania według, klauzuli OR, agregacji itp. Musisz więc przechowywać swoje dane w taki sposób, aby można je było w całości odzyskać. Dlatego też należy pamiętać o tych zasadach podczas modelowania danych Cassandra.

Zmaksymalizuj liczbę zapisów

In Cassandra, pisze, że są bardzo tanie. Cassandra jest zoptymalizowany pod kątem wysokiej wydajności zapisu. Spróbuj więc zmaksymalizować liczbę zapisów, aby uzyskać lepszą wydajność odczytu i dostępność danych. Istnieje kompromis pomiędzy zapisem i odczytem danych. Zoptymalizuj więc wydajność odczytu danych, maksymalizując liczbę zapisów danych.

Maksymalizuj duplikację danych

Denormalizacja i duplikacja danych są de facto zjawiskiem Cassandra. Przestrzeń dyskowa nie jest droższa od pamięci, przetwarzania CPU i operacji IO. Cassandra to rozproszona baza danych, więc duplikacja danych zapewnia natychmiastową dostępność danych i brak pojedynczego punktu awarii.

Cassandra Cele modelowania danych

Podczas modelowania danych w programie należy mieć następujące cele: Cassandra:

Rozłóż dane równomiernie wokół Cluster

Chcesz mieć taką samą ilość danych w każdym węźle Cassandra Cluster. Dane są rozprowadzane do różnych węzłów na podstawie kluczy partycji, które są pierwszą częścią klucza podstawowego. Dlatego spróbuj wybrać liczby całkowite jako klucz podstawowy, aby równomiernie rozprowadzać dane w klastrze.

Minimalizuj liczbę partycji odczytywanych podczas odpytywania danych

Partycja to grupa rekordów z tym samym kluczem partycji. Po wydaniu zapytania odczytu zbiera ono dane z różnych węzłów z różnych partycji.

Jeśli będzie wiele partycji, należy odwiedzić wszystkie te partycje w celu zebrania danych zapytania.

Nie oznacza to, że nie należy tworzyć partycji. Jeśli Twoje dane są bardzo duże, nie możesz przechowywać tak dużej ilości danych na jednej partycji. Pojedyncza partycja zostanie spowolniona.

Spróbuj więc wybrać zrównoważoną liczbę partycji.

Dobry klucz podstawowy Cassandra

Weźmy przykład i znajdźmy, który klucz podstawowy jest dobry.

Oto tabela MusicPlaylist.

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

W powyższym przykładzie tabela MusicPlaylist,

  • Songid jest kluczem partycji i
  • SongName to kolumna klastrująca
  • Dane zostaną pogrupowane na podstawie SongName. Tylko jedna partycja zostanie utworzona z SongId. Nie będzie żadnej innej partycji w tabeli MusicPlaylist.

W tym modelu danych pobieranie danych będzie powolne ze względu na zły klucz podstawowy.

Oto kolejna tabela MusicPlaylist.

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

W powyższym przykładzie tabela MusicPlaylist,

  • Songid i Rok są kluczem partycji, a
  • SongName jest kolumną klastrującą.
  • Dane zostaną pogrupowane na podstawie SongName. W tej tabeli, każdego roku, zostanie utworzona nowa partycja. Wszystkie piosenki roku będą w tym samym węźle. Ten klucz podstawowy będzie bardzo przydatny dla danych.

Dzięki temu modelowi danych nasze pobieranie danych będzie szybkie.

Modeluj swoje dane w Cassandra

Podczas modelowania zapytań należy pamiętać o następujących kwestiach:

Określ, jakie zapytania chcesz obsługiwać

Przede wszystkim określ, jakich zapytań potrzebujesz.

Na przykład, czy potrzebujesz?

  • Łączy
  • Grupuj według
  • Filtrowanie według której kolumny itp.

Utwórz tabelę zgodnie ze swoimi zapytaniami

Utwórz tabelę zgodnie ze swoimi zapytaniami. Utwórz tabelę, która zaspokoi Twoje zapytania. Spróbuj utworzyć tabelę w taki sposób, aby odczytać minimalną liczbę partycji.

Obsługa relacji jeden do jednego w Cassandra

Relacja jeden do jednego oznacza, że ​​dwie tabele mają korespondencję jeden do jednego. Przykładowo, student może zapisać się tylko na jeden kurs, a ja chcę wyszukać na nim kurs, na którym dany student jest zarejestrowany.

W tym przypadku schemat tabeli powinien obejmować wszystkie dane studenta odpowiadające danemu kursowi, takie jak nazwa kursu, numer indeksu studenta, imię i nazwisko studenta itp.

Relacja jeden do jednego w Cassandra
Relacja jeden do jednego w Cassandra

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

Obsługa relacji jeden do wielu w Cassandra

Relacja jeden do wielu oznacza zgodność jeden do wielu między dwiema tabelami.

Na przykład, na danym kursie może uczyć się wielu studentów. Chcę przeszukać wszystkich studentów studiujących dany kierunek.

Zapytanie o nazwę kursu spowoduje wyświetlenie wielu nazwisk studentów, którzy będą studiować dany kurs.

Relacja jeden do wielu w Cassandra
Relacja jeden do wielu w Cassandra

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

Mogę pobrać wszystkich studentów z danego kursu za pomocą następującego zapytania.

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

Obsługa relacji wiele do wielu w Cassandra

Relacje wiele do wielu oznaczają korespondencję wiele do wielu między dwiema tabelami.

Na przykład, na danym kursie może uczyć się wielu studentów, a student może również studiować na wielu kursach.

Relacja wiele do wielu w Cassandra
Relacja wiele do wielu w Cassandra

Chcę przeszukać wszystkich studentów studiujących dany kierunek. Chcę także przeszukać cały kurs, na którym studiuje dany student.

Zatem w tym przypadku będę miał dwie tabele, czyli podzielę problem na dwa przypadki.

Najpierw utworzę tabelę, w której znajdziesz kursy danego studenta.

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

Mogę znaleźć wszystkie kursy danego studenta za pomocą następującego zapytania.

Select * from Student_Course where student_rollno=rollno;

Po drugie, stworzę tabelę, dzięki której dowiesz się, ilu studentów studiuje dany kierunek.

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

Mogę znaleźć studenta na konkretnym kursie za pomocą następującego zapytania.

Select * from Course_Student where Course_name=CourseName;

Różnica między RDBMS i Cassandra Modelowanie danych

RDBMS Cassandra
Przechowuje dane w znormalizowanej formie Przechowuje dane w formie zdenormalizowanej
Starsze bazy danych; dane strukturalne Sklep z szerokimi rzędami, dynamiczny; dane strukturalne i nieustrukturyzowane

Podsumowanie

  • Modelowanie danych w Cassandra jest inny niż inne Bazy danych RDBMS.
  • Cassandra modelowanie danych rządzi się pewnymi zasadami. Aby dobrze modelować dane, należy przestrzegać tych zasad. Oprócz tych zasad widzieliśmy trzy różne przypadki modelowania danych i sposoby radzenia sobie z nimi.
  • Relacja jeden do jednego oznacza, że ​​dwie tabele mają korespondencję jeden do jednego.
  • Relacja jeden do wielu oznacza zgodność jeden do wielu między dwiema tabelami.
  • Relacje wiele do wielu oznaczają korespondencję wiele do wielu między dwiema tabelami.