29 sie

Porównanie relacyjnych SZBD: SQLite, MySQL, PostgreSQL

Porównanie: SQLite, MySQL, PostgreSQL
Relacyjne bazy danych używają się już od dłuższego czasu. Dostały taką popularność dzięki systemom zarządzania bazami danych, które bardzo dobrze realizują model relacyjny, który udowodnił, że jest doskonałą metodą pracy z danymi.

W tym artykule spróbujemy wyjaśnić podstawowe różnice niektórych z najczęściej używanych i najbardziej popularnych relacyjnych systemów zarządzania bazami danych (SZBD). Będziemy omawiać czym się różnią pod względem cech i funkcjonalności, jak one działają i który system jest lepszy dla programistów.

Systemy zarządzania bazami danych

Bazy danych są logicznie symulowane przestrzenie (komórki) do przechowywania wszystkich rodzajów informacji (danych).  Każda baza danych, za wyjątkiem nierelacyjnych baz danych (NoSQL, MongoDB itp.), jest modelem, który zapewnia strukturę dla danych, które są rozpatrywane. Systemy zarządzania bazami danych to aplikacje (lub biblioteki), które zarządzają bazami danych o różnych kształtach, rozmiarach i rodzajach.

Systemy zarządzania relacyjnymi bazami danych

Relacyjny system zarządzania bazami danych realizuje model relacyjny do pracy z danymi. To oznacza, że są relacje pomiędzy danymi, które są definiowane atrybutami zapisanymi w tabelach z danymi.

Można zakupić serwer VPS w Hostovita – i nasi administratorzy bez problemów zainstalują potrzebny silnik bazy danych żeby strona ładowała się bez problemów

Te typy systemów zarządzania bazami danych wymagają pewnej struktury (np tabela), które określają sposób reprezentacji i współpracy z danymi. Za pomocą tabel, gdzie każda kolumna (na przykład atrybut) ma inny typ (na przykład tekstowy, numeryczny itd) informacji. Każdy rekord w bazie danych posiada swój unikatowy identyfikator, który określa wiersz w pewnej tabeli, i z zestawem innych atrybutów przedstawia się w postaci kolumn tabeli – wszystkie są związane między sobą, jak to określono w modelu relacyjnym.

Relacje i typy danych

Relacje mogą być traktowane jako zestawy matematyczne, które zawierają szereg atrybutów, które łącznie stanowią bazę danych i przechowują informację. Tego typu metody identyfikacji i zbierania danych pozwalają relacyjnym bazom danych działać w taki sposób, jak oni to robią.

Przy tworzeniu tabeli do przechowywania rekordów, każdy element tworzący rekord (czyli atrybut) musi być dopasowany do zdefiniowanego typu danych (np liczbą całkowita, data, tekst itp.). Różne relacyjne systemy zarządzania bazami danych obsługują różne typy danych.

Uwaga: Jeżeli chcesz pracować z naprawdę niezależnymi, i nie powiązanymi relacjami bazami do przechowywania informacji (np. dokument tekstowy) – zainteresuje Cię NoSQL.

Popularne i najważniejsze relacyjne bazy danych

W tym artykule, planujemy przedstawić trzy główne i jedne z najważniejszych “open source” (z otwartym kodem źródłowym) relacyjnych systemów zarządzania bazami danych, które pomogły w rozwoju tworzenia aplikacji.

SQLite:

Bardzo wydajny, wbudowany relacyjny system zarządzania bazami danych.

MySQL:

Najbardziej popularny i powszechnie wykorzystywany SZBD.

PostgreSQL:

Najbardziej zaawansowany, SQL-zgodny z otwartym kodem obiektowo-relacyjny SZBD.

SQLite

SQLite – to wspaniała biblioteka, która jest wbudowana w aplikację, w której jest używana. SQLite oferuje niesamowity zestaw narzędzi do obsługi wszelkiego rodzaju danych z o wiele mniejszą ilością ograniczeń oraz łatwością.

W momencie gdy aplikacja korzysta z SQLite, integracja ta działa z zapytaniami z funkcji oraz zapytaniami bezpośrednimi od razu w pliku zawierającym dane (czyli baza danych SQLite), zamiast transmisji zapytań przez przeróżne interfejsy (tj. porty, gniazda). To sprawia, że SQLite jest bardzo szybką, sprawną oraz wydajną dzięki użytej technologii bibliotek.

