MongoDB to otwarty, nierelacyjny system zarządzania bazą danych napisany w języku C++. Charakteryzuje się brakiem ściśle zdefiniowanej struktury obsługiwanych baz danych. Zamiast tego dane składowane są jako dokumenty w stylu JSON.
Cechy:
jednorodne wsparcie dla standardu Unicode,
obsługa danych w innych kodowaniach w formacie binarnym,
duża liczba obsługiwanych typów danych,
obsługa kursorów,
zapytania ad-hoc,
zapytania do zagnieżdżonych pól dokumentów,
indeksowanie,
wsparcie dla agregacji danych,
możliwość składowania plików w bazie,
architektura zaprojektowana z myślą o łatwej replikacji.
Wewnętrznym językiem do definiowania zapytań oraz funkcji agregujących jest JavaScript wykonywany bezpośrednio przez serwer MongoDB.
SQLite to otwartoźródłowy system zarządzania relacyjną bazą danych oraz biblioteka C implementująca taki system, obsługująca SQL. Została stworzona przez Richarda Hippa i jest dostępna na licencji domeny publicznej. Projekt został rozpoczęty w roku 2000.
Biblioteka implementuje silnik SQL, dając możliwość używania bazy danych bez konieczności uruchamiania osobnego procesu RDBMS. W wielu zastosowaniach, a w szczególności w systemach wbudowanych, takie rozwiązanie jest najpraktyczniejsze.
SQLite posiada również API do innych niż C języków programowania, a mianowicie: ActionScript, Perl, PHP, Ruby, C++, Delphi, Python, Java, Tcl, Visual Basic, platformy .NET i wielu innych; a także interfejs powłokowy. Baza może łączyć się przez ODBC.
Zawartość bazy danych przetrzymywana jest w jednym pliku (do 281 TB). Baza SQLite jest utrzymywana na dysku przy użyciu B-drzew. Osobne drzewo jest używane dla każdej z tabel i każdego z indeksów. Baza udostępnia transakcje ACID oraz implementuje większość standarduSQL 92. Jest często wykorzystywany w większych aplikacjach oraz w systemach obsługi relacyjnych baz danych takich jak Kexi.
Bazy danych zapisywane są jako pliki binarne lub przechowywane w pamięci o dostępie swobodnym. Ich bezpieczeństwo jest oparte na zabezpieczeniach oferowanych przez używany system plików. Istnieje też projekt oferujący szyfrowanie baz danych SQLite na bieżąco o nazwie SQLite Encryption Extension (SEE).
SQLite obsługuje między innymi:
zapytania zagnieżdżone,
widoki,
klucze obce,
transakcje,
wyzwalacze (częściowo),
definiowanie własnych funkcji,
przechowywanie baz danych w pamięci RAM komputera, co znacznie przyspiesza działanie.
Niektórych z wymienionych cech brakuje nawet w rozbudowanych serwerach baz danych, na przykład w MySQL w wersjach starszych niż 5.0.2 brakuje transakcji, a wydajność SQLite (przy obsłudze jednego użytkownika) w porównaniu z serwerami baz danych MySQL oraz PostgreSQLjest bardzo wysoka.
PostgreSQL, także Postgres – obok MySQL i SQLite, jeden z najpopularniejszych otwartych systemów zarządzania relacyjnymi bazami danych. Początkowo opracowywany na Uniwersytecie Kalifornijskim w Berkeley i opublikowany pod nazwą Ingres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. Aktualnie baza implementuje większość standardu SQL:2016.
Większość dystrybucji Linuksa zawiera pakiety umożliwiające instalację bazy PostgreSQL. MacOS, od wersji Lion, posiada pakiety instalacyjne bazy w wersji serwerowej systemu operacyjnego oraz narzędzia klienckie w wersji desktopowej.
PostgreSQL zalicza się do baz typu RDBMS z rozszerzeniami obiektowymi.
Użycie liter różnej wielkości w nazwie PostgreSQL prowadzi często do nieporozumień. Oficjalną i jedyną nazwą jest PostgreSQL. Często używanym zdrobnieniem jest Postgres. Nazwa nawiązuje do początków projektu jako „post-Ingres”.
MySQL to wolnodostępny, otwartoźródłowy, system zarządzania relacyjnymi bazami danych.
MySQL rozwijany jest przez firmę Oracle. Wcześniej przez większość czasu jego tworzeniem zajmowała się szwedzka firma MySQL AB. MySQL AB została kupiona 16 stycznia 2008 roku przez Sun Microsystems, a ten 27 stycznia 2010 roku przez Oracle. W międzyczasie Monty Widenius (współtwórca MySQL) stworzył MariaDB – forka (alternatywną wersję) opartego na licencji GPL. MariaDB jest oparta na tym samym kodzie bazowym co MySQL i dąży do utrzymania kompatybilności z jej poprzednimi wersjami.
MySQL był pisany raczej z myślą o szybkości niż kompatybilności ze standardem SQL – przez dłuższy czas MySQL nie obsługiwał nawet transakcji, co było zresztą głównym argumentem przeciwników tego projektu. MySQL obsługuje większą część obecnego standardu ANSI/ISO SQL (tj. SQL:2003). Wprowadza również swoje rozszerzenia i nowe elementy języka.
W wersji 5 dodano m.in.:
procedury składowane (ang. stored procedures) – obecne od wersji 5.0,
wyzwalacze (ang. triggers) – obecne od wersji 5.0.2
widoki
kursory – obecne od wersji 5.1
partycjonowanie tabel – od wersji 5.1
harmonogram zadań – od wersji 5.2
co zbliża najnowsze wersje MySQL do PostgreSQL pod względem funkcjonalności.
MySQL zawiera wsparcie dla replikacji bazy danych (w trybie master-slave i master-master) i wielojęzyczności – każda tabela i kolumna może mieć własne ustawienie kodowania znaków.
W wersji 5.6 wprowadzono kilka istotnych zmian poprawiających skalowalność i niezawodność środowiska oraz wprowadzających nowatorskie rozwiązania, np.:
semi-synchroniczna replikacja
replikacja wielowątkowa
rozbudowane możliwości monitorowania przez tzw. PERFORMANCE_SCHEMA
interfejs API typu NoSQL z wykorzystaniem memcached
Serwer MySQL dostępny jest dla wszystkich popularnych platform systemowych i różnorakich architektur procesorów. Jest dostępny także w wersji źródłowej, co umożliwia skompilowanie go dla dowolnej innej platformy.
strukturalny oraz deklaratywny język zapytań. Jest to język dziedzinowy używany do tworzenia, modyfikowania relacyjnych baz danychoraz do umieszczania i pobierania danych z tych baz.
Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych (DBMS).
Ponieważ SQL jest językiem interpretowanym, istnieje możliwość nadużyć w przypadku konstruowania zapytań z wykorzystaniem parametrów pochodzących z zewnątrz aplikacji. Szczególnie podatne na ten typ ataku są tworzone dynamicznie w oparciu o SQL-ową bazę danych serwisy internetowe. Jeśli twórca aplikacji nie zadba o sprawdzenie poprawności (tzw. walidację) danych wejściowych stanowiących część zapytania, atakujący może dopisać do zapytania („wstrzyknąć”) dodatkowe komendy lub zmienić ich sposób działania. Atak taki nosi nazwę SQL injection(wstrzyknięcie kodu za pomocą SQL).
Wybrane zapytania SQL:
--lista tabel w bazie danych
SHOW TABLES;
--tworzenie tabeli
CREATE TABLE osoby (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(60) NOT NULL UNIQUE,
imie VARCHAR(30),
nazwisko VARCHAR(50)
);
--warunkowe tworzenie tabeli
CREATE TABLE IF NOT EXISTS osoby (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(60) NOT NULL UNIQUE,
imie VARCHAR(30),
nazwisko VARCHAR(50)
);
--struktura tabeli
DESCRIBE osoby;
--zmiana nazwy tabeli
ALTER TABLE osoby
RENAME klienci;
--dodanie pola do tabeli (na końcu listy pól)
ALTER TABLE klienci
ADD plec CHAR(1);
--dodanie pola do tabeli w wybranym miejscu
ALTER TABLE klienci
ADD rocznik INT
AFTER id;
--dodanie pola do tabeli w wybranym miejscu
ALTER TABLE klienci
ADD kod_pocztowy CHAR(6)
FIRST;
--usunięcie pola z tabeli
ALTER TABLE klienci
DROP COLUMN kod_pocztowy;
--zmiana typu danych pola
ALTER TABLE klienci
MODIFY imie VARCHAR(45);
--zmiana nazwy pola oraz zmiana typu danych pola
ALTER TABLE klienci
CHANGE rocznik rok_urodzenia SMALLINT UNSIGNED;
--tworzenie pustej tabeli o takiej samej strukturze jak wskazana tabela
CREATE TABLE kopia_klienci LIKE klienci;
--skopiowania wszystkich danych z jednej tabeli do drugiej o identycznej strukturze
INSERT kopia_klienci
SELECT *
FROM klienci;
--usunięcie tabeli (!!)
DROP TABLE kopia_klienci;