WordPress s SQLite

Kategorie:

WordPress je od počátku spojen s uložením dat do MySQL/MariaDB. Některé „konkurenční“ CMS, neboli redakční systémy, umí i jiné databáze, například PostgreSQL, nebo lehkou SQLite.

Konkurenční Drupal můžete provozovat s „obligátní“ MySQL; nebo moderněji MariaDB*; PostgreSQL i lehkou SQLite. Podle dřívějších zkušeností nebylo dobré vybočit ze „zajetých kolejí“ a používat jinou databázi, než MariaDB, problém nezřídka vytvořili vývojáři rozšíření, protože práci s jinou databází netestovali. Trochu neznámý je v našich končinách CMS Serendipity, pracující i na SQLite. Joomla má požadavky lehce proměnlivé, v závislosti na verzi, leč SQLite v žádné verzi nevidím. Typo3, jehož jsem si všiml na německém trhu, podporu SQLite má, alespoň dle dokumentace.

Reklama

SQLite je nejpoužívanějším databázovým řešením světa. Díky tomu, že jde jen o knihovnu a není potřebný běžící server, je použita pro ukládání dat v mnoha aplikacích. Je snažší a praktičtější umět databázové jazyky (DML, SQL), než psát celou logiku CRUD (Create-Read-Update-Delete [Vytvoření-Čtení-Aktualizace-Mazání]) sami a muset vyřešit i problém indexace, pokud je dat mnoho.

Zájem o zařazení SQLite do WordPressu, neboli do nejrozšířenějšího CMS, se v diskuzích objevuje delší dobu, ale teprve v roce 2022 se objevil příslib/plán integrace SQLite do WordPressu. Zatím formou pluginu, ale to se v budoucnosti může změnit. SQLite je vhodná na weby, které jsou takřka statické, minimálně se na nich mění obsah, neobsahují tisíce stránek, či příspěvků, a nevyznačují se tisícovou denní návštěvností; typicky půjde web menší, až středně velké, firmy.

Upozornění

Článek je psán v době, kdy je SQLite podporována experimentálně, snad jednou bude možnost využití označena jako stabilní vlastnost, pro produkční nasazení. Zatím bychom se měli vyhnout nasazení do ostrého provozu.

Osobně jsem nenarazil na plugin, který by měl tak mizerně napsané SQL, že by nefungoval s SQLite, ale používám dosti úzkou množinu rozšíření (Yoast SEO, WordFence, Lightbox for Gallery & Image Block, Redirection, …), jež nejsou obskurditami, jsou populární, a dá se očekávat kvalitní kód.

Jak to funguje?

Zatím se WordPress s SQLite instaluje klasicky, tj. s MariaDB a po vstupu do administrace doinstalujete rozšíření SQLite Database Integration, aktivujete a teoreticky je hotovo, znovu nastavíte základní parametry webu. Teprve po opětovném přihlášení do administrace aktivujete další rozšíření a nastavíte je.

Zde se projeví první slabina, v této fázi vývoje neexistuje synchronizace mezi SQLite a MariaDB. I obsah je potřebné importovat přes nástroje WordPressu. (Netuším, zda je v plánu, ale dovedu ji napsat.)

Zatím jsem nenašel nástroj podobný Search-Replace-DB; pracující s SQLite; kterým lze změnit odkazy v celé databázi, při migraci webu z testovací URL na produkci, nebo obráceně. Kdyby existovala oboustranná migrace dat mezi SQLite a MariaDB, dala by se změna odkazů řešit Cimrmanovským úkrokem stranou.

Když jsou pluginy nastavené, obsah importován, tak je hotovo. Teď jen počkat, zda se propojení na SQLite „nerozbije“ při aktualizaci WordPressu, protože plugin nahrazuje defaultní wp-content/db.php.

Čeština skýtá jednu malou „past“. Nabodeníčka, čárky a ch. Není chybou pluginu, či WordPressu, ale (zatím) vlastností SQLite, že písmena s čárkami a háčky jsou řazena na konec a ch je zařazeno k písmenu c. Pokud je problém zařazení slova „zelenina“ před slovo „zářivka“, není použití SQLite na místě.

Řazení v SQLite správně není, ale v drtivé většině případů to vadit nebude.

Další záležitost, jež funguje trochu jinak, je přihlašování. I přihlašovací jméno je case sensitive, neboli jsou rozlišena malá a velká písmena.

Pro import obsahu webu (konkrétně tohoto blogu) jsem použil vestavěných možností WordPressu (Nástroje -> Export a Nástroje -> Import). Importovalo se přibližně 1000 souborů médií, plus 700 článků/stránek (ne vše je veřejně dostupné), a takže do importu vstoupila především režie přenosu dat po síti. Po importu je velikost SQLite souboru menší, než prostor obsazený databází webu v MariaDB, což je pro WordPress přirozené, jelikož databázi vytváří s kódováním UTF8MB4, znaky se ukládají vžda do 4 bytů. Subjektivně je rychlost stejná, v několika málo měřeních se vše zdá v pořádku.

Závěrem

WordPress s SQLite je vynikající nápad. Pro většinu webů nebude potřebné používat klasickou MariaDB; statistika je nejspíše neúprosná – drtivá většina jsou takřka statické weby, firemní prezentace, bez blogu/pravidelných článků a bez eshopu. Mě osobně se přístup používání „velkého DB serveru“, až když je potřeba, líbí.

Dát si limit pro přechod na plnou MariaDB na 1024 stránek/článků a pak snadno migrovat? Přiznejme si: na kolika webech je nový článek týdně po dobu 20 let? Nebo 512 produktů ve WooCommerce, kde je větší zátěž kvůli atributům? Jen zatím chybí migrační nástroj mezi MariaDB a SQLite, který by fungoval na několik kliknutí z administrace WordPressu.


* V dalším textu budu používat již jen název MariaDB, webhosterů, kde je „originální“ Oracle MySQL, už asi mnoho nebude.