SQLite 3.53.3

Lekka, bezserwerowa, wbudowana i autonomiczna baza danych.


Stare Wersje

Zobacz Wszystkie Stare Wersje

Opis


SQLite to lekki, otwarty system zarządzania relacyjnymi bazami danych, zaprojektowany do bezpośredniego wbudowania w aplikacje, oferujący efektywne rozwiązanie do przechowywania i zarządzania danymi bez potrzeby posiadania dedykowanego serwera. 

Czym jest SQLite?

SQLite to biblioteka bazodanowa napisana w C, która implementuje kompletny, samodzielny, bezserwerowy i bezkonfiguracyjny mechanizm relacyjnej bazy danych SQL. Przechowuje całą bazę danych (tabele, indeksy, dane itp.) w jednym pliku na dysku, co ułatwia jej przenoszalność i użycie w różnych systemach. Stworzony przez D. Richarda Hippa w 2000 roku, SQLite jest powszechnie wykorzystywany w aplikacjach wymagających lokalnej bazy danych, takich jak aplikacje mobilne, systemy osadzone, przeglądarki internetowe oraz oprogramowanie desktopowe.

Najważniejsze cechy

  1. Bez serwera (Serverless):
    • W przeciwieństwie do baz danych takich jak MySQL czy PostgreSQL, SQLite nie wymaga osobnego procesu serwera. Biblioteka jest bezpośrednio wbudowana w aplikację, która uzyskuje dostęp do pliku bazy danych za pomocą wywołań funkcji. To zmniejsza obciążenie i upraszcza konfigurację.
  2. Samodzielny:
    • SQLite nie zależy od zewnętrznych bibliotek (oprócz standardowej biblioteki C) i zawiera wszystko, co potrzebuje do działania. Czyni to go idealnym do środowisk o ograniczonych zasobach, takich jak urządzenia osadzone.
  3. Pojedynczy plik:
    • Cała baza danych, w tym dane, schematy i indeksy, jest przechowywana w jednym pliku z rozszerzeniem .db lub .sqlite. Plik ten jest przenośny i może być łatwo kopiowany lub przenoszony między systemami, o ile są one zgodne z architekturą SQLite.
  4. Transakcje ACID:
    • SQLite obsługuje transakcje z właściwościami ACID (Atomowość, Spójność, Izolacja, Trwałość), co gwarantuje niezawodność w operacjach zapisu i odczytu, nawet w przypadku awarii (np. przerwy w zasilaniu).
  5. Wsparcie dla standardowego SQL:
    • SQLite implementuje większość standardu SQL (SQL92, z rozszerzeniami), w tym wsparcie dla tabel, indeksów, kluczy głównych i obcych, wyzwalaczy (triggers), widoków (views) oraz podzapytań. Jednak posiada pewne ograniczenia, takie jak częściowe wsparcie dla ALTER TABLE oraz brak wsparcia dla RIGHT OUTER JOIN i FULL OUTER JOIN.
  6. Dynamiczna typizacja:
    • W przeciwieństwie do innych baz relacyjnych, SQLite używa dynamicznej typizacji, co pozwala kolumnie przechowywać wartości różnych typów (np. liczby całkowite, teksty lub wartości null w tej samej kolumnie). Definiuje "affinities of type" (takie jak INTEGER, TEXT, BLOB), aby prowadzić przechowywanie, ale nie nakłada surowych ograniczeń.
  7. Lekki i szybki:
    • SQLite jest niezwykle wydajny, z rozmiarem biblioteki wynoszącym około 700 KB. Jest zoptymalizowany do operacji odczytu i zapisu na umiarkowanych ilościach danych, z wydajnością porównywalną lub lepszą od innych systemów w scenariuszach o niskiej konkurencji.
  8. Licencja publiczna:
    • SQLite jest w domenie publicznej, co oznacza, że może być swobodnie używany w projektach komercyjnych lub open source bez ograniczeń licencyjnych.

Wewnętrzne działanie

  • Architektura:
    • SQLite działa jako biblioteka wbudowana w aplikację, która wykonuje bezpośrednie wywołania w celu zarządzania plikiem bazy danych. Używa wewnętrznego silnika bazy danych, który zawiera parser SQL, optymalizator zapytań oraz menedżera przechowywania.
    • Przechowywanie bazuje na wydajnym formacie pliku binarnego, który wykorzystuje stałe strony dysku (zazwyczaj 4 KB) do organizacji danych i indeksów w strukturze drzewa B+.
  • Współbieżność:
    • SQLite wspiera wiele połączeń do tej samej bazy, ale z ograniczeniami. Używa blokady pliku do zarządzania współbieżnością, umożliwiając tylko jedną operację zapisu w danym czasie (serializacja). Odczyty mogą być współbieżne, ale zapisy blokują inne operacje.
    • Od wersji 3.7.0 SQLite obsługuje tryb WAL (Write-Ahead Logging), który poprawia współbieżność, pozwalając na równoczesne odczyty podczas operacji zapisu, chociaż nadal ogranicza do jednego zapisu na raz.
  • Rozszerzalność:
    • SQLite pozwala na tworzenie własnych rozszerzeń, takich jak funkcje zdefiniowane przez użytkownika (UDF) w C lub innych językach, i wspiera dodatkowe moduły, takie jak FTS (Full-Text Search) do zaawansowanego wyszukiwania tekstowego.

Zalety

  • Łatwość użycia: Nie wymaga konfiguracji serwera ani skomplikowanej administracji, idealny dla deweloperów, którzy potrzebują prostego rozwiązania.
  • Przenośność: Plik bazy danych można łatwo przenosić lub kopiować, bez zewnętrznych zależności.
  • Niski pobór zasobów: Konsumuje mało pamięci i miejsca na dysku, idealny dla urządzeń o ograniczonych zasobach, takich jak smartfony czy urządzenia IoT.
  • Wiarygodność: Wsparcie dla transakcji ACID gwarantuje integralność danych, nawet w scenariuszach awaryjnych.
  • Szerokie zastosowanie: Wykorzystywany w miliardach urządzeń, w tym przeglądarkach (Firefox, Chrome), systemach operacyjnych mobilnych (Android, iOS) oraz aplikacjach takich jak Adobe Lightroom i Skype.

Wady

  • Ograniczona współbieżność: Nie nadaje się do aplikacji z dużą konkurencją zapisu, takich jak serwery webowe obsługujące tysiące jednoczesnych użytkowników. W takich przypadkach bardziej odpowiednie są bazy danych takie jak PostgreSQL lub MySQL.
  • Skalowalność: Choć wydajny dla baz danych do kilku terabajtów, SQLite nie jest zoptymalizowany dla dużych ilości danych ani złożonych obciążeń analitycznych.
  • Niedostosowane funkcje SQL: Brakuje wsparcia dla niektórych zaawansowanych funkcji, takich jak RIGHT OUTER JOIN, procedury składowane oraz złożone zmiany w schematach za pomocą ALTER TABLE.
  • Bezpieczeństwo: SQLite nie ma natywnej kontroli dostępu (takiej jak użytkownicy i uprawnienia), ponieważ dostęp zarządzany jest przez system plików.

Przykłady użycia

  • Aplikacje mobilne: Używany w Androidzie i iOS do przechowywania danych aplikacji, takich jak wiadomości, kontakty i ustawienia.
  • Systemy osadzone: Powszechny w urządzeniach IoT, inteligentnych telewizorach i urządzeniach AGD ze względu na niski pobór zasobów.
  • Aplikacje desktopowe: Oprogramowanie, takie jak przeglądarki (do przechowywania historii i cookies) oraz menedżery mediów, wykorzystują SQLite.
  • Prototypowanie: Przydatny do opracowywania i testowania aplikacji przed migracją do bazy danych typu klient-serwer.
  • Lokalne bazy danych: Idealny dla aplikacji samodzielnych, które nie wymagają dostępu zdalnego ani dużej współbieżności.

Podsumowanie

SQLite to solidne, lekkie i wszechstronne rozwiązanie dla aplikacji, które potrzebują lokalnej bazy danych, niezawodnej i łatwej do integracji. Choć nie nadaje się do sytuacji o dużej współbieżności lub dużych ilościach danych, jego prostota, przenośność i wydajność czynią go popularnym wyborem w szerokim zakresie przypadków, od urządzeń mobilnych po systemy osadzone.