Czas na kolejną batalie między konkurencyjnymi systemami (sprawdź także REST vs GraphQL) , tym razem na warsztat idą bazy danych.  Prędzej czy później każdy system, aplikacja czy instalacja webowa potrzebuje zachowywać i pobierać dane, przed projektantem systemowym staje dość trudne i istotne pytanie; Jaki typ bazy danych wybrać SQL czy NoSQL ?

Warto zaznaczyć, że nie ma tutaj jednej właściwej odpowiedzi, a raczej zestaw czynników, które trzeba wsiąść pod uwagę.

SQL  

Baza danych SQL doskonale nadaje się do systemów zorientowanych na transakcje, takich jak narzędzia do zarządzania relacjami z klientami, oprogramowanie księgowe i platformy handlu elektronicznego. Każdy wiersz w bazie danych SQL jest odrębnym podmiotem (np. Klientem), a każda kolumna jest atrybutem opisującym ten podmiot (np. Adres, stanowisko, zakupiony towar itp.).

Ze względu na te odrębne, u strukturyzowane relacje między wierszami i kolumnami w tabeli, bazy danych SQL są najlepsze, gdy potrzebujesz zgodności z ACID compliance:

Atomowość (Atomicity) - każda transakcja kończy się powodzeniem lub jest całkowicie wycofywana.
Spójność - dane są zapisywane w bazie danych muszą być prawidłowe zgodnie ze wszystkimi zdefiniowanymi regułami.
Izolacja - gdy transakcje są uruchamiane jednocześnie, nie konkurują ze sobą i działają tak, jakby były uruchamiane sekwencyjnie.
Trwałość - po zatwierdzeniu transakcji w bazie danych jest ona uznawana za trwałą, nawet w przypadku awarii systemu.

Zgodność z ACID chroni integralność danych poprzez dokładne określenie, czym jest transakcja i jak wchodzi ona w interakcję z bazą danych. Pozwala to uniknąć synchronizacji tabel bazy danych, co jest bardzo ważne w przypadku transakcji finansowych. Zgodność z ACID gwarantuje ważność transakcji nawet w obliczu błędów, awarii technologii, katastrofalnych zdarzeń itp.

Jeśli Twoje dane są bardzo u strukturyzowane, a zgodność z ACID jest koniecznością, SQL jest doskonałym wyborem. Z drugiej strony, jeśli Twoje wymagania dotyczące danych nie są jasne lub jeśli Twoje dane są niestrukturyzowane, NoSQL może być najlepszym rozwiązaniem.

Dane przechowywane w bazie danych NoSQL nie potrzebują przedefiniowanego schematu, jak w przypadku bazy danych SQL. Dane mogą być raczej składami kolumn, parami zorientowanymi na dokument, opartymi na wykresach lub klucz-wartość. Zapewnia to znacznie większą elastyczność i mniej planowania z góry podczas zarządzania bazą danych.

Na NoSQL możesz:

Tworzyć dokumenty bez wcześniejszego dokładnego definiowania ich struktury
Dodawać pola do bazy danych bez zmiany pól istniejących dokumentów
Przechowywać dokumenty, które mają swoją unikalną strukturę
Posiadać wiele baz danych o różnych strukturach i składni

Baza danych NoSQL najlepiej nadaje się do przechowywania danych, takich jak treść artykułów, posty w mediach społecznościowych, dane z czujników i inne rodzaje danych niestrukturyzowanych, które nie mieszczą się w tabeli. Bazy danych NoSQL zostały zbudowane z myślą o elastyczności i skalowalności i są zgodne z modelem spójności BASE, co oznacza:

  • Podstawowa dostępność (Basic Availability) - oznacza to, że chociaż baza danych gwarantuje dostępność danych, baza danych może nie uzyskać wymaganych danych lub dane mogą być w stanie zmieniającym się lub niespójnym.
  • Stan miękki (Soft State) - Stan bazy danych może się zmieniać z czasem.
  • Ostateczna spójność (Eventual consistency) - Baza danych ostatecznie stanie się spójna, a dane będą propagowane wszędzie w dowolnym momencie w przyszłości.
Struktura danych jest najważniejszym czynnikiem decydującym o tym, czy użyć bazy danych SQL, czy NoSQL, więc zastanów się nad tym przed podjęciem decyzji.

Możliwość zapytania danych


Następnym czynnikiem, który należy wziąć pod uwagę, jest częstotliwość wysyłania zapytań do danych, szybkość uruchamiania zapytań i kto będzie odpowiedzialny za ich uruchamianie.

Ponieważ twoje dane są ładnie u strukturyzowane i zorganizowane, bardzo wydajne jest wyszukiwanie danych w bazie danych SQL.

SQL jest popularnym językiem programowania, który istnieje od ponad 45 lat, więc jest niezwykle dojrzały i dobrze znany. Wydajnie wykonuje zapytania oraz szybko pobiera i edytuje dane. Jest bardzo lekki i deklaratywny, a zatem łatwy do nauczenia. Dlatego zapytania mogą być uruchamiane przez mniej techniczny personel, taki jak analitycy biznesowi i marketerzy.

Baza danych NoSQL zapewnia ogromną elastyczność w zakresie typów danych, które można przechowywać, ale ze względu na potencjalnie duże różnice w strukturach danych zapytania nie są tak wydajne, jak w przypadku bazy danych SQL.

Podczas budowania technologii baz danych NoSQL programiści skupili się na skalowalności i elastyczności, a nie na wydajności zapytań.

