encyklopedia.space

NoSQL

NoSQL (ang. Not only SQL) to grupa systemów zarządzania bazami danych, które nie stosują tradycyjnego modelu relacyjnego i języka SQL. Systemy NoSQL zostały opracowane w odpowiedzi na rosnące wymagania aplikacji internetowych, mobilnych i big data, które potrzebują wysokiej skalowalności, niskich opóźnień i elastycznej struktury danych.

Historia

Początkowo pojęcie NoSQL było używane w latach 1998 i 2000 w odniesieniu do systemów nieużywających języka SQL. W latach 2009 pojęcie zostało spopularyzowane przez amerykańskiego programistę Erica Raymonda, który w swoim wpisie na blogu „The NoSQL Movement” zdefiniował je jako "bazy danych, które nie wykazują potrzeby używania relacyjnego modelu danych i języka SQL". Od tego czasu ruch NoSQL przyspieszył, zwłaszcza w kontekście rosnących potrzeb w zakresie przetwarzania danych w czasie rzeczywistym i obsługi dużych wolumenów transakcji.

Klasyfikacja

Systemy NoSQL dzieli się zwykle na cztery główne kategorie:

  • Klucz‑wartość (Key‑Value Store) – najprostszy model, w którym dane przechowywane są jako pary klucz:wartość. Przykłady: Redis, Riak.
  • Dokumentowy (Document Store) – dane są przechowywane w postaci dokumentów (np. JSON, BSON, XML). Przykłady: MongoDB, CouchDB.
  • Kolumnowy (Wide‑Column Store) – dane organizowane są w rodzinach kolumn, co umożliwia efektywne odczyty dużych zestawów danych. Przykłady: Apache Cassandra, HBase.
  • Grafowy (Graph Database) – model przyświeca relacjom pomiędzy wierzchołkami (encjami) i krawędziami (relacjami). Przykłady: Neo4j, Titan.

Charakterystyka

Systemy NoSQL wyróżnia szereg cech, które odróżniają je od tradycyjnych relacyjnych baz danych:

Skalowalność pozioma
Możliwość rozbudowy systemu przez dodanie kolejnych węzłów (sharding) zamiast jedynie zwiększania mocy pojedynczego serwera.
Elastyczność schematu
Brak sztywnego schematu tabel; struktura danych może się zmieniać w czasie bez konieczności migracji.
Wydajność przy dużych wolumenach danych
Operacje odczytu i zapisu są zoptymalizowane pod kątem niskich opóźnień, co jest istotne w aplikacjach czasu rzeczywistego.
Model spójności
Wiele systemów przyjmuje model CAP oraz konsystencję eventualną zamiast natychmiastowej spójności ACID.

Zalety i wady

Zalety

  • Łatwa skalowalność pozioma – idealna dla aplikacji o rosnącym obciążeniu.
  • Elastyczne modele danych – możliwość przechowywania zróżnicowanych struktur w jednej bazie.
  • Wysoka wydajność przy operacjach prostych (np. odczyt klucza, zapis dokumentu).
  • Optymalizacja pod konkretne typy zapytań (np. traversale grafowe).

Wady

  • Ograniczona obsługa złożonych zapytań i transakcji w porównaniu do SQL.
  • Brak standaryzacji – każde rozwiązanie może mieć inny interfejs i API.
  • Wymagane dodatkowe mechanizmy zapewniające spójność danych (np. two‑phase commit).
  • Większa złożoność architektury przy konieczności utrzymania replikacji i podziału danych.

Zastosowania

NoSQL sprawdza się w wielu scenariuszach, w tym:

  • Systemy rekomendacji i analizy zachowań użytkowników (big data).
  • Aplikacje mobilne i sieciowe wymagające szybkiego dostępu do danych (czas rzeczywisty).
  • Logowanie zdarzeń i przechowywanie metryk (monitoring).
  • Przechowywanie danych semistrukturalnych, np. dokumentów JSON w aplikacjach CMS.
  • Modelowanie sieci społecznościowych i zależności w bazach grafowych.

Przykładowe systemy NoSQL

Kategoria System Opis
Klucz‑wartość Redis In‑memory store z obsługą struktur danych, wykorzystywany m.in. jako cache.
Dokumentowy MongoDB Baza dokumentowa oparta na formacie BSON, umożliwiająca złożone zapytania.
Kolumnowy Apache Cassandra Rozproszona baza szerokokolumnowa, zapewniająca wysoką dostępność.
Grafowy Neo4j Baza grafowa służąca do analizy połączeń i zależności.

Porównanie z relacyjnymi bazami danych

Poniższa tabela przedstawia kluczowe różnice pomiędzy bazami relacyjnymi a systemami NoSQL.

Aspekt Relacyjne bazy danych NoSQL
Model danych Struktura tabelaryczna, sztywne schematy Różnorodne modele (klucz‑wartość, dokument, kolumnowy, grafowy), schematy dynamiczne
Język zapytań Standardowy SQL Specyficzne API lub języki zapytań (np. MongoDB Query Language)
Skalowalność Skalowalność pionowa (większy serwer) Skalowalność pozioma (dodawanie węzłów)
Spójność Wysoka, ACID Często eventualna, CAP‑trade‑off
Transakcje W pełni obsługiwane Ograniczona lub wymagana dodatkowa warstwa

Przyszłość NoSQL

W miarę jak rośnie zapotrzebowanie na przetwarzanie danych w czasie rzeczywistym oraz rozwijają się architektury mikroserwisów, rola baz NoSQL będzie prawdopodobnie rosła. Współczesne rozwiązania coraz częściej łączą cechy zarówno systemów tradycyjnych, jak i NoSQL, tworząc hybrydowe platformy, które zapewniają spójność i wydajność przy elastyczności modelu danych.

Źródła i dalsza lektura

Więcej informacji można znaleźć w następujących artykułach: