Tworzenie nowego projektu obejmuje wybór odpowiedniej bazy danych do przechowywania danych. Wielu programistów, których znam, od samego początku domyślnie wybiera relacyjną bazę danych. Ale czy jest to najlepsza decyzja? Oczywiście, zależy to od wielu czynników. W tym artykule chciałbym przedstawić inne rodzaje baz danych, aby ułatwić wybór i pomóc w przygotowaniu się do przyszłych przedsięwzięć.
Typ bazy danych nie jest jedynym tematem do rozważenia. Istnieje wiele innych kwestii, o których należy pomyśleć, np. ilu aktywnych użytkowników może mieć aplikacja? Czy wszędzie potrzebna jest silna spójność? Czy ewentualna spójność będzie wystarczająca w niektórych przypadkach? Jest tak wiele pytań, na które nie ma jednoznacznych odpowiedzi, ponieważ "im bardziej się w to zagłębiasz, tym bardziej staje się to skomplikowane". Należy więc pamiętać, że ten artykuł koncentruje się wyłącznie na typach baz danych.
Weź filiżankę kawy i ciesz się tą lekturą.
Ogólna klasyfikacja baz danych
Na początku warto wiedzieć, że istnieją dwa główne typy baz danych: relacyjne (SQL) i nierelacyjne (NoSQL).
- Bazy danych SQL mają strukturę relacyjną, co oznacza przechowywanie danych w tabelach i utrzymywanie relacji między nimi.
- Bazy danych NoSQL (nie tylko SQL), w przeciwieństwie do baz relacyjnych, nie są dobrze ustrukturyzowane, a tym samym pozwalają na większą elastyczność i elastyczność.
Istnieje jeszcze jeden typ poza dwoma wymienionymi powyżej, a mianowicie baza danych w pamięci. Nie można jej sklasyfikować ani jako relacyjnej, ani nierelacyjnej, ponieważ odnosi się do miejsca fizycznego przechowywania danych. Każda baza danych może być przechowywana na dysku lub w pamięci.
Rodzaje baz danych
1. Relacyjny
Moim zdaniem jest to najpopularniejszy typ bazy danych. Dobrze sprawdza się w przypadku danych strukturalnych, gdzie chcemy zachować relacje między rekordami. Struktura bazy danych jest opisana w schemacie.
Głównymi zaletami są transakcje (pomagają zapewnić integralność danych i są zgodne z zasadami ACID) oraz możliwość obsługi wielu złożonych zapytań.
Kiedy ją wybrać?
Jest to przydatne do przechowywania danych, które nie zmieniają się strukturalnie zbyt często i które muszą być przechowywane na stałe:
- CRM (zarządzanie relacjami z klientami),
- Zarządzanie zamówieniami,
- ERP (Przedsiębiorstwo Planowanie zasobów),
- magazynowanie danych lub zarządzanie zapasami,
- księgowość lub finanse.
Przykłady:
Amazon Aurora, Microsoft Azure SQL Database, PostgreSQL, MySQL.
Relacyjne bazy danych są niewystarczające dla wielu nowych aplikacji i trzeba mieć więcej niż jedną bazę danych. W następnej części artykułu skupię się na nierelacyjnych bazach danych.
2. Klucz-wartość
Przechowuje każdą wartość danych z unikalnym kluczem. Oznacza to, że dostęp do danych uzyskuje się za pomocą pojedynczego klucza, podobnie jak w przypadku mapy hash. W przeciwieństwie do relacyjnych baz danych, nie wymusza schematu ani relacji między rekordami. Większość z tych baz danych zazwyczaj nie obsługuje operacji aktualizacji. Aby zmodyfikować dane, należy nadpisać cały istniejący zestaw.
Kiedy ją wybrać?
Jest to przydatne w przypadku danych, które mają być szybko odczytywane/zapisywane (ale nie aktualizowane zbyt często):
- licytacja w czasie rzeczywistym, obsługa reklam,
- buforowanie danych,
- zarządzanie sesjami,
- wózki sklepowe,
- preferencje klientów lub zarządzanie profilami.
Przykłady:
Memcached, Amazon DynamoDB, Azure Cosmos DB, Redis.
3. Dokument
Przechowuje kolekcje dokumentów. Każdy dokument zawiera pola z danymi, które mogą być prostymi wartościami lub złożonymi elementami, takimi jak listy lub kolekcje podrzędne. Ważne jest, aby wiedzieć, że każdy dokument może mieć inną strukturę, nawet jeśli reprezentuje to samo (każdy dokument jest unikalny i ewoluuje w czasie). Na przykład, pierwszy dokument klienta zawiera mniej informacji niż drugi:
{
"FirstName": "John",
"LastName": "Fake",
"Motocykle:" [
{
"Model": "BMW",
"Rok": 2020
}
]
}
{
"FirstName": "Alex",
"LastName": "Nolastname",
"Age": 15,
"Address": {
"Country": "Polska",
"Miasto": "Gdzieś"
},
"Motocykle:" [
{
"Model": "BMW",
"Rok": 2020
}
]
}
Kiedy ją wybrać?
Jest to przydatne w przypadku danych, które wymagają elastycznego schematu do szybkiego przetwarzania:
- produkt katalogi,
- CMS (system zarządzania treścią),
- profile użytkowników i personalizacja.
Przykłady:
Amazon DocumentDB, Azure Cosmos DB, MongoDB, Redis.
4. Wykres
Wykorzystuje strukturę grafu i składa się z dwóch elementów: węzłów i krawędzi. Węzły są analogiczne do wierszy tabeli lub dokumentów JSON. Krawędzie to relacje między węzłami - są równie ważne jak węzły. Oba elementy mogą mieć właściwości. Co więcej, krawędzie mogą mieć zdefiniowany kierunek relacji.
Kiedy ją wybrać?
Jest to przydatne, gdy dane są podobne do wykresu, tj. relacje między elementami danych są dynamiczne i zmieniają się w czasie. Co więcej, jest to dobry wybór, gdy dane biznesowe lub techniczne zespół muszą zrozumieć relacje w swoich danych. Niektóre znaczące przykłady obejmują:
- schematy organizacyjne,
- wykrywanie oszustw,
- wykresy społecznościowe/sieci,
- silniki rekomendacji,
- wykresy wiedzy.
Przykłady:
Amazon Neptune, Neo4j, ArangoDB, Titan.
5. Szeregi czasowe
Przechowuje dane uporządkowane według czasu. Zazwyczaj gromadzi ogromne ilości danych w czasie rzeczywistym. Jest najczęściej używany do zapisywania danych, choć ich aktualizacja jest bardzo rzadka. Ogólnie rzecz biorąc, znacznik czasu jest używany jako klucz podstawowy i/lub do sortowania danych. Niektóre bazy danych umożliwiają definiowanie znaczników jako dodatkowych informacji, takich jak pochodzenie lub typ danych.
Kiedy ją wybrać?
Przydatne jest przechowywanie niewielkich ilości danych dołączanych sekwencyjnie w porządku chronologicznym, na przykład w:
- DevOps,
- monitorowanie aplikacji,
- monitorowanie i telemetria zdarzeń,
- IoT aplikacje (takie jak zbieranie danych z czujników urządzeń).
Przykłady:
Azure Time Series Insights, Amazon Timestream, InfluxDB.
6. Księga
Zapewnia niezmienny, przejrzysty i kryptograficznie weryfikowalny dziennik transakcji, którego właścicielem jest centralny organ. - Przegląd QLDB firmy Amazon
Wyjaśnijmy pokrótce każde słowo kluczowe w powyższym cytacie:
- immutable - oznacza, że rekord utworzony w tej bazie danych nie może zostać usunięty, zmodyfikowany ani nawet nadpisany,
- przejrzystość - śledzi i przechowuje zapis sekwencji każdej zmiany w danych,
- weryfikowalne kryptograficznie - dane utworzone w tej bazie danych są weryfikowane za pomocą kryptograficznych technik mieszania, podobnych do łańcuchów bloków (przy użyciu funkcji skrótu SHA-256).
Kiedy ją wybrać?
Przydatne jest przechowywanie dokładnej historii, np. rejestrowanie sekwencyjnego wprowadzania każdej zmiany danych, jak w:
- finanse (historia transakcji debetowych lub kredytowych),
- produkcja (śledzenie, skąd pochodzą części),
- ubezpieczenie,
- Kadry i płace,
- sprzedaż detaliczna,
- łańcuchy dostaw.
Przykłady:
Amazon QLDB
Wnioski
Nie ma prostej odpowiedzi na pytanie postawione w tytule tego artykułu. Jedynym sposobem na wybranie odpowiedniej bazy danych jest dowiedzenie się więcej o swoich danych. Odpowiedź na pytanie: "Jakiego rodzaju dane generuje Twoja aplikacja?", a będziesz w stanie dokonać właściwych wyborów.
Ponadto należy bardzo dobrze znać wymagania biznesowe i domenę aplikacji. Musisz wiedzieć, w jaki sposób będziesz korzystać z danych, jakie zapytania będziesz wysyłać do bazy danych, ile razy będziesz przechowywać, odczytywać, aktualizować lub usuwać dane. Wszystkie te rzeczy mają znaczenie, ale nie wszyscy programiści zwracają wystarczającą uwagę na te obszary.
Pomyśl o swoich danych w aplikacji, którą tworzysz, aby ulepszyć / stworzyć lepsze oprogramowanie. Ogólnie rzecz biorąc, mam nadzieję, że poznasz swoje dane na tyle dobrze, aby przechowywać je w miejscu, w którym będą szczęśliwe.
Czytaj więcej:
Kilka sztuczek przyspieszających działanie aplikacji JavaScript
Sposoby na zwiększenie wydajności Railsów
Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym