Baza danych SQLite jest alternatywą dla bazy MySQL. Niedawno postanowiłem pobawić się tym. Początkowo to miał być artykuł tylko o tej bazie danych, ale w trakcie pisania wyszedł z tego artykuł o przesiadce z MySql do SQLite.
Pierwsze spostrzeżenie to fakt, że cała baza jest trzymana w wybranym przez Nas pliku. To stwarza pewne zagrożenie związane z bezpieczeństwem. Do takiej bazy każdy mógłby się dostać i ściągnąć ją. Oczywiście można to zabezpieczyć, tak jak to jest zrobione np we frameworku Symphony. Wystarczy podzielić projekt na 2 części:
- część dostępna z zewnątrz oraz
- część z silnikiem projektu czyli klasy, pliki z ustawieniami, pliki z bazą danych SQLite oraz inne ważne pliki
Silnik możemy zostawić w katalogu głównym, natomiast część ogólnodostępną umieścić w osobnym katalogu. Następnie za pomocą pliku .htaccess robimy przekierowanie wszystkiego do katalogu z zawartością ogólnodostępną. W ten sposób mamy zabezpieczony cały projekt.
Mimo wszystko to rozwiązanie ma swoje plusy. Dzięki temu można bezproblemowo przenosić cały projekt i nie martwić się o pojemność bazy itd.
Baza SQLite przydaje się również na hostingach, które żałują baz danych dla klientów. Bardzo dobrym przykładem jest tutaj hosting w OVH. W dniu pisania tego wpisu najtańsza oferta hostingu z SQL Personal przewidywała 1 bazę danych MySql o pojemności 25 MB. Niektórym może się to wydawać dużo, ale ja uważam, że to stanowczo za mało.
Obecnie na moim blogu są dopiero 2 wpisy, a trzeci w trakcie pisania. W tej chwili baza danych zajmuje już prawie 1 MB! Podejrzewam, że przy 100 wpisach może przekroczyć 25 MB, a więc limit zostanie osiągnięty.
Klasę, którą opisałem we wpisie Klasa do obsługi bazy danych łatwo można przystosować do obsługi bazy danych SQLite. Jeśli ktoś nie używa takiego rozwiązania, to zmiana bazy danych na SQLite wiąże się z przeróbkami całego projektu. Według mnie to jest błąd programistyczny, ale to już inna bajka.
Język zapytań w bazie danych SQLite jest zgodny ze standardem SQL, więc nie było potrzeby zmiany zapytań w projekcie. Dzięki temu łatwiej było się przesiąść z jednej bazy na drugą. To jest bardzo duży plus, jeśli ktoś chce szybko i łatwo przesiąść się z jednej bazy na drugą.
Oczywiście mogą być problemy, jeśli ktoś używa funkcji wbudowanych w daną bazę danych. To z powodu rozszerzenia standardowego języka SQL o dodatkowe funkcje. Wszystko zależy od zapytań, jakie są używane w projekcie.
Bazę tą używam krótki czas, ale zdążyłem znaleźć pewne rzeczy, które stwarzają problemy przy przesiadce z bazy MySql do bazy SQLite:
- Brak AUTO_INCREMENT. Zamiennikiem tego jest 'pole INTEGER PRIMARY KEY’
- Brak funkcji NOW().
- Brak funkcji CONCAT(). Zamiennikiem tej funkcji jest 'slowo1′ || 'slowo2′ …
- Brak obsługi znaku `, który bardzo często jest dodawany przy eksportach w PhpMyAdminie.
- W selektach składnia 'tabela.pole’ nie zwraca 'pole’, ale 'tabela.pole’. Ci którzy używają tablic asocjacyjnych do wyciągania wyników z bazy danych, będą musieli przerobić projekty lub poprawić to wyrażeniami regularnymi w klasie do obsługi bazy danych.
To by było na tyle na początek. Po dłuższych testach postaram się napisać o tym kolejny artykuł. Pewnie będzie głównie nastawiony na przesiadkę z bazy danych MySql na SQLite.