Skalowanie


Bazy danych SQL i NoSQL skalują się w różny sposób. Bazy danych SQL są skalowane w pionie, co oznacza, że ​​musisz zwiększyć pojemność jednego serwera (zwiększenie procesora, pamięci RAM lub SSD), aby skalować bazę danych. Bazy danych SQL zostały zaprojektowane do działania na jednym serwerze w celu zachowania integralności danych, więc nie są łatwe do skalowania.

Bazy danych NoSQL skalują się w poziomie, co oznacza, że ​​możesz dodać więcej serwerów, aby zasilać rosnącą bazę danych. Jest to ogromna przewaga, jaką NoSQL ma nad SQL.

Zdolność baz danych NoSQL do skalowania w poziomie wiąże się z brakiem struktury danych. Ponieważ NoSQL wymaga znacznie mniej struktury niż SQL, każdy przechowywany obiekt jest prawie samowystarczalny i niezależny. W ten sposób obiekty mogą być łatwo przechowywane na wielu serwerach bez konieczności łączenia. Nie dotyczy to SQL, w którym każdy wiersz tabeli i kolumna muszą być powiązane.

W miarę rozwoju firmy rośnie również baza danych. Upewnij się, że bierzesz pod uwagę swoje potrzeby skalowania.

Konwergencja SQL i NoSQL


Zarówno bazy danych SQL, jak i NoSQL mają swoje zalety i wady. W związku z tym nastąpił ruch, aby wziąć najlepsze cechy obu typów baz danych i zintegrować je, aby użytkownicy mogli realizować to, co najlepsze z obu światów.

Na przykład MySQL, najpopularniejsza relacyjna baza danych typu open source, oferuje MySQL Document Store. Zapewnia to strukturę bazy danych MySQL w połączeniu z elastycznością i wysoką dostępnością NoSQL bez konieczności wdrażania oddzielnej bazy danych NoSQL.

MongoDB, jedna z najpopularniejszych baz danych NoSQL, oferuje transakcje wielodokumentowe ACID.

DynamoDB, zarządzana przez AWS baza danych NoSQL, zapewnia także funkcje transakcyjne zgodne z ACID.

A dzięki łatwej konfiguracji bazy danych oferowanej przez dostawców usług w chmurze masz możliwość korzystania z bazy danych SQL i NoSQL w architekturze chmury w celu zaspokojenia potrzeb w zakresie przechowywania danych.

Teraz masz znacznie większą elastyczność, niezależnie od tego, czy wybierzesz bazę danych SQL, czy NoSQL, i na pewno będą bardziej elastyczne opcje w przyszłości.

Opcje bazy danych


Niezależnie od tego, czy korzystasz z bazy danych SQL, czy NoSQL, istnieje wiele opcji do wyboru.

Lokalne oferty baz danych SQL obejmują:

  • MySQL - jak wspomniano wcześniej, najpopularniejsza relacyjna baza danych typu open source
  • Serwer Microsoft SQL - korporacyjna wersja SQL firmy Microsoft
  • PostgreSQL - oraz korporacyjna baza danych typu open source skoncentrowana na rozszerzalności
  • Oracle - kompleksowa (i droga) opcja SQL
  • MariaDB - ulepszona wersja MySQL, stworzona przez oryginalnych programistów MySQL


Główne platformy usług w chmurze mają własne opcje SQL:

AWS ma:

  • RDS
  • Aurora, która koncentruje się na zwiększonej przepustowości i skalowalności

Microsoft Azure ma:

  • Baza danych Azure SQL, zarządzana baza danych jako usługa (SAAS)
  • Baza danych Azure dla MySQL,
  • PostgreSQL  
  • MariaDB

Google Cloud Platform (GCP) ma:

  • Cloud SQL, którego możesz używać dla MySQL i
  • PostgreSQL
  • Cloud Spanner, który łączy elementy SQL i NoSQL

Lokalne opcje bazy danych NoSQL obejmują:

  • MongoDB - zdecydowanie najpopularniejsza baza danych NoSQL
  • Redis - superszybka, rozproszona baza danych z kluczami i wartościami w pamięci
  • Cassandra - darmowa, otwarta baza danych NoSQL stworzona przez Facebooka, która koncentruje się na skalowalności i wysokiej dostępności

Dostawcy usług w chmurze oferują również wiele opcji NoSQL:

AWS ma:

  • DynamoDB, zarządzana baza danych NoSQL
  • DocumentDB, szybka, skalowalna, wysoce dostępna baza danych zgodna z MongoDB

Microsoft Azure oferuje:

  • CosmosDB, globalnie dystrybuowana, wielomodelowa baza danych

Google Cloud ma:

  • Bigtable, szerokokolumnowa usługa bazy danych NoSQL
  • Cloud Datastore, usługa bazy danych dokumentów NoSQL
  • Cloud Firestore, natywna dla chmury baza danych dokumentów NoSQL, która pomaga przechowywać i przeszukiwać dane aplikacji

Podsumowanie

Istnieje wiele mitów i nieporozumień dotyczących SQL; na przykład, że SQL jest przestarzały i powinien być zastąpiony przez NoSQL, gdy tylko jest to możliwe. Oczywiście to nie prawda. Obecnie nie ma wyraźnego lidera wśród nich, każdy z nich jest bardziej odpowiedni dla niektórych projektów i mniej odpowiedni (lub wręcz nieodpowiedni) w innych sytuacjach. Dlatego nie ma uniwersalnego idealnego wyboru.