Spis treści 21 sekcji

Bazy SQL przechowują dane w powiązanych tabelach, złożonych z wierszy i kolumn. Bazy NoSQL są nierelacyjne; mogą korzystać z modelu dokumentowego, klucz–wartość, grafowego lub szerokokolumnowego1.
Warto porównać sposób zadawania zapytań, spójność danych i skalowanie, zanim wybierze się bazę do projektu. W badaniu Stack Overflow Developer Survey 2024 korzystanie z PostgreSQL zadeklarowało 49% osób odpowiadających na pytanie o bazy danych2.

Dobierz narzędzie BI

Propozycje dopasowane do Twojej firmy · Jeden formularz zamiast wielu zapytań

Bezpłatna pomoc

Czym są bazy SQL i NoSQL?

Bazy SQL i bazy NoSQL różnią się sposobem definiowania struktury danych oraz zadawania zapytań. Inaczej dobiera się też mechanizmy spójności i skalowania.
Sam podział nie rozstrzyga o wydajności ani o obsłudze transakcji obejmujących wiele rekordów. MongoDB obsługuje transakcje obejmujące wiele dokumentów od wersji 4.03.

Model danych określa, jak baza organizuje informacje. Przy jego wyborze liczy się zarówno sposób zapisu, jak i odczyty, które wykona aplikacja.
Pojedynczy dokument BSON w MongoDB może mieć maksymalnie 16 MiB4.

Jak różnią się organizacja danych i definiowanie schematu?

Bazy SQL wymagają wcześniejszego zdefiniowania schematu danych, czyli struktury i typów pól. Wiele baz NoSQL, zwłaszcza dokumentowych, dopuszcza elastyczne schematy: poszczególne rekordy mogą mieć różną strukturę, ale nie wszystkie — Amazon Keyspaces wymaga zdefiniowania kolumn i ich typów1,5.
W projekcie relacyjnym strukturę określa się przed zapisem. W nierelacyjnym trzeba ustalić, które jej warianty aplikacja poprawnie zapisze i odczyta6.

Elastyczny schemat przenosi część kontroli struktury do aplikacji lub konfiguracji bazy. Ułatwia zapis różnych obiektów, ale wymaga obsługi rekordów o odmiennych polach.
W MongoDB 9.0 parametr validationLevel przyjmuje cztery wartości: off, moderate, strict i constraint7.

Jak formułuje się zapytania w obu typach baz?

Zapytania SQL określają potrzebne dane oraz warunki ich wyboru. W NoSQL sposób zadawania zapytań zależy od modelu i interfejsu danego systemu.
Porównanie warto więc zacząć od operacji aplikacji, nie od etykiety bazy. Operacja Query w DynamoDB wymaga nazwy klucza partycji i jednej jego wartości podanej w warunku równości8.

Projekt zapytań zaczyna się od wskazania pól do filtrowania i danych odczytywanych razem. Trzeba też ustalić, czy odczyt obejmie powiązane rekordy. Te informacje pomagają dopasować model do faktycznych operacji.
Jedno wywołanie Query w DynamoDB odczytuje maksymalnie 1 MB danych; większy wynik wymaga paginacji8.

Czym różni się obsługa transakcji i spójności danych?

Obsługi transakcji nie da się ocenić na podstawie samego podziału SQL–NoSQL. Liczą się zakres operacji i gwarancje danego systemu. ACID oznacza atomowość, spójność, izolację oraz trwałość transakcji.
MongoDB obsługuje transakcje ACID dotyczące pojedynczego dokumentu, a od wersji 4.0 również wielu dokumentów1,3.

Spójność danych określa, kiedy odczyt zobaczy zapis. Gwarancje transakcji trzeba przy tym odróżnić od zachowania bazy podczas awarii sieci. Twierdzenie CAP opisuje kompromis między spójnością a dostępnością przy podziale sieci; nie przypisuje jednej polityki całej kategorii SQL ani NoSQL.
W DynamoDB silnie spójny odczyt zużywa dwa razy więcej jednostek odczytu niż odczyt ostatecznie spójny tej samej ilości danych9.

Ta lista pomaga ocenić zakres transakcji i gwarancje spójności w obu kategoriach baz10.

  • Transakcja pojedynczego rekordu wymaga sprawdzenia, czy cały rekord zapisuje się atomowo.
  • Transakcja wielu rekordów wymaga ustalenia, czy powiązane zmiany są razem zatwierdzane albo wycofywane.
  • Odczyt po zapisie wymaga ustalenia, kiedy aplikacja zobaczy zatwierdzoną zmianę.
  • Awaria połączenia wymaga decyzji, czy aplikacja ma wtedy przedkładać dostępność nad natychmiastową spójność odczytu.

Jakie są różnice w skalowaniu baz?

Skalowanie SQL i NoSQL zależy od architektury konkretnej bazy, nie tylko od modelu danych. Skalowanie pionowe zwiększa zasoby serwera. Skalowanie poziome rozkłada obciążenie między serwery.
W obu przypadkach trzeba ocenić rozmieszczenie danych, zapytań i zapisów11.

Podział danych pomaga obsłużyć rosnące obciążenie, ale utrudnia operacje obejmujące różne części systemu. Ważne są możliwości i koszt rozproszenia danej bazy, a nie jej etykieta.
Operacja TransactWriteItems w DynamoDB może połączyć maksymalnie 100 działań w jednej transakcji12.

Wybór między SQL a NoSQL wymaga zestawienia schematu, zapytań, transakcji i skalowania z potrzebami aplikacji.
Łączny rozmiar elementów objętych operacją TransactWriteItems w DynamoDB nie może przekroczyć 4 MB12.

Wymagania projektu, które wpływają na wybór rodzaju bazy