Obsługiwane typy danych SQLite

  • NULL:

Wartość NULL.

  • INTEGER:

Liczba całkowita, jest przechowywana w 1, 2, 3, 4, 6 lub 8 bajtach w zależności od wielkości wartości.

  • REAL:

Wartość zmiennoprzecinkowa, przechowywana jako 8-bajtowa liczba zmiennoprzecinkowa IEEE.

  • TEXT:

Ciąg tekstowy, przechowywany przy użyciu kodowania bazy danych (UTF-8, UTF-16BE lub UTF-16LE).

  • BLOB:

BLOB danych, przechowywany dokładnie tak, jak został on wprowadzony.

Uwaga: aby uzyskać więcej informacji o typach danych w SQLite, zapoznaj się z oficjalną dokumentacją.

Zalety SQLite

  • Działa na plikach:

Cała baza danych składa się z jednego pliku na dysku, co pozwala na łatwe przenoszenie bazy.

  • Standardy:

Chociaż mogłoby się wydawać, że realizacja BD SQLite jest “prosta” bo SQLite korzysta z SQL. Braknie w niej jednak niektórych rzeczy ( RIGHT OUTER JOIN lub FOR EACH STATEMENT).

  • Idealne dla projektowania a nawet testowania:

Na etapie projektowania aplikacji dla większości ludzi jest zapotrzebowanie w rozwiązaniu, które można skalować na rządanie. SQLite z dużą ilością funkcji może zaoferować więcej niż to co jest potrzebne dla rozwoju aplikacji z wykorzystaniem tylko jednego pliku i połączoną biblioteką w języku C.

Wady SQLite

  • Nie ma zarządzania użytkownikami:

Zaawansowane bazy danych są dostarczane z obsługą użytkowników, czyli zarządzanie uprawnieniami do bazy danych i tabel. Biorąc pod uwagę cele i charakter SQLite, tej funkcjonalności w niej nie ma.

  • Brak możliwości korzystania z dodatkowych usług:

Jeżeli chodzi o projektowanie, w SQLite nie ma możliwości uzyskać dużo dodatkowej wydajności. Biblioteka jest łatwa do konfiguracji i łatwa w użyciu. Ponieważ nie jest to trudne, jest to technicznie niemożliwe, aby zrobić go bardziej wydajnym, niż już jest.

Kiedy używać SQLite

  • Wbudowane aplikacje:

Wszystkie aplikacje, które będą przenoszone, które nie wymagają rozszerzenia, np lokalne aplikacje dla jednego użytkownika, aplikacji mobilne i gry.

  • Testowanie:

Testowanie może być zbędne dla dużej części aplikacji, szczególnie do testowania logiki biznesowej (czyli główny cel aplikacji: funkcjonalność).

Kiedy nie używać SQLite

  • Aplikacje dla wielu użytkowników:

Jeżeli pracujesz nad aplikacją, w której będzie wiele klientów korzystających z jednej i tej samej bazy danych, lepiej wybrać bardziej funkcjonalny SZBD (na przykład MySQL), niż SQLite.

  • Aplikacje wymagające dużej ilości wpisów

Jedną z największych ograniczeń SQLite jest operacja zapisu. Ten SZBD pozwala tylko na jedną operację zapisu w danym momencie, a więc ma ograniczoną przepustowość.

MySQL

MySQL jest najbardziej popularny wśród wszystkich dużych serwerów baz danych. Jest to wielofunkcyjny produkt open source, który obsługuje dużo stron internetowych i aplikacji w sieci Internet. Początek pracy z MySQL stosunkowo łatwy i deweloperzy mają dostęp do ogromnej bazy wiedzy w Internecie.

Uwaga: Należy stwierdzić,  że ze względu na popularność produktu, istnieje wiele aplikacji firm trzecich, narzędzi i zintegrowanych bibliotek, które znacznie ułatwiają pracę z tym SZBD.

Mimo tego, MySQL oferuje wiele funkcji dla użytkowników. Jako samodzielny serwer baz danych, aplikacje podłączają się z procesem MySQL, aby uzyskać dostęp do samej bazy danych – w przeciwieństwie do SQLite.

Obsługiwane typy danych MySQL

  • TINYINT:

Mała liczba całkowita (integer).

  • SMALLINT:

Niewielka liczba całkowita (integer).

  • MEDIUMINT:

Liczba całkowita średniej wielkości.

  • INT albo INTEGER:

Liczba całkowita.

  • BIGINT:

Duża liczba całkowita.

  • FLOAT:

Mała liczba zmiennoprzecinkowa. Nie może być unsigned.

  • DOUBLE, DOUBLE PRECISION, REAL:

Liczba zmiennoprzecinkowa normalnego rozmiaru. Nie może być unsigned.

  • DECIMAL, NUMERIC:

Rozpakowana liczba zmiennoprzecinkowa. Nie może być unsigned.

  • DATE:

Data.

  • DATETIME:

Połączenie daty i godziny.

  • TIMESTAMP:

Znacznik czasu.

  • TIME:

Czas.

  • YEAR:

Rok w 2- lub 4- cyfrowych formatach (domyślnie jest 4-cyfrowy).

  • CHAR:

Ciąg znaków o stałej długości, który zawsze jest uzupełniony spacjami do określonej długości przechowywania.

  • VARCHAR:

Ciąg znaków o zmiennej długości.

  • TINYBLOB, TINYTEXT:

Kolumna BLOB lub tekst o maksymalnej długości 255 (2 ^ 8 – 1) znaków.

  • BLOB, TEXT:

Kolumna BLOB lub tekst o maksymalnej długości 65535 (2 ^ 16 – 1) znaków.

  • MEDIUMBLOB, MEDIUMTEXT:

Kolumna BLOB lub tekst o maksymalnej długości 16777215 (2 ^ 24 – 1) znaków.

  • LONGBLOB, LONGTEXT:

Kolumna BLOB lub tekst o maksymalnej długości 4294967295 (2 ^ 32 – 1) znaków.

  • ENUM:

Wyliczenie.

  • SET:

Zbiór.

Zalety MySQL

  • Łatwy w obsłudze:

MySQL instaluje się bardzo łatwo. Narzędzia innych firm, w tym wizualne (GUI) robią go niezwykle prostym, aby rozpocząć pracę z bazą danych.

  • Funkcjonalny:

MySQL obsługuje wiele funkcji SQL, które istnieją w SZBD- bezpośrednio lub pośrednio.

  • Bezpieczeństwo:

Wiele funkcji bezpieczeństwa, niektóre dość zaawansowane, są wbudowane w MySQL.

  • Skalowalny i wydajny:

MySQL może obsługiwać wiele danych, a ponadto może być skalowany, jeżeli to jest konieczne.

  • Szybki:

Rezygnacja z niektórych standardów pozwala MySQL bardzo skutecznie działać, zapewniając tym zwiększenie szybkości działania.

Wady MySQL

  • Znane ograniczenia:

Zgodnie z projektem, MySQL nie zamierza robić wszystko, a chodzi o ograniczeniach funkcjonalnych, że niektóre aplikacje mogą wymagać.

  • Kwestia wiarygodności:

Niektóre funkcje obsługiwane z MySQL (np. linki, operacji, audyt, itp.) sprawia, że jest mniej wiarygodny w porównaniu z innymi SZBD.

  • Stagnacja rozwoju:

Chociaż MySQL nadal jest techniczny open-source produkt, są reklamacje dotyczące procesu rozwoju od momentu jego zakupu. Jednak, należy zauważyć że istnieją pewne bazy danych MySQL na podstawie zintegrowanych baz danych, które dodają wartość na standardowej instalacji MySQL (na przykład MariaDB).

Kiedy używać MySQL

  • Rozproszone operacje:

Kiedy potrzebujesz więcej niż to, co może zaoferować SQLite, w tym MySQL w stosie wdrażania,  jak i każdy oddzielny serwer bazy danych, przynosi dużo wolnej pamięci wraz z niektórymi dodatkowymi funkcjami.

  • Wysoki poziom bezpieczeństwa:

Funkcje zabezpieczeń MySQL zapewniają właściwą ochronę dostępu do danych (i stosowania) w prosty sposób.

  • Strony internetowe i aplikacji internetowe:

Zdecydowana większość stron internetowych (i aplikacji internetowych) mogą  pracować na MySQL, pomimo ograniczeń. Te elastyczne i nieco skalowalne narzędzie jest proste i łatwe w obsłudze – co okazuje się bardzo pomocne w dłuższej perspektywie.

  • Niestandardowe rozwiązania:

Jeśli pracujemy na bardzo specyficzne i bardzo niestandardowe rozwiązanie, MySQL może iść według twoich reguł dzięki bogatemu ustawieniu konfiguracyjnym i trybów pracy.

Kiedy nie używać MySQL

  • SQL zgodności:

Ponieważ MySQL nie realizuje pełny standard SQL, narzędzie to nie jest całkowicie zgodne z SQL. Jeżeli może zajść potrzeba integracji z takim SZBD, przełączanie z MySQL nie będzie łatwe.

  • Konkurencja:

Chociaż MySQL i niektóre mechanizmy przechowywania wykonują bardzo dobrze odczyt operacji, jednoczesny odczyt z zapis może być problematyczny.

  • Brak cech:

Ponownie, w zależności od wyboru mechanizmu bazy danych MySQL może brakować niektórych funkcji, takich jak wyszukiwanie pełnotekstowe.

PostgreSQL

PostgreSQL jest zaawansowany open source SZBD, głównym celem którego jest zgodność ze standardami i rozszerzalność. PostgreSQL lub Postgres, stara się przyjąć standardy ANSI / ISO SQL wraz z wersjami.

W porównaniu do innych SZBD, PostgreSQL wyróżnia obsługa bardzo potrzebnych i integralnych obiektów i / lub funkcjonalność relacyjnej bazy danych, takich jak pełne wsparcie dla wiarygodnych transakcji, czyli niepodzielność, spójność, izolacja, trwałość (ACID).

Ze względu na wydajność technologii bazowej, Postgres jest niezwykle zdolny do bardzo sprawnej obsługi wielu zadań. Wsparcie dla współbieżności jest osiągnięte bez blokad odczytu dzięki realizacji Multiversion Concurrency Control (MVCC), który zapewnia również zgodność z ACID.

PostgreSQL jest bardzo programowalny, a więc przedłużany przy użyciu niestandardowych procedur, które nazywane są “procedury przechowywane”. Funkcje te mogą być tworzone w celu uproszczenia wykonywania powtarzanych, skomplikowanych i często wymaganych operacji bazodanowych.

Chociaż SZBD nie posiada popularność MySQL, istnieje wiele niesamowitych narzędzi innych firm i bibliotek, które są przeznaczone do prostej pracy z PostgreSQL, pomimo mocnego charakteru tej bazy danych. Obecnie można uzyskać PostgreSQL jako pakiet aplikacji za pomocą menedżera pakietów domyślnie w wielu systemach operacyjnych.

Obsługiwane typy danych PostgreSQL

  • bigint:

Ośmiu bajtowa liczba całkowita.

  • bigserial:

Autoinkrementna ośmiu bajtowa liczba całkowita.

  • bit [(n)]:

Bitowy ciąg znaków o stałej długości.

  • bit varying [(n)]:

Bitowy ciąg znaków o zmiennej długości.

  • boolean:

Logiczna Boolean (prawda/fałsz).

  • box:

Prostokąt na płaszczyźnie.

  • bytea:

Dane binarne ( “byte array”)

  • character varying [(n)]:

Ciąg znaków o zmiennej długości.

  • character [(n)]:

Ciąg znaków o stałej długości.

  • CIDR:

IPv4 lub IPv6 adres sieciowy.

  • circle:

Okrąg na płaszczyźnie.

  • date:

Data (rok, miesiąc, dzień).

  • double precision:

Liczba zmiennoprzecinkowa podwójnej precyzji (8 bajtów).

  • inet:

IPv4 lub IPv6 adres hosta.

  • integer:

Cztery bajtowa liczba całkowita.

  • interval [fields] [(p)]:

Okres czasu.

  • line:

Nieskończona linia na płaszczyźnie.

  • LSEG:

Odcinek na płaszczyźnie.

  • macaddr:

Adres MAC (Media Access Control).

  • money:

Kwota waluty.

  • numeric [(p, s)]:

Dokładna wartość liczbowa z wybraną dokładnością.

  • path:

Geometryczna ścieżka na płaszczyźnie.

  • point:

Geometryczny punkt  na płaszczyźnie.

  • polygon:

Zamknięta geometryczna ścieżka na płaszczyźnie.

  • real:

Liczba pojedynczej precyzji zmiennoprzecinkowej (4 bajty).

  • smallint:

Dwóch bajtowa liczba całkowita.

  • serial:

Autoinkrementna czterech bajtowa liczba całkowita.

  • text:

Ciąg znaków o zmiennej długości.

  • time [(p)] [without time zone]:

Pora dnia (bez strefy czasowej).

  • time [(p)] with time zone:

Pora dnia, w tym strefa czasowa.

  • timestamp [(p)] [without time zone]:

Data i godzina (bez strefy czasowej).

  • timestamp [(p)] with time zone:

Data i godzina, w tym strefa czasowa.

  • tsquery:

Tekst wyszukiwania.

  • tsvector:

Wyszukiwanie dokumentów tekstowych.

  • txid_snapshot:

Na poziomie użytkownika, identyfikator transakcji migawka.

  • uuid:

Uniwersalny, unikatowy identyfikator.

  • xml:

Dane XML.

Zalety PostgreSQL

  • Open source SQL zgodnych z SZBD:

PostgreSQL  jest open source i darmowy, ale bardzo zaawansowany system zarządzania relacyjnymi bazami danych.

  • Silna społeczność:

PostgreSQL jest obsługiwany przez oddanych i doświadczonych społeczności,  które mogą być dostępne za pośrednictwem baz wiedzy i Q&A stron 24/7 za darmo.

  • Mocne wsparcie innych firm:

Niezależnie od bardzo zaawansowanych funkcji, PostgreSQL jest ozdobiona wieloma świetnymi i open source narzędziami innych firm do projektowania, zarządzania i korzystania z systemu zarządzania.

  • Rozszerzalny:

Możliwe jest rozszerzenie PostgreSQL programowo za pomocą procedur przechowywanych, jak w zaawansowanych SZBD powinno być.

  • Zadanie:

PostgreSQL jest nie tylko relacyjnym systemem zarządzania bazą danych, ale cel jest jeden – obsługa zagnieżdżenia i wiele innych.

Wady PostgreSQL

  • Wydajność:

Dla prostego odczytu ciężkich operacji, PostgreSQL może wydawać się mniej wydajnym niż odpowiedniki, takie jak MySQL.

  • Popularność:

Biorąc pod uwagę charakter tego narzędzia, to brakuje mu popularności, pomimo bardzo dużej ilości wdrożeń, które mogą mieć wpływ, jak łatwo można było by uzyskać wsparcie.

  • Hosting:

Z powodu wyżej wymienionych czynników, trudniej znaleźć właścicieli lub dostawców usług, które oferują zarządzane instancji PostgreSQL.

Kiedy używać PostgreSQL

  • Integralność danych:

Gdy niezawodność i integralność danych są absolutną koniecznością, bez wymówek, PostgreSQL jest lepszym wyborem.

  • Skomplikowane procedury niestandardowe:

Jeśli potrzebujesz bazy danych do wykonania procedur niestandardowych, PostgreSQL jest rozszerzalnym i jest lepszym wyborem.

  • Integracja:

W przyszłości, jeżeli jest szansa, z konieczności wynikającej z migracji całego systemu bazy danych do zasadności rozwiązania (np Oracle), PostgreSQL będzie najbardziej posłuszną i łatwą w obsłudze bazę dla przełącznika.

  • Złożone projekty:

W porównaniu z innymi implementacjami open source i darmowymi SZBD, dla złożonych projektów baz danych PostgreSQL oferuje najbardziej, z punktu widzenia funkcjonalności i możliwości, nie rezygnując z innych cennych zasobów.

Kiedy nie używać PostgreSQL

  • Prędkość:

Jeżeli wszystko czego potrzebujesz, to szybki odczyt operacji, PostgreSQL nie jest takim narzędziem.

  • Prosty zestaw UPS:

O ile nie wymaga absolutnej integralności danych, zgodności z ACID lub skomplikowanych wzorów, PostgreSQL może być śmiertelny dla prostych ustawień.

  • Replikacja:

Jeżeli nie jesteś gotówy poświęcić czas, energię i zasoby, aby osiągniąć replikację w MySQL, to może być łatwiejsze dla tych, którzy nie mają doświadczenia w administracji baz danych i systemów.

Na hostingu współdzielonym u nas można korzystać zarówno jak z MySQL tak i z bazy danych PostgreSQL