Wprowadzenie do modelu danych w Cassandrze
Apache Cassandra stała się jedną z najpotężniejszych baz danych NoSQL. Jest to właściwy wybór, gdy chcesz mieć wysoką dostępność i skalowalność bez uszczerbku dla wydajności - szczególnie w przypadku aplikacji, których nie stać na utratę danych. W tym temacie poznamy Model danych w Cassandrze.
Szybki fakt, inżynierowie Cassandra należą dziś do najlepiej opłacanych specjalistów technicznych. Firmy takie jak Netflix, Instagram i Apple używają Cassandry, aby zapewnić wysoce zindywidualizowaną obsługę klienta. Aby uzyskać odpowiednią wydajność, należy dokładnie zaprojektować schemat specyficzny dla problemu biznesowego. W tym artykule przyjrzymy się modelowi danych Cassandra, który znacznie różni się od tego, co widzimy w RDBMS.
Reguły modelu danych Cassandra
Krótko mówiąc, model danych jest logiczną strukturą bazy danych. Opisuje sposób przechowywania i dostępu do danych oraz relacje między różnymi typami danych.
Wybór odpowiedniego modelu danych może być najtrudniejszym elementem korzystania z bazy danych NoSQL, takiej jak Cassandra. Jak wspomniałem wcześniej, modelowanie danych w Cassandrze różni się od tego, co widzimy w RDBMS.
Klucz podziału i klucz grupowania to warunki, o których powinien wiedzieć każdy, kto ma do czynienia z Cassandrą. Zanim zagłębimy się w podstawowe zasady modelowania danych w Cassandrze, rzućmy okiem na znaczenie tych terminów,
Przegroda
Cassandra to rozproszona baza danych, w której dane są dzielone na partycje i przechowywane w różnych węzłach w klastrze. Dane są dzielone za pomocą klucza partycji, którym może być jedno lub więcej pól danych. Ten klucz partycji służy do utworzenia mechanizmu mieszającego, który równomiernie rozprowadza dane we wszystkich węzłach.
Grupa
Klaster to zbiór węzłów reprezentujących pojedynczą logiczną bazę danych. Klucz klastrowania składa się z co najmniej jednego pola używanego do grupowania danych w partycji.
W tej tabeli restauracji dane zostaną podzielone na partycje przy użyciu kodu kraju, nazwy stanu i nazwy miasta, aw ramach tej partycji dane zostaną pogrupowane i posortowane na podstawie danych otwierających i nazwy restauracji.
Spójrzmy teraz na dwie reguły modelowania danych, o których należy pamiętać.
- Dane są równomiernie rozmieszczone w klastrze
- Czytaj z jak najmniejszej liczby partycji
Spójrzmy, co te zasady starają się przekazać
- Wiemy, co klaster ma rację? Klaster składa się z wielu węzłów. Chcemy podzielić dane między te węzły, aby każdy węzeł miał mniej więcej taką samą ilość danych. Jak wiemy dane są dzielone na różne węzły za pomocą skrótu klucza partycji (który jest pierwszym kluczem klucza głównego), więc w skrócie „powinieneś wybrać dobry klucz podstawowy”.
- Każda partycja znajduje się w innym węźle, dlatego podczas pobierania danych należy się upewnić, że dane są pobierane z jak najmniejszej liczby partycji. Jeśli zapytanie wymaga danych z różnych partycji, zostanie wydane polecenie dla oddzielnych węzłów, aby uzyskać te dane, które będą narzutem i doprowadzą do opóźnienia.
Kluczem do wydajnego modelu danych byłaby równowaga między tymi dwiema regułami.
Obsługuj relacje w Cassandrze
Należy pamiętać, że modelowanie danych w Cassandrze odbywa się przy użyciu podejścia opartego na zapytaniach, w przeciwieństwie do RDBMS, w którym najpierw identyfikujesz jednostki, tworzysz tabele, a następnie tworzysz zapytania, używając JOINS do pobierania danych.
Krótko mówiąc, nie modelujemy wokół relacji ani obiektów, modelujemy wokół zapytań.
1. Relacja jeden do jednego
Rozważmy na uniwersytecie, że student może zarejestrować się tylko na jedno seminarium. Jest to relacja jeden do jednego. Przestrzegając zasady nr 1, myślimy o zapytaniach, które chcemy. Chcę wyszukać seminarium, w którym uczestniczy student. W takim przypadku zrobimy tylko jeden stół. Tabela powinna zawierać dane studenta i szczegóły seminarium.
2. Relacja jeden do wielu
W tym samym kontekście, co jeśli chciałbym wyszukać wszystkich studentów biorących udział w seminarium. Zamiast używać tej samej tabeli i iterować po każdym wierszu, aby uzyskać nazwę ucznia dla tego konkretnego seminarium, mogę utworzyć inną tabelę, która podzieli dane według nazwy seminarium. Kiedy więc wysyłam zapytanie, trafia ono tylko do jednego węzła, a nie do wszystkich węzłów, aby uzyskać nazwę seminarium.
3. Związek wiele do wielu
Rozważmy teraz, że uczeń może uczestniczyć w wielu seminariach, a w seminarium może uczestniczyć wielu studentów. Tutaj mamy wiele do wielu relacji. W takim przypadku można wykorzystać powyższe dwie tabele do tworzenia zapytań bez konieczności tworzenia złożonych zapytań przy użyciu połączeń, które zwykle wykonuje się w RDBMS.
Znaczenie Cassandry
Wraz z szybkim rozwojem danych cyfrowych staje się ważniejsze posiadanie wysoce skalowalnej, odpornej na uszkodzenia bazy danych. Pozwól mi wymienić kilka punktów, dlaczego powinieneś używać Cassandry
- Oświetlenie operacji szybkiego odczytu: Omówiliśmy, w jaki sposób modelowanie danych we właściwy sposób może zoptymalizować operacje odczytu na dużą skalę.
- Odporny na awarie: Dane są replikowane między węzłami, więc nawet w przypadku awarii jednego węzła dane są bezpieczne.
- Strojenie niestandardowe: możesz skonfigurować Cassandrę tak, aby działała zgodnie z obciążeniem. Jeśli piszesz dużo danych, takich jak rejestrowanie, możesz je dostosować, aby obsługiwały systemy wymagające dużego zapisu. Dostępnych jest kilka innych opcji strojenia.
- Radzenie sobie z dużymi ilościami danych: w oparciu o rozmiar klastra Cassandra radzi sobie z ogromnymi ilościami danych.
Jak modelować dane w Cassandrze?
Dobre modelowanie danych wykonuje następujące kroki
- Zorientuj się w zapytaniach wymaganych przez twoją aplikację
- Tworzenie tabel w celu spełnienia tych zapytań
Zanim zastosujemy te zasady, należy pamiętać: „Koncentrujemy się na optymalizacji naszych operacji odczytu, nawet jeśli wymaga to powielania danych”. Możemy mieć wiele tabel, które mogą zawierać prawie podobne dane.
Rozważmy teraz, że potrzebujemy bazy danych, która przechowuje informacje o restauracjach. Ustawmy ograniczenie, że nazwy restauracji muszą być unikalne.
Poniższej tabeli można użyć, gdy chcemy wyszukać na podstawie nazwy restauracji:
Teraz, jeśli chcemy wyszukać restauracje dla określonej lokalizacji, napisalibyśmy zapytanie, które iteruje wszystkie wiersze i pobiera nazwy restauracji.
Zamiast tego, mając na uwadze zasadę nr 2, możemy łatwo stworzyć kolejny stół, który zaspokoi naszą potrzebę.
Teraz nasze dane zostaną podzielone na partycje w taki sposób, że węzeł w klastrze będzie miał restauracje dla określonej lokalizacji. To zoptymalizuje nasze zapytania do odczytu, ponieważ wyszukiwanie zapytań nastąpi tylko w jednym węźle z dużo mniejszymi wierszami niż w pierwszej tabeli, którą utworzyliśmy.
Co jeśli chcemy przeszukać restauracje w danym mieście, możemy zrobić inny stół zamiast iterować wszystkie wiersze w jednej partycji powyższej tabeli.
Wniosek
W tym artykule omówiłem kilka najlepszych praktyk, które możesz zastosować, jak podejść do modelowania danych w Cassandrze. Jeśli rozumiesz te pojęcia i potrafisz skutecznie rozpoznać zapytania, których potrzebuje Twoja aplikacja, możesz zaprojektować świetny model danych, aby uzyskać wysoką wydajność bazy danych.
Polecane artykuły
To jest przewodnik po modelu danych w Cassandrze. Tutaj omawiamy sposób modelowania naszych danych w Cassandrze wraz z regułami i znaczeniem modeli danych Cassandra. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -
- Co to jest modelowanie danych?
- Modele danych w DBMS
- Pytania do wywiadu dotyczące modelowania danych
- Modelowanie danych Cassandra