O wyborze między SQL a NoSQL powinny decydować operacje aplikacji: zapis, odczyt i łączenie danych oraz wymagana spójność. Nazwa kategorii nie zastąpi opisu obciążenia ani oceny ograniczeń systemu.
W DynamoDB jedna jednostka RCU odpowiada jednemu silnie spójnemu odczytowi na sekundę elementu o rozmiarze do 4 KB13.

Lista porównuje zastosowania SQL i NoSQL przez pryzmat operacji, które baza musi obsłużyć. W kolekcji MongoDB można utworzyć maksymalnie 64 indeksy14.

  • Powiązane operacje biznesowe przemawiają za SQL, gdy zmiany różnych danych trzeba zatwierdzić razem. SQL może nie pasować, jeśli utrzymywanie wspólnego modelu powiązań komplikuje dominujący zapis. Wybierając NoSQL, trzeba ocenić zakres transakcji danego systemu15.
  • Dane o zmiennej strukturze przemawiają za NoSQL, gdy obiekty mają odmienne pola i zwykle są odczytywane w całości. NoSQL może nie pasować do przekrojowych zestawień wielu powiązanych obiektów. W SQL trzeba z kolei zaplanować zmiany struktury.
  • Zapytania przekrojowe przemawiają za SQL, gdy użytkownik zestawia i filtruje dane według różnych relacji. Złożone zapytania nadal kosztują i wymagają optymalizacji. Przy NoSQL trzeba ustalić, jak aplikacja przygotuje dane do takich odczytów.
  • Dominujący odczyt pojedynczego obiektu sprzyja rozważeniu NoSQL, gdy aplikacja zna identyfikator pobieranych danych. NoSQL może nie pasować, jeśli odczyty wymagają łączenia wielu niezależnych obiektów. W SQL także trzeba dopasować indeksy do zapytań.

Kryterium wyboru stanowią dominujące operacje i wymagana spójność, nie sam format danych. Powiązane zmiany i zapytania przekrojowe skłaniają ku SQL. Samodzielne obiekty o zmiennej strukturze skłaniają ku NoSQL, o ile ograniczenia systemu są do przyjęcia.
W DynamoDB pojedynczy element może mieć maksymalnie 400 KB, łącznie z nazwami i wartościami atrybutów13.

Schemat bazy a język zapytań SQL

Schemat bazy określa pola i powiązania, do których może odwołać się zapytanie SQL. Definicje tabel i kolumn nadają im nazwy, a typy danych wpływają na porównywanie wartości. Powiązania pozwalają zestawiać informacje zapisane osobno.
W domyślnej konfiguracji PostgreSQL nazwa kolumny, podobnie jak inny identyfikator, może mieć maksymalnie 63 bajty16.

Zapytanie SQL wskazuje dane do pobrania, warunki filtrowania i sposób łączenia tabel. Po zmianie nazwy kolumny lub struktury powiązań trzeba dostosować korzystające z nich zapytania. Stabilny schemat ułatwia ich utrzymanie.
Indeks wielokolumnowy PostgreSQL może obejmować maksymalnie 32 kolumny, w tym kolumny dodane przez INCLUDE17.

Jak schemat danych wpływa na sposób pisania zapytań?

Schemat wpływa na zapytania SQL przez nazwy i typy pól oraz powiązania między tabelami. Autor zapytania wybiera kolumny potrzebne w wyniku, dobiera warunki do typów danych i określa sposób połączenia rekordów.
Parametr join_collapse_limit ma w PostgreSQL domyślną wartość 8 i wpływa na planowanie zapytań łączących tabele18.

Zmiana schematu oznacza konieczność przejrzenia zapytań korzystających ze zmienionych pól lub powiązań. Gdy schemat odpowiada danym, łatwiej pisać zapytania zgodne z ich strukturą.

Bazy SQL w praktyce: systemy i zastosowania

Bazy SQL przechowują dane, które aplikacja odczytuje i zmienia za pomocą zapytań. System zarządzania bazą danych wykonuje te zapytania i kontroluje dostęp; nie jest tym samym co przechowywany zbiór danych.

Wybór systemu SQL warto zacząć od potrzeb aplikacji, nie od nazwy produktu. Liczą się zapytania, powiązania między danymi oraz operacje wymagające zachowania integralności.

Przykłady systemów baz SQL

MySQL, PostgreSQL, Oracle i Microsoft SQL Server to przykłady systemów SQL. Każda z tych nazw oznacza produkt, a nie zawartość bazy utworzonej dla firmy czy aplikacji.

Do jakich zastosowań nadają się bazy SQL?

SQL pasuje do danych ustrukturyzowanych, złożonych zapytań oraz transakcji wymagających integralności5.
Dotyczy to między innymi aplikacji zapisujących powiązane informacje, które muszą pozostać poprawne podczas zmian. Konkretny system należy ocenić według zapytań i operacji tej aplikacji15.

Czym różni się baza danych od systemu zarządzania bazą?

Baza danych jest zorganizowanym zbiorem informacji. System zarządzania bazą danych to oprogramowanie, które pozwala je zapisywać, odczytywać i nimi administrować. Aplikacja wysyła zapytanie do systemu, a ten wykonuje operację na bazie.
Dzięki temu można osobno opisać model danych projektu i produkt użyty do jego obsługi.

Microsoft SQL Server jako przykład systemu bazodanowego

Microsoft SQL Server jest systemem zarządzania bazami SQL, nie nazwą zbioru danych konkretnej organizacji. Wdrożony w nim projekt ma własne definicje danych i zapytania wynikające z potrzeb aplikacji.
Możliwości produktu trzeba zestawić z planowanymi operacjami. Sama nazwa systemu nie opisuje projektu.

Baza SQL przechowuje dane projektu, a wybrany system udostępnia mechanizmy pracy z nimi.

Dane strukturalne w relacyjnych bazach danych

Relacyjne bazy danych porządkują dane według określonej struktury. Ułatwia to opis powiązań i kontrolę poprawności zapisów. Dane strukturalne mają przewidziane pola oraz typy wartości, do których zapytanie odwołuje się w ustalony sposób.
Taka struktura nie rozstrzyga jednak, czy system potrafi przechować zawartość pliku19.

Na czym polega relacyjny model danych?

Relacyjny model danych przedstawia informacje w tabelach oraz opisuje powiązania między rekordami. Klucz główny identyfikuje rekord, a klucz obcy wskazuje powiązany rekord z innej tabeli.
Aplikacja może dzięki temu zapisać informacje osobno, a potem zestawić je w zapytaniu.

Czy relacyjne bazy przechowują wyłącznie dane strukturalne?

Relacyjna baza może przechowywać również zawartość plików. Osobną kwestią jest to, czy da się ją odpytywać tak jak zdefiniowane pola. Źródło przedstawia sztywny schemat jako przeszkodę dla danych nieustrukturyzowanych, takich jak wideo, zdjęcia i pliki tekstowe. Nie oznacza to technicznego zakazu zapisu plików w systemie relacyjnym5.

Tabela pokazuje, co schemat relacyjny pozwala opisać i odpytywać przy różnych sposobach przechowywania danych.

Sposób przechowywaniaRola schematuOgraniczenie przy zapytaniach
Ustrukturyzowane polaOkreśla pola i ich typyZmiana pól wymaga dostosowania struktury
Plik zapisany w bazieOpisuje pole z zawartością plikuZawartość nie staje się automatycznie polami dostępnymi dla SQL
Plik poza baząOpisuje metadane i odwołanie do plikuOdczyt zawartości wymaga dostępu do zewnętrznego miejsca przechowywania

Relacyjna baza nie musi przechowywać wyłącznie danych strukturalnych. Jej schemat najlepiej jednak opisuje pola używane do wyszukiwania i łączenia informacji.

NoSQL: założenia, zalety i ograniczenia

NoSQL obejmuje nierelacyjne modele baz, w których dane można organizować inaczej niż w powiązanych tabelach. Model warto wybrać według sposobu zapisu i odczytu oraz spójności wymaganej przez aplikację.

Co oznacza nazwa NoSQL?

NoSQL oznacza Not Only SQL, czyli „nie tylko SQL”. Pod tą nazwą kryją się różne modele baz, a nie wspólny język zapytań czy jednakowy zestaw funkcji.
Etykieta NoSQL nie mówi więc, jak dany system obsługuje zapytania i transakcje.

Jakie korzyści może dać model nierelacyjny?

Model nierelacyjny pozwala dopasować strukturę zapisu do zmieniających się obiektów aplikacji. Elastyczny schemat NoSQL ułatwia dodawanie pól wraz ze zmianą wymagań20,21.
Aplikacja musi jednak poprawnie obsługiwać rekordy zapisane w różnych wariantach struktury22.

Kiedy warto rozważyć bazę NoSQL?

NoSQL warto rozważyć przy danych nieustrukturyzowanych lub częściowo ustrukturyzowanych, a także przy szybko zmieniającej się strukturze1,5.
Dane częściowo ustrukturyzowane mają rozpoznawalne pola, choć nie każdy rekord zawiera ten sam zestaw. Dane nieustrukturyzowane nie mają jednolitego układu pól. Wiele systemów NoSQL nie obsługuje transakcji ACID, co może utrudnić zachowanie integralności przy złożonych zmianach23.

Jak zmienia się projektowanie danych po odejściu od modelu relacyjnego?

Projektowanie danych w NoSQL zaczyna się od ustalenia, co aplikacja zapisuje i odczytuje razem. Następnie trzeba określić warianty struktury, sposób identyfikowania obiektów i reguły zmiany powiązanych danych.
Tak powstaje model dopasowany do operacji aplikacji, ale wymagający jawnej kontroli struktury i spójności.

NoSQL daje swobodę modelowania. Nie zwalnia jednak z projektowania integralności zapisów.

Modele baz NoSQL i sposoby przechowywania danych

Bazy NoSQL przechowują dane w różnych modelach nierelacyjnych. O wyborze modelu powinien decydować sposób odczytu, nie wspólna etykieta. Wyszukiwanie wartości po kluczu różni się przecież od przechodzenia po powiązaniach.
W każdym modelu trzeba też zaplanować zapisy zależne od innych danych10.

Czym są nierelacyjne bazy danych?

Nierelacyjne bazy danych organizują zapis wokół jednostek takich jak dokument, para klucz–wartość czy węzeł grafu. Aplikacja może pobrać taką jednostkę bez składania jej z powiązanych tabel.
Dostępne zapytania i obsługa zależności między jednostkami zależą już od konkretnego systemu.

Jakie są rodzaje baz NoSQL?

Modele NoSQL różnią się jednostką zapisu i sposobem odczytu. Różny jest też koszt zapytań wykraczających poza przewidzianą ścieżkę dostępu. W tabeli każdy model oceniono według tych samych kryteriów.

Tabela porównuje jednostkę zapisu, typowy odczyt i ograniczenie każdego modelu NoSQL.

ModelJednostka zapisuTypowy odczytOgraniczenie – dla kogo nie
DokumentowyDokument z polamiPobieranie lub filtrowanie dokumentówNie dla projektu, w którym główne zapytania łączą liczne niezależne obiekty
Klucz–wartośćWartość przypisana do kluczaPobieranie wartości po kluczuNie dla projektu wymagającego swobodnego filtrowania według zawartości wartości
GrafowyWęzły i powiązaniaPrzechodzenie po powiązaniachNie dla projektu ograniczonego do prostego pobierania obiektów po identyfikatorze
SzerokokolumnowyWiersze z kolumnami dobranymi do modeluOdczyt według zaprojektowanego klucza i układu danychNie dla projektu, w którym użytkownicy stale zmieniają kryteria zapytań przekrojowych

