Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

[wordpress] WordPress & SQLite

Wordpress & SQLite
Czyli o użyciu bazy SQLite w Wordpress'ie.

Ktoś mógłby zapytać: po co to komu? Już wyjaśniam.

Standardowo WordPress korzysta z bazy MySQL, a obsługę bazy SQLite zapewnia dodatek "PDO (SQLite) For WordPress".

MySQL to baza SQL uruchomiona jako serwer działający pod wybranym IP i Portem. W przypadku dużych portali/projektów jak na przykład forum.dobreprogramy.pl czy platformy blogowej wordpress.com widać przewagę tej technologi z racji silnego wykorzystania bazy danych.

Dla małych i średnich projektów oraz blogów z ilością wyświetleń na poziomie poniżej 100 tysięcy odsłon dziennie, jest ona "dużą i zasobożerną kotwicą strony". Powód?

Wystarczy chwilowe wyłączenie bazy MySQL lub jej awaria i pozbawione dostępu do bazy danych strony przestają działać.

Natomiast...

SQLite to baza SQL w postaci pliku. Szybka, mała i idealna dla małych i średnich projektów oraz blogów poniżej 100 tysięcy wyświetleń dziennie.

Nie potrzebuje żadnych dodatkowych serwerów ponad ten, na którym działa nasza strona.

Obsługa baz SQLite została włączona jako domyślny moduł w serwerach z obsługą PHP od wersji 5 wzwyż (czyli obecnie dla każdej strony).

Dlaczego warto używać bazy danych SQLite?

Dzięki przechowywaniu bazy danych w pojedynczym pliku. SQLite jest bardzo mobilny, ponieważ w jego przypadku do migracji pomiędzy serwerami wystarczy tylko użycie metody "Kopiuj & Wklej".

SQLite jest rekomendowany dla stron mających poniżej 100 tysięcy wejść dziennie (w przypadku stron mających powyżej 100 tysięcy odsłon dziennie również działa bez problemu, jednak parę tysięcy zapytań dysku na minutę może zdenerwować administratora - w końcu to też człowiek).

----------------

Proszę się nie martwić o możliwość ściągnięcia pliku z bazą danych przez osoby trzecie.

Dostęp do waszej bazy danych nie będzie możliwy ponieważ w folderze "wp-content/database" dodatek "PDO (SQLite) For WordPress" automatycznie utworzy plik ".htaccess" zabraniający wszelkiego dostępu do tego folderu i plików w nim zawartych.

Wordpress

Wgranie dodatku "PDO (SQLite) For WordPress" jest dziecinnie proste, ale żeby jeszcze bardziej wam to ułatwić przygotowałem specjalny Repack (gotową, przygotowaną do pracy paczkę) pod nazwą "WordPress SQLite Repack".

Paczka bazuje na ostatniej w 100% zgodnej z dodatkiem "PDO (SQLite) For WordPress" wersji WordPressa oznaczonej numerem 2.9.2

Zawartość "WordPress SQLite Repack":

WordPress:WordPress 2.9.2Dodatki:PDO (SQLite) For WordPress 2.7.0Disable WordPress Core Update 1.4wp-config.php:
Z powodu braku potrzeby wpisywania danych serwera MySQL, plik konfiguracyjny jest zawarty w paczce i nie należy go modyfikować.

Dostępna jest do ściągnięcia tutaj:
- Wersja polska:http://projects.xeonbloomfield.com/files/wordpress-sqlite-repack/wordp...- Wersja angielska:http://projects.xeonbloomfield.com/files/wordpress-sqlite-repack/wordp...

Minimalne wymagania "WordPress SQLite Repack":

PHP 5.0 lub nowszy
Moduł Apache: mod_rewrite

Instalacja WordPress SQLite Repack

Po ściągnięciu oraz wypakowaniu folderu "wordpress" z archiwum mamy do dyspozycji gotowego do instalacji WordPressa.

1. Zawartość folderu "wordpress" należy skopiować na swój serwer i nadać prawa dostępu (chmod'y) 777 dla folderów:
- wp-content/database
- wp-content/uploads

2. Po wejściu na adres strony na którą wgraliśmy zawartość folderu "wordpress" z paczki ukaże się nam strona instalacji WordPressa, na której musimy uzupełnić podstawowe informacje o blogu (możemy je później oczywiście zmienić).

3. Po kliknięciu "Zainstaluj WordPressa" pokaże się nam strona z "dziwnymi napisami" - jest to instalacja poprzez dodatek "PDO (SQLite) For WordPress". Należy poczekać.

4. Kiedy ta "dziwna strona" zakończy się ładować przewijamy okno przeglądarki na jej dół.

5. Kopiujemy hasło podane na dole "dziwnej strony".

6. Klikamy "Zaloguj się".

7. Logujemy się wpisując nazwę użytkownika "admin" oraz wklejamy do pola z hasłem hasło z "dziwnej strony".

8. Przechodzimy do zakładki "Wtyczki".

9. Klikamy "Aktywuj" przy wtyczce "Disable WordPress Core Update".

(Opcjonalnie) Zmieniamy hasło użytkownika "admin" na łatwiejsze do zapamiętania.

GOTOWE!

(Na zrzutach ekranu w Menu Panelu Administratora nie ma polskich znaków dlatego, że pracuję na anglojęzycznym systemie bez obsługi polskich znaków dla tej czcionki.)

Zrzuty ekranu z instalacji:

W ten oto prosty sposób omówiłem dla was instalację WordPressa korzystającego z bazy SQLite

----------------

Loga systemu zarządzania treścią Wordpress pochodzą z oficjalnej strony:http://wordpress.org/about/logos/ 

Komentarze

0 nowych
webnull   9 #1 25.02.2011 19:16

SQLite3 to świetna baza danych, a WordPress to jeden z największych kombajnów do tworzenia blogów ;-)

Wychodzi na to, że można trochę przyśpieszyć WordPressa przechodząc na szybszą bazę danych.

Bardzo lubię SQLite3 ze względu na lekkość, szybkość, przenośność, a także niskie wymagania sprzętowe.

  #2 25.02.2011 19:49

"...jednak parę tysięcy zapytań dysku na minutę może zdenerwować administratora..."

Czy to przedłuża wczytywanie stron opartych na SQ Lite?

XeonBloomfield   5 #3 25.02.2011 19:53

@PavloAkaLogan | 25.02.2011 19:49:

Z racji tego, że SQLite przechowuje dane w pliku można dać prosty przykład:

Otwarcie pliku "foo.txt" 1000 razy zajmuje 0.01 sekundy, a otwarcie go 100 000 razy zajmuje 1 sekundę.

Mam nadzieje, że zobrazowałem o co chodzi.

  #4 25.02.2011 20:20

Tak, zobrazowałeś idealnie. W sumie, nie wiem jak dokładnie sprawa wygląda, ale jeśli wzorować się na Twoich danych to są to nieznaczne dziesiętne sekundy przy małych ilościach danych, tylko że problem pojawiać się będzie przy dużych bazach, jak na przykład baza danych dobreprogramy.pl - tutaj ładowanie danych byłoby kilkakrotnie dłuższe. Tak sądzę. Tak, wchodząc na przykład pod część vortalu "Systemy" ładowane są konkretne dane bazy danych a nie cała baza danych. Czy dobrze zrozumiałem?

skandyn   9 #5 25.02.2011 20:50

Ciekawy wpis i bardzo przydatny dla każdego webmastera. Tak jak pisałem kiedyś wcześniej na moim blogu WordPress to porządny systemem zarządzania treścią. Największym walorem CMS-a jest nie tylko łatwa instalacja i użytkowanie, ale także to, że można postawić profesjonalny serwis np. z oprogramowaniem, a nie tylko stonkę z własnymi blogami.

Jednak, jeśli chodzi o bazy danych to ja jednak stawiam na najbardziej popularną i niezawodną, czyli MySQL. Podobnie jak napisałeś mój dobry kolego to i moim zadaniem baza SQLite jest doskonała na małe i średnie portale internetowe. Dokładniej piszą chodzi o to, że lekka baza danych sprawdza się idealnie wszędzie tam gdzie nie jest potrzebny kombajn zwany MySQL.

Dziękuję za praktyczny opis i pozdrawiam.

XeonBloomfield   5 #6 25.02.2011 21:01

@PavloAkaLogan | 25.02.2011 20:20:

Dokładnie.

Chodzi o to, że baza jest dostępna cały czas, ale wysyłając zapytanie "Systemy" zwracane są tylko te wartości, które spełniają to zapytanie, czyli mają to przykładowe słowo "Systemy".

Zeter   2 #7 26.02.2011 12:29

Bardzo ciekawy artykuł, gdyby nie Ty nigdy bym się tą bazą nie zainteresował.
Załóżmy, że mamy stronkę, która osiągnęła już granicę 100 tysięcy wyświetleń - może przydałby się kolejny artykuł jak pożegnać się z SQLite i migrować dane do MySql? I może też w drugą stronę - z SQLite do MySQL?

  #8 26.02.2011 13:13

Tylko że SQLite ma momentami inną składnię niż MySQL. W pewnych sytuacjach inaczej trzeba konstruować zapytania aby były wydajne. Boję się że taki plugin, nie stworzony przez autorów WP może jednak nie być tak wydajny jak natywna obsługa SQLite przez WP. Przy takim testowaniu lokalnym z nowym blogiem pewno nie ma różnicy, ale w warunkach normalnych (chociażby 200 userów per dzień) już to może inaczej wyglądać.

Swego czasu pisałem pewien konwerter danych właśnie do bazy SQLite. Baza miała (jej plik) ok. 1,5GB. I naprawdę trzeba było nieco pokombinować z odpowiednimi kluczami, indeksami i zapytaniami aby było to szybkie. Jeśli ten plugin działa w WP z paroma wpisami, to danych jest tak mało że nic nie zauważysz. Ja miałem taką sytuację że jak źle napisałem zapytanie to się wykonywało kilkadziesiąt sekund, bo byłem przyzwyczajony do MySQLa, dopiero po przyjrzeniu się dokumentacji i rewizji poglądów schodziłem milisekund.

Reasumując, obawiam się że taki plugin typu wrapper do SQLite może jednak nie zdać egzaminu. Wg. mnie coś takiego wymagało by przyjrzeniu się każdemu zapytaniu do bazy z osobna w całym kodzie WP.

Sam SQLite to piękna sprawa, ale trzeba wiedzieć jak go używać :)

Z drugiej strony, MySQL buforuje sobie dany z najczęstszych zapytań w pamięci, i ma pewno jeszcze dziesiątki innych "przyspieszaczy" czego SQLite jest pozbawiony. Osobiście nigdy nie użył bym SQLite do poważnej strony. On nadaje się do naprawdę mikrostron i ew. zastosowań specjalnych. Poza WWW świetny do trzymania ustawień aplikacji desktopowych, zdaje się że FF czy Thunderbird tak trzymają swoje dane.

PS. Dla WP 2.9.2, nieco stary ten plugin, obecnie mamy WP 3.1.

XeonBloomfield   5 #9 26.02.2011 13:13

@Zeter | 26.02.2011 12:29:

Niedługo dodam artykuł na temat RAM disk'ów. Wtedy SQLite może być wykorzystywany gdzie się chce, ponieważ przykładowo pamięci zapewniają:
- DDR SDRAM - przepustowość od 1600 MiB/s do 3200 MiB/s;
- DDR2 SDRAM - przepustowość od 3200 MiB/s do 6400 MiB/s;
- DDR3 SDRAM - przepustowość od 6400 MiB/s do 12800 MiB/s.

Migracja pomiędzy bazami opisana jest tutaj:
http://sqlite.phxsoftware.com/forums/p/941/4027.aspx#4027

XeonBloomfield   5 #10 26.02.2011 13:15

@M@ster | 26.02.2011 13:13:

Poczekaj na mój artykuł o RAM disk'ach o czym pisałem wyżej:
http://www.dobreprogramy.pl/wordpress-WordPress-SQLite,Blog,23262.html#komentarz...

hiropter   9 #11 26.02.2011 13:55

@XeonBloomfield
"(...)Otwarcie pliku "foo.txt" 1000 razy zajmuje 0.01 sekundy, a otwarcie go 100 000 razy zajmuje 1 sekundę.(...)"

Trochę kiepski przykład wybrałeś, bo otwarcie pliku, a wykonanie na nim serii zapytań, to dwie różne sprawy - pomnóż to jeszcze razy 100 000 a na pewno nie zmieścisz się w tej 1 sekundzie.

Co do wykorzystania SQLite w budowaniu serwisów internetowych, to zgodzę się z użytkownikiem M@ster. Do tego celu tylko MySQL lub PostgreSQL. I nie chodzi mi tu nawet o wydajność ale o samo bezpieczeństwo danych.

Do RAM dysków też nie mam zaufania... wystarczy mi jedna wtopa...

M@ster   16 #12 26.02.2011 14:00

@XeonBloomfield
RamDisk owszem, ale który hostingowiec trzyma pliki userów w RAMie? To jest dobre jak masz dedykowany :) a nikt chyba nie kupuje dedyka dla jakiegoś jednego bloga ;) Chyba że jest super poczytny ale wtedy SQLite się nie nadaje :P

XeonBloomfield   5 #13 26.02.2011 14:30

@M@ster | 26.02.2011 14:00:

Na hostingach masz zwykle dobry serwer, a taki wystarczy dla strasznie poczytnego bloga na SQLite.

4lpha   9 #14 26.02.2011 14:36

Świetny artykuł, jak zwykle u Xeona.

  #15 26.02.2011 17:01

Turion II 2,4 GHz 3GB DDR3 1333MHz, milion insertów 'qwertyuiop' + ID autoincrement w 12s. Tak ta baza jest wolna....

  #16 26.02.2011 18:30

@misi0mis0
Przy SQLite trzeba zwracać uwagę na transakcje. Jeśli robisz 1mln insertów to każdy odpalany jest w osobnej transakcji powodując ogromny narzut. Przy takich masówkach najpierw się ręcznie otwiera transakcję, robi inserty a potem ją zamyka. Daje to wtedy niesamowitego kopa.

M@ster   16 #17 26.02.2011 18:31

I tutaj właśnie wychodzi różnica w porównaniu do MySQL na silniku tabeli MyISAM które nie mają transakcji. Te same zapytania na SQLite wykonywały by się dużo dłużej jeśli nie zapewni się odpowiedniej obsługi transakcji.

  #18 26.02.2011 18:44

@ M@ster

To oczywiste, bez transakcji po 30 sekundach php się zatrzymuje a w bazie jest ~11k rekordów...

  #19 11.02.2012 13:33

A jak z bezpieczeństwem, nie ma w tej paczce jakiejś luki, dzięki której łatwo o włam ? Sprawdzał ktoś ?

  #20 26.04.2014 12:49

tu macie jak szybko gość instaluje http://www.youtube.com/watch?v=9gqM0JaF3nM
szybko działa i gotowiec też jest

  #21 23.06.2014 18:15

Co jest źle, lub jak to naprawić ?

PDO Driver for SQLite is missing.

Your PHP installtion appears not to have the right PDO drivers loaded. These are required for this version of WordPress and the type of database you have specified.

...z góry dziękuję