CW(0,x) - Přechod od MySQL k SQLite; file based database

Sami výrobci uvádějí, že SQLite není srovnatelná v mnoha funkcích s client/server velkými databázemi jako MySQL, Oracle, PostgreSQL, či MS SQL Server. SQLite totiž řeší jiné problémy. Nemá proto schopnosti centralizace a škálování pro velké podnikové datové sklady.

Ovšem nám jako databáze pro střední i velký web při správě jediného uživatele plně vyhovuje.

SQLite je totiž file based a tak server s celou databází pracuje jako s jedním souborem. To ji předurčuje k použití na zapouzdřených zařízeních jako mobily, set-top boxy, roboty, letadla a automobily, ale také klasické weby. Výrobce doporučuje databáze SQLite pro všechny weby s denní navštěvovaností pod 100 000 (což je až příliš). Toho drtivá většina webů nikdy v životě nedosáhne byť ani na jediný den. Dokonce ukazují svůj testovací příklad, kdy v 2015 byla denní návštěvnost mezi 400 až 500 tisíci HTTP požadavky, každá adresa měla kolem 200 SQL výrazů na stránku, SQLite běžel na samostatném sdíleném virtuálním stroji s 23 dalšími a přesto byla průměrná zátěž pořád 0,1. Na konci oficiálního webu je dokonce drobná větička, že: Jakmile nejste v situaci, kdy máte data od logiky oddělena sítí nebo nepotřebujete mnoho současných zápisů (concurrency), nebo nemáte big data, tak v každém jiném případě se můžete bez problémů vrhnout k SQLite a bude to pro vás znamenat vyšší výkon zpracování požadavků!

Je to ďábelsky rychlé

To mohu potvrdit a sám vřele doporučit. Dokonce, od té doby, co používám file based SQLite namísto MySQL na vlastním serveru, zaznamenal jsem ďábelské zrychlení webu. Nejen v absolutních číslech milisekund, ale čistě uživatelem poznatelný dojem je znatelně lepší. Navíc, jak sami zdůrazňují, SQLite nepotřebuje žádnou konfiguraci ani údržbu. Je to prostě soubor, který PHP načítá přes PDO ovladač. To byl vlastně jediný malý problém, naučit se pracovat s PDO ovladačem pod PHP. U MySQL jsem totiž byl zvyklý na mysqli.

PDO způsob

U PDO je problém ten, že na čtení dat z DB potřebujete tři řádky příkazů místo jednoho. Logika nasávání dat z dotazů na databázi je úplně jiná, než u klasických PHP funkcí jako fetchrow() a PDO navíc vynuceně vnáší objektový přístup. Ale na druhou stranu je to na ochranu proti SQL injections. Takže PDO mi po pár dnech nakonec vešlo do krve a nyní už problém přechodu na PDO způsob neexistuje. Dokonce se můžete po pravdě utěšovat tím, že PDO má stejnou logiku pro všechny typy databází, takže pokud jednou umíte univerzální PDO způsob, bude už pro vás u všech ostatních databází stejný.

Také organizační zjednodušení

SQLite je opravdu významné zrychlení požadavků na čtení z DB a jako webař vám řeknu, že i zásadní organizační urychlení. Celý textový obsah webu totiž uploaduji přes FTP jako jeden 7 megabajtový .sqlite soubor, resp. databáze je pouze jeden další soubor spolu s mnoha dalšími soubory webu. U MySQL jsem se musel furt přihlašovat, importovat tabulky nebo nastavovat složitě programy na SSH přístup. Tady DB vyvíjím zcela lokálně a na web pouze nahraji soubor a vše ostatní už si ovládá PHP samo. Vskutku významné zjednodušení. Upload celého webu tak sestává pouze z jedné FTP fronty a ničeho jiného. Upload stejného webu mi celkem trvá dvě minuty místo deseti minut s MySQL.

Čím si výrobce vysvětluje rychlost file based SQLite databáze?

Čtení jednotlivých bloků dat je totiž u file based SQLite o 35% rychlejší než čtení jednotlivých souborů. Samozřejmě také celková využitá disková kapacita jednoho SQLite souboru držícího 10 kB bloky dat je nižší, než u mnoha 10 kb souborů vedle sebe. Výsledky jsou navíc výrazně rychlejší na Linuxu než na Windows, ale to už je jiný problém.

Výrobce věří, že zrychlení práce je navýšeno tím, že soubor je otevřen pouze jednou, zatímco u client/server databází se zvlášť otvírá a kontroluje spojení na jiný samostatný server při každém požadavku. Odpadají tak režijní latence na přihlašování a otvírání cesty při každém požadavku zvlášť, přitom v jediném PHP skriptu bývá zpravidla více požadavků do více tabulek DB. V době dnešního hostingu se supervýkonnými SSD diskovými poli tak načte jeden sqlite soubor vedle tisícovek dalších skriptů a obrázků jako nic a odpadá režijní doba na dedikovaný databázový server, přičemž výhody vlastního databázového serveru tvůrce průměrného webu v Čechách vůbec nemá příležitost poznat. MySQL server na vlastním počítači tak zůstává zbytečným luxusem z minulosti, luxusem který se navíc pro malé české podmínky ukázal navíc jako zpomalující faktor.

PHP a PDO ke všemu dovolují načítat celý SQLite soubor do RAM, s čímž jsem dosud neexperimentoval, ale slibuji si od toho další stupeň zrychlení.

Zdroje

https://www.sqlite.org/fasterthanfs.html

https://www.sqlite.org/whentouse.html

konkrétní http://www.sqlitetutorial.net/

DC home |
Portál vojenských technologií |
Ostatní články |
Organizační

Abyste se v této době dostal do společnosti, musíte lidi krmit, bavit a šokovat.
Oscar Wilde