Kryterium wyboru modelu NoSQL jest zgodność typowych odczytów z organizacją danych. Dokumenty służą pobieraniu obiektów, klucz–wartość odczytowi po identyfikatorze, graf analizie powiązań, a model szerokokolumnowy zapytaniom opartym na zaplanowanym kluczu.

Jak działa przechowywanie i odczyt danych w bazach NoSQL?

Przechowywanie danych w NoSQL wymaga najpierw określenia jednostki zapisu i odczytu. Projektant ustala jej klucz, potrzebne zapytania oraz sposób aktualizacji informacji rozłożonych między jednostkami.
Dopiero wtedy dobiera organizację danych i mechanizmy wyszukiwania danego systemu.

Odczyt NoSQL opiera się na jednostkach i ścieżkach dostępu przewidzianych w projekcie. Inne zapytanie może wymagać przebudowy modelu albo przygotowania danych w odmiennej postaci.
Baza ma obsługiwać rzeczywiste operacje aplikacji, nie tylko pasować do ogólnej kategorii NoSQL.

Model NoSQL należy dopasować do sposobu pobierania danych i ograniczeń zapytań.

Systemy bazodanowe a zastosowania modeli nierelacyjnych

Systemy NoSQL służą różnym zadaniom, bo organizacja danych wpływa na sposób ich wyszukiwania. Przy wyborze liczą się jednostka zapisu, dominujący odczyt i operacje na powiązanych danych.

Typy baz NoSQL według sposobu organizacji danych

Typy baz NoSQL różni organizacja informacji, nie wspólny język zapytań. Tabela pokazuje ich ścieżki dostępu i ograniczenia.

Tabela porównuje organizację danych, typowy odczyt i sytuację, w której model nie pasuje do projektu.

Typ bazyTypowy odczytOgraniczenie
Baza dokumentowa przechowuje informacje w dokumentach z polami.Odczyt całych obiektówNie jest naturalnym wyborem, gdy dominują zapytania łączące liczne niezależne obiekty.
Baza klucz–wartość przypisuje wartość do identyfikującego ją klucza.Pobieranie po znanym kluczuNie pasuje do swobodnego filtrowania według zawartości wartości.
Baza grafowa zapisuje węzły i powiązania między nimi.Przechodzenie po relacjachNiepotrzebnie komplikuje projekt ograniczony do pobierania obiektów po identyfikatorze.
Baza szerokokolumnowa organizuje wiersze i kolumny pod przewidziane odczyty.Zaplanowane ścieżki dostępuNie pasuje do zapytań, których kryteria stale zmieniają się w nieprzewidziany sposób.

Kryterium podziału jest sposób odnajdywania danych: po polach, kluczu, powiązaniu lub zaprojektowanym układzie wierszy. Model trzeba dopasować do dominującego odczytu, pamiętając o ograniczeniach pozostałych zapytań.

Przykładowe zastosowania baz NoSQL

NoSQL sprawdza się tam, gdzie sposób pobierania danych odpowiada wybranemu modelowi. Katalog obiektów o różnych polach pasuje do dokumentów. Odczyt po identyfikatorze odpowiada modelowi klucz–wartość, a analiza sieci powiązań modelowi grafowemu.
Aplikacja korzystająca z przewidzianych kluczy odczytu może używać modelu szerokokolumnowego.

Zastosowanie NoSQL nie wskazuje automatycznie produktu. Osobno trzeba ocenić zapytania, aktualizowanie powiązanych danych i gwarancje danego systemu.

Popularne systemy SQL i NoSQL: czym różnią się ich modele danych?

SQL i NoSQL różnią się organizacją danych, lecz nazwa produktu nie opisuje wszystkich jego operacji. Przykłady systemów SQL to MySQL, PostgreSQL, Oracle i Microsoft SQL Server. Do przykładów NoSQL należą MongoDB, Cassandra, Redis i DynamoDB1.
HBase i BigTable to kolejne systemy bazodanowe. Ich przydatność również zależy od wymaganego sposobu zapisu i odczytu.

Systemy warto porównywać po określeniu zapytań i wymagań spójności aplikacji. Kategoria zawęża wybór, ale nie zastępuje oceny produktu.

Model nierelacyjny dobierz do dostępu do danych, a system bazodanowy oceń osobno.

Lista kontrolna wyboru bazy do projektu

O wyborze między SQL a NoSQL powinny decydować obciążenie bazy, zmiany danych i potrzeby gotowej aplikacji. Warto uwzględnić częstotliwość odczytów, zapisów oraz zmian struktury, a także postać końcowego produktu24.
Do tego dochodzą rodzaj zapytań i wymagany zakres transakcji. Ograniczenia występują po obu stronach porównania25.

Które różnice między SQL a NoSQL mają znaczenie przy wyborze?

Różnice między SQL a NoSQL liczą się wtedy, gdy zmieniają sposób pracy aplikacji. SQL pozwala pytać o powiązane dane, ale zmianę ich struktury trzeba uwzględnić w schemacie i zapytaniach.
NoSQL pozwala dopasować zapis do odczytu. Zapytania spoza zaprojektowanych ścieżek mogą jednak wymagać przebudowy modelu.

Jak dopasować model bazy do wymagań projektu?

Dopasowanie modelu bazy zaczyna się od opisania operacji aplikacji. Lista łączy wymagania projektu z decyzjami, które trzeba podjąć:

  • Odczyty i zapisy trzeba opisać przez wskazanie danych pobieranych razem oraz zmian wykonywanych wspólnie. Ułatwia to porównanie zapytań relacyjnych ze ścieżkami odczytu NoSQL.
  • Zmiany struktury wymagają wskazania pól, które będą ewoluować wraz z aplikacją. W SQL trzeba zaplanować zmianę schematu, a w NoSQL obsługę różnych wariantów obiektów.
  • Integralność danych określają zmiany, które muszą zostać zatwierdzone razem. W obu kategoriach należy ocenić gwarancje systemu dla potrzebnego zakresu operacji.
  • Produkt końcowy trzeba opisać przez funkcje użytkownika, takie jak wyszukiwanie powiązań czy pobieranie całych obiektów. Model bazy powinien je obsługiwać bez przenoszenia dominujących zapytań do obejść w aplikacji.

Lista daje opis wymagań, według którego można porównywać konkretne systemy na tych samych zasadach.

Kiedy wybrać model relacyjny, a kiedy nierelacyjny?

Tabela pokazuje, kiedy wybrać model relacyjny lub nierelacyjny, a kiedy każdy z nich wymaga ostrożniejszej oceny.

ModelKiedy wybraćKiedy nie wybierać bez dalszej oceny
Model relacyjnyProjekt wymaga zapytań o powiązane dane i wspólnych zmian, a zespół może utrzymywać schemat.Dominują samodzielne obiekty o często zmienianej strukturze, których powiązanie w tabelach nie pomaga w odczycie.
Model nierelacyjnySposób pobierania danych odpowiada wybranemu typowi NoSQL.Nie oceniono zapytań przekrojowych ani wymaganej integralności danych.

Właściwy model to ten, którego ograniczenia da się pogodzić z wymaganiami aplikacji.

Przechowywanie danych a możliwości skalowania

Architektura bazy danych określa rozmieszczenie zapisów i serwery obsługujące odczyty. W typowym porównaniu SQL skaluje się pionowo przez zwiększanie mocy sprzętu, a NoSQL poziomo przez dodawanie serwerów1.
To opis sposobów rozbudowy, nie reguła obowiązująca każdy system z danej kategorii20.

Tabela porównuje skalowanie pionowe i poziome pod względem rozmieszczenia danych oraz ograniczeń rozbudowy.

PodejścieRozmieszczenie danychOgraniczenie – dla kogo nie
Skalowanie pionoweZwiększanie zasobów serwera obsługującego bazęNie dla projektu wymagającego rozdzielenia zapisu między serwery; rozbudowę ograniczają zasoby maszyny
Skalowanie poziomeRozdzielenie danych lub obciążenia między serweryNie dla projektu, który nie może obsłużyć operacji obejmujących różne części danych

Dane w tabeli: 26

Jak architektura bazy wpływa na rozmieszczenie danych?

Architektura decyduje, czy powiązane dane pozostają na jednym serwerze, czy trafiają do różnych części systemu. Przy planowaniu rozmieszczenia najpierw wskazuje się dane odczytywane razem, potem zmieniane wspólnie. Następnie ustala się regułę kierowania zapytań.
Klucz podziału to cecha rekordu, według której trafia on do określonej części rozproszonej bazy.

Podział danych rozkłada obciążenie, ale zapytanie obejmujące różne części systemu wymaga koordynacji. Rozmieszczenie powinno więc odpowiadać odczytom i zapisom aplikacji.

Na czym polega skalowanie bazy danych?

Skalowanie bazy danych zwiększa jej zdolność do obsługi zapisów, odczytów lub przechowywania. Rozbudowa serwera i podział pracy między serwery odpowiadają na różne problemy.
Najpierw trzeba ustalić, czy ograniczeniem są zapytania, zapisy, pojemność czy dostępność podczas awarii27.

Skalowanie należy oceniać dla konkretnego systemu i obciążenia, nie na podstawie etykiety SQL lub NoSQL.

Rozwiązania IBM w kontekście wyboru modelu bazy

IBM jest dostawcą. SQL i NoSQL opisują sposoby organizacji danych, nie nazwy jego produktów. Przy ocenie rozwiązania trzeba oddzielić model danych, możliwości produktu i potrzeby aplikacji.
Nazwa dostawcy nie określa sposobu zapisu ani gwarancji transakcyjnych.

Definicje SQL i NoSQL w kontekście rozwiązań IBM

W kontekście rozwiązań IBM SQL oznacza język pracy z danymi relacyjnymi, a NoSQL obejmuje nierelacyjne sposoby ich organizacji. Model trzeba odróżnić od produktu i sposobu wdrożenia.
Ocena rozwiązania dotyczy jego zapytań, transakcji i struktury danych, nie samej etykiety SQL lub NoSQL.

Zastosowania oraz ograniczenia obu modeli danych

Model relacyjny odpowiada projektom zestawiającym powiązane dane, ale wymaga utrzymywania określonej struktury. Model nierelacyjny pozwala zorganizować zapis wokół odczytu obiektów; inne zapytania mogą jednak wymagać odmiennego układu danych.
W przypadku IBM, tak jak u innych dostawców, oba modele trzeba oceniać według możliwości produktu i operacji aplikacji.

Kryteria wyboru modelu bazy: lista kontrolna

Lista kontrolna dla rozwiązania IBM oddziela wymagania projektu od możliwości produktu:

  • Model danych powinien odpowiadać informacjom, które aplikacja zapisuje i odczytuje razem. Złożone powiązania i samodzielne obiekty wymagają innej organizacji.
  • Zakres zapytań powinien obejmować operacje użytkowników. Trzeba też ocenić zapytania wykraczające poza dominujący sposób odczytu28.
  • Gwarancje zapisu powinny odpowiadać zmianom wymagającym spójności. Zakres transakcji należy oceniać dla produktu, nie dla nazwy dostawcy29.
  • Sposób wdrożenia powinien odpowiadać planowi rozmieszczenia danych i obsługi awarii. Wybór modelu oraz architektury wdrożenia to odrębne decyzje.

Rozwiązanie IBM warto wybrać dopiero po dopasowaniu możliwości produktu do danych i operacji aplikacji.

NoSQL vs SQL: najważniejsze różnice w skrócie

SQL i NoSQL różnią się organizacją danych oraz obsługą zapytań, ale w obu kategoriach są systemy o różnych możliwościach. Warto porównywać je według tych samych kryteriów: struktury zapisu, odczytów i wymaganej spójności.

SQL i NoSQL w krótkim zestawieniu

Tabela zestawia sposób pracy z danymi i główne ograniczenie każdej kategorii.

KategoriaSposób pracyOgraniczenie
SQLOpisuje i łączy powiązane dane za pomocą wspólnego języka zapytań.Wymaga utrzymywania schematu.
NoSQLPozwala dopasować organizację danych do sposobu ich pobierania.Zapytania zależą od wybranego modelu i systemu.

Porównanie modeli danych, zapytań i spójności

SQL i NoSQL warto porównywać według modelu danych, zapytań i zakresu operacji wymagających spójności.

Tabela stosuje te kryteria do obu kategorii i wskazuje ograniczenia każdego podejścia.

KryteriumSQLNoSQL
Model danychPowiązane tabele; zmiana schematu wymaga dostosowania strukturyModel dobrany do danych; aplikacja musi obsługiwać warianty struktury
ZapytaniaSQL łączy dane z tabel; złożone odczyty wymagają optymalizacjiOdczyt zależy od modelu; inne zapytania mogą wymagać zmiany organizacji danych
SpójnośćZakres transakcji trzeba dopasować do operacji aplikacjiZakres transakcji trzeba ocenić w danym systemie, zwłaszcza dla powiązanych zmian

Kluczowa różnica dotyczy sposobu określania powiązań i ścieżek odczytu. W SQL służą temu schemat i zapytania, a w NoSQL organizacja danych dopasowana do operacji.
SQL wybierz dla zapytań o powiązane dane, NoSQL dla odczytów zgodnych z wybranym modelem. W obu przypadkach uwzględnij ograniczenia z tabeli.

Najważniejsze różnice między bazą relacyjną a nierelacyjną

Baza relacyjna zapisuje powiązania w modelu danych. Baza nierelacyjna wymaga zaprojektowania dostępu odpowiedniego dla swojego modelu. Aplikacja inaczej przygotuje więc zapisy i zapytania.
Żadna z tych nazw nie gwarantuje wydajności ani dopasowania do projektu.

Co warto zapamiętać z porównania SQL i NoSQL?

Wybór SQL lub NoSQL zależy od dominujących odczytów, zmian danych i wymaganej integralności. SQL może nie pasować, gdy powiązania w tabelach nie pomagają w potrzebnych odczytach. NoSQL wymaga ostrożności przy zapytaniach spoza wybranego modelu.
Decyzję o systemie trzeba oddzielić od decyzji o modelu danych.

SQL i NoSQL rozwiązują różne problemy organizacji danych. Wybór powinien odpowiadać operacjom aplikacji.

Zalety i ograniczenia baz SQL w konkretnych zastosowaniach

Bazy SQL przydają się, gdy aplikacja musi utrzymywać poprawne powiązania i tworzyć zestawienia według różnych kryteriów. Ograniczenia widać wtedy, gdy zmiana zapisu wymaga przebudowy schematu. Znaczenie ma też obciążenie bazy operacyjnej przez złożone zapytania.

Mocne i słabe strony modelu SQL

Model SQL pozwala zapisać reguły poprawności w bazie, zamiast powierzać ich kontrolę wyłącznie aplikacji. Integralność transakcyjna oznacza zachowanie tych reguł przy zatwierdzaniu powiązanych zmian.
Reguły trzeba jednak wcześniej określić. Ich późniejsza zmiana może wymagać modyfikacji schematu i kodu aplikacji.

Zalety i wady relacyjnych baz danych

Relacyjną bazę warto oceniać według korzyści i kosztu w konkretnym projekcie, nie samej możliwości użycia SQL.

Tabela porównuje zastosowania relacyjnej bazy, korzyści dla projektu i ograniczenia, które trzeba uwzględnić.

ZastosowanieKorzyść z modelu relacyjnegoOgraniczenie – dla kogo nie
Ewidencja zamówieńKontrola powiązań między zamówieniem, pozycjami i płatnościąNie dla projektu bez takich powiązań, w którym obiekty stale zmieniają strukturę
Zestawienia przekrojoweŁączenie danych według kryteriów potrzebnych użytkownikowiNie dla projektu bez takich zestawień, odczytującego tylko całe obiekty
Dane o ustalonych regułachEgzekwowanie typów pól i powiązań przy zapisieNie dla projektu przyjmującego odmienne struktury bez wcześniejszej zmiany schematu

Kiedy zalety SQL mają największe znaczenie?

Zalety SQL liczą się szczególnie wtedy, gdy błędne powiązanie danych wpływa na aplikację. Podobnie jest przy zmiennych zestawieniach przekrojowych. Utrzymanie schematu pomaga wówczas kontrolować zapisy i zapytania.
Projekt oparty na niezależnych obiektach odczytywanych w całości korzysta z tych zalet w mniejszym stopniu.

SQL warto wybrać, gdy kontrola powiązań i zapytania przekrojowe uzasadniają koszt utrzymania schematu.

Architektura wdrożenia: rozbudowa i rozmieszczenie danych

Architektura wdrożenia może łączyć SQL i NoSQL, jeśli aplikacja ma różne wymagania wobec transakcji i danych o zmiennej strukturze. SQL może wtedy obsługiwać transakcje, a NoSQL skalowanie i elastyczny zapis1.
Trzeba jednak określić, który system odpowiada za każdą informację oraz jak zmiany przepływają między bazami.

Lista pokazuje, kiedy podział zadań między bazy pomaga aplikacji, a kiedy zwiększa złożoność wdrożenia.

  • Własność danych przypisuje zapis każdej informacji do wybranego systemu. Bez jasnego podziału aplikacja może wprowadzić sprzeczne zmiany w SQL i NoSQL.
  • Przepływ zmian określa, co jest kopiowane między systemami i kiedy pojawia się w odczycie. Opóźnienie kopiowania wpływa na funkcje wymagające aktualnego stanu.
  • Obsługa awarii określa działanie aplikacji podczas niedostępności jednego z systemów. Mieszane wdrożenie wymaga też kopii zapasowych i monitorowania każdej bazy.

Łączenie SQL i NoSQL ma sens, gdy odrębne zadania baz uzasadniają integrację. Bez takiego podziału prostsza architektura oznacza mniej zależności.

Źródło danych dla BI: jak dopasować bazę do dashboardów i raportów?

Źródło danych dla BI dobieraj do zapytań potrzebnych w dashboardach i raportach, nie tylko do sposobu zapisu w aplikacji. Złożone zapytanie łączy, filtruje lub agreguje dane według kryteriów analizy. Może więc wymagać innej struktury niż bieżący zapis.

  • Wymagania raportowe określają miary, filtry i dane, które dashboard ma zestawiać.
  • Poziom szczegółowości trzeba ustalić dla każdej miary, by raport nie łączył danych dotyczących różnych zdarzeń lub okresów.
  • Aktualność danych określa, kiedy zapis z aplikacji ma pojawić się w raporcie.
  • Źródło SQL trzeba ocenić pod kątem łączenia danych i obciążenia bazy obsługującej zapisy. Bezpośredni odczyt nie pasuje, jeśli raporty utrudniają jej podstawową pracę.
  • Źródło NoSQL trzeba ocenić pod kątem pól potrzebnych do filtrowania i agregacji. Model służący tylko do pobierania całych obiektów może nie wystarczyć do zestawień przekrojowych.

Model raportowy przygotuj oddzielnie, gdy struktura danych aplikacji nie odpowiada zapytaniom BI.
Źródło powinno dostarczać poprawne miary bez zakłócania bieżących zapisów.

Odczyt raportów a zapis danych: różne wymagania wobec bazy

Odczyt raportów wymaga zestawiania danych, a zapis operacyjny sprawnego utrwalania zmian aplikacji. Obszerny raport uruchomiony na bazie bieżących zapisów korzysta z tych samych zasobów co aplikacja.
Podział SQL–NoSQL nie usuwa tego konfliktu. Liczy się przygotowanie danych do odczytu i rozdzielenie obciążeń.

Tabela pokazuje wpływ odczytów, zapisów i zmian struktury na raportowanie oraz pracę aplikacji.

Rodzaj obciążeniaWpływ na raportWpływ na pracę aplikacji
Częste odczytyPowtarzane agregacje wymagają danych przygotowanych do analizyRaporty konkurują z bieżącymi operacjami o zasoby bazy
Częste zapisyWyniki muszą odpowiadać ustalonej zasadzie aktualnościZapis musi spełniać wymagania integralności
Częste zmiany strukturyMiary i pola raportu wymagają dostosowaniaAplikacja musi obsługiwać nowy układ danych

Baza operacyjna powinna przede wszystkim poprawnie obsługiwać zapisy aplikacji, a model raportowy potrzebne odczyty.
Gdy te zadania kolidują, oddzielne przygotowanie danych do analizy ogranicza wpływ raportów na bieżącą pracę.

Bazy dokumentowe: dane zapisane jako dokumenty

Bazy dokumentowe zapisują obiekty jako dokumenty z polami i wartościami. Aplikacja może pobrać dokument w całości lub wyszukać go według pól obsługiwanych przez system.
To odpowiada odczytowi kompletnego obiektu. Zapytania obejmujące wiele dokumentów trzeba jednak zaplanować osobno.

JSON zapisuje dane jako nazwane pola i wartości. XML używa znaczników, a YAML czytelnego zapisu tekstowego.
Format wymiany danych w aplikacji nie przesądza o sposobie ich przechowywania ani o zapytaniach dostępnych w bazie dokumentowej.

Model dokumentowy warto ocenić według tego, czy potrzebne dane mieszczą się w pobieranym obiekcie. Liczy się też sposób aktualizacji informacji zapisanych w innych dokumentach.

Bazy grafowe: modelowanie relacji między danymi

Bazy grafowe zapisują obiekty jako węzły, a powiązania jako krawędzie. Model ten służy zapytaniom przechodzącym między obiektami po określonych relacjach.
Krawędź może wskazywać rodzaj powiązania, dzięki czemu zapytanie odróżni współpracę od zależności organizacyjnej.

Graf ma znaczenie, gdy odpowiedź zależy od ścieżki między obiektami, nie tylko od ich cech. Projektant ustala, co jest węzłem, jakie relacje są krawędziami i w którym kierunku aplikacja je odczytuje.
Przy pobieraniu wyłącznie samodzielnych obiektów po identyfikatorze utrzymywanie grafu dodaje pracy bez korzyści dla zapytań.

Baza grafowa pasuje do analizy ścieżek powiązań, nie do każdego projektu zawierającego relacje.

Integrate.io a integracja relacyjnych i nierelacyjnych baz danych

Integrate.io należy rozpatrywać jako rozwiązanie związane z przepływem danych między SQL i NoSQL, nie jako trzeci model bazy. Przy integracji trzeba ustalić źródło każdego pola, sposób przekształcenia danych i miejsce odczytu wyniku.

Mapowanie danych przypisuje pola źródłowe do pól docelowych. Projekt musi uwzględnić odmienne struktury rekordów, późniejsze zmiany danych i reguły rozstrzygania rozbieżności.
Nazwa rozwiązania integracyjnego nie określa możliwości łączonych baz.

Integracja SQL i NoSQL wymaga jasnego przepływu danych oraz podziału odpowiedzialności, niezależnie od wybranego rozwiązania.

Najczęściej zadawane pytania

Czy MongoDB jest bazą SQL czy NoSQL?

MongoDB jest bazą NoSQL. Może przechowywać dane w dokumentach BSON.

Gdzie znaleźć bezpłatne zasoby SQL i dotyczące danych?

Artykuł wymienia SqlInSix Tech Blog, ale nie podaje katalogu bezpłatnych zasobów ani sposobu dostępu.

Czy Aerospike jest wydajniejszy od Redis pod względem efektywności?

Artykuł nie porównuje Aerospike z Redis, więc nie pozwala stwierdzić, który system jest wydajniejszy. Wskazuje, że wybór trzeba oprzeć na operacjach aplikacji i możliwościach konkretnej bazy.

Jakie pięć problemów z MongoDB warto sprawdzić w projekcie?

Sprawdź limit rozmiaru dokumentu BSON, zmienną strukturę rekordów, ustawienia walidacji, zakres transakcji obejmujących wiele dokumentów oraz limit indeksów w kolekcji. Artykuł podaje odpowiednio limit 16 MiB, obsługę takich transakcji od wersji 4.0 i maksymalnie 64 indeksy.

Czy jedno wywołanie DynamoDB Query może zwrócić dowolnie duży wynik?

Nie. Jedno wywołanie odczytuje maksymalnie 1 MB danych; większy wynik wymaga paginacji.

Jaki warunek musi spełniać operacja Query w DynamoDB?

Wymaga nazwy klucza partycji i jednej jego wartości podanej w warunku równości.

Jaki jest maksymalny rozmiar elementu w DynamoDB?

Pojedynczy element może mieć maksymalnie 400 KB, wliczając nazwy i wartości atrybutów.

Jakie poziomy walidacji dokumentów są dostępne w MongoDB 9.0?

Parametr validationLevel przyjmuje wartości off, moderate, strict i constraint.

Następny krok · Porównaj oferty w rankinguKursy SQL i analizy danych

Źródła

  1. ↑SQL vs NoSQL: 5 Critical Differences | Integrate.io https://www.integrate.io/blog/the-sql-vs-nosql-difference/
  2. ↑Stack Overflow Developer Survey 2024 https://survey.stackoverflow.co/2024/technology
  3. ↑MongoDB, „MongoDB 4 Update: Multi-Document ACID Transactions”. ([mongodb.com](mongodb.com https://www.mongodb.com/company/blog/product-release-announcements/mongodb-multi-document-acid-transactions-general-availability
  4. ↑MongoDB — Documents https://www.mongodb.com/docs/v8.0/core/document/
  5. ↑NoSQL Vs SQL Databases | MongoDB https://www.mongodb.com/resources/basics/databases/nosql-explained/nosql-vs-sql
  6. ↑docs.aws.amazon.com https://docs.aws.amazon.com/keyspaces/latest/devguide/cql.ddl.table.html
  7. ↑MongoDB — create (database command) https://www.mongodb.com/docs/manual/reference/command/create/
  8. ↑Amazon DynamoDB — Key condition expressions for the Query operation https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.KeyConditionExpressions.html
  9. ↑Amazon DynamoDB — Read and write operations https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/read-write-operations.html
  10. ↑Microsoft Learn, „Understand data models”. ([learn.microsoft.com](learn.microsoft.com https://learn.microsoft.com/en-us/azure/architecture/data-guide/technology-choices/understand-data-store-models
  11. ↑Microsoft Learn, „Scaling out — Azure SQL Database”. ([learn.microsoft.com](learn.microsoft.com https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-introduction
  12. ↑Amazon DynamoDB — TransactWriteItems https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html
  13. ↑Amazon DynamoDB — Constraints https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Constraints.html
  14. ↑MongoDB — Limits and Thresholds https://www.mongodb.com/docs/manual/reference/limits/
  15. ↑Microsoft Learn, „Polyglot Persistence with Azure Cosmos DB and Azure SQL Database”. ([learn.microsoft.com](learn.microsoft.com https://learn.microsoft.com/en-us/azure/architecture/databases/idea/combine-relational-nosql
  16. ↑PostgreSQL — Lexical Structure https://www.postgresql.org/docs/current/sql-syntax-lexical.html
  17. ↑PostgreSQL — Multicolumn Indexes https://www.postgresql.org/docs/current/indexes-multicolumn.html
  18. ↑PostgreSQL — Query Planning https://www.postgresql.org/docs/current/runtime-config-query.html
  19. ↑dokumentacja PostgreSQL, „Constraints”. ([postgresql.org](postgresql.org https://www.postgresql.org/docs/current/ddl-constraints.html
  20. ↑SQL vs. NoSQL Databases: What’s the Difference? | IBM https://www.ibm.com/think/topics/sql-vs-nosql
  21. ↑SQL vs. NoSQL: Which Database is Right for Your Application? | Aerospike https://aerospike.com/blog/sql-vs-nosql/
  22. ↑dokumentacja MongoDB, „Maintain Different Schema Versions”. ([mongodb.com](mongodb.com https://www.mongodb.com/docs/manual/data-modeling/design-patterns/data-versioning/schema-versioning/
  23. ↑SQL vs NoSQL: Differences explained | OVHcloud Worldwide https://www.ovhcloud.com/en/learn/sql-vs-nosql/
  24. ↑When To Use SQL and NoSQL | Medium https://sqlinsix.medium.com/when-to-use-sql-or-nosql-b50d4a52c157
  25. ↑Microsoft Learn, „Prepare to choose a data store in Azure”. ([learn.microsoft.com](learn.microsoft.com https://learn.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-stores-getting-started
  26. ↑IBM, „What is Application Scaling and How Does It Work?”. ([ibm.com](ibm.com https://www.ibm.com/think/topics/application-scaling
  27. ↑IBM, „What Is Database Optimization?”. ([ibm.com](ibm.com https://www.ibm.com/think/topics/database-optimization
  28. ↑IBM Cloud Docs, „IBM Cloudant Query performance guide”. ([cloud.ibm.com](cloud.ibm.com https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-cloudant-query-performance-guide
  29. ↑IBM Cloud Docs, „IBM Cloudant in practice”. ([cloud.ibm.com](cloud.ibm.com https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-cloudant-in-practice