Databáze pro eshop/cms, váhání mezi MySQL/MariaDB a SQLite

Kategorie:

Evidentně nejsem první, kdo dospěl do stavu, kdy řešení webů v instantním open source systému začíná být nepohodlné. Nekritizuji funkčnost; byť ZenCart mi připadá jako učebnice toho, jak se psát nemá a hlavně jak nemá aplikace používat databázi; ale při potřebě dopsat vlastní rozšíření/úpravy to prostě bolí. Pronikání co cizího způsobu psaní kódu a prohledávání neznámého frameworku asi nemá rád žádný programátor.

Jsem ve stádiu, kdy mám základní systém napsaný. Protože jde o webovou aplikaci a já chci i co nejjednodušší nalezení webhostingové služby, píšu v PHP. Díky tomu že se snažím mít kód co nejšetrnější vůči systémovým prostředkům webhostingu nepoužívám rozsáhlých frameworků; jež by mi usnadnily práci, ale optimalizace kódu by byla problematická. Stejně zacházím i s databází, radši hledám způsob jak napsat (pravda trochu obtížně udržovatelný) jediný SQL příkaz, který mi vrátí všechna data jak potřebuji (což obnáší vyladění indexů pro rozumné JOINy a subSELECTy), ale tento přístup je mi bližší než sekvence mnoha odesílaných dotazů na SQL databázi a následné sestavení dat pro zobrazení.

Reklama

Stále trochu váhám nad volbou databáze. Být nezávislý na volbě databáze znamená použití velmi triviálních SQL konstrukcí, protože a ačkoliv se vývojáři RDBMS „chlubí“ podporou určitých verzí SQL (SQL92, SQL99, …), jsou diference, kvůli nimž je přenosnost problematická.

SQL databáze pro (PHP) web, možnosti:

  • Rovnou vyloučím proprietární servery, jako DB2, Oracle, či Microsoft SQL server. Najít webhosting s php a některou výše uvedenou databází by nebylo jednoduché, ani levné pro zákazníka, ani jednoduché při eventuálním rozhodnutí přejít k jinému poskytovateli webhostingu.
  • Z důvodu malého rozšíření mohu oželet i PostgreSQL a FirebirdSQL, webhostingů nabízejících tyto dva servery je jako šafránu.
  • MySQL, nebo MariaDB je myslitelná varianta. PHP webhosting bez této databáze bych zřejmě hledal velmi dlouho. Zatím nemám důvod rozlišovat mezi MySQL a MariaDB, navenek se chovají stejně, používají stejně „přiohýbaný“ SQL, leč MariaDB je lépe vyladěna, nabídne vyšší výkon.
  • Podobně jako byla před delší dobou distribuována MySQL přímo s PHP, je v rámci PHP distribuována i embedovaná databáze SQLite, jež nevyžaduje server (databáze se na některých webhostinzích ještě stále příplácí extra). Přenos webové aplikace na jiný webhosting nevyžaduje export a import databáze (dbdump), jen stačí překopírovat balík souborů.

V předchozích řádcích jsem napsal malý souhrn možností výběru a pro finální rozstřel mi zbyly MySQL (respektive její fork MariaDB) a SQLite.

U MySQL není moc k rozebírání, používá se pro drtivou většinu webových projektů, byť programátoři běžně využívají asi 5—10 % jejích možností.

Pokud si dám dohromady důvody pro SQLite, jsem na vážkách.

  • Plusy:
    • Její integraci lze považovat za standardní součást instalace PHP (dá se spolehnout, že na serveru bude podporována).
    • Triviální přenos dat mezi různými počítači/hostingy.
    • Pro SELECTy je v řadě případů rychlejší, než MySQL.
    • Přestože je to již vzácné, ale SQLite je databáze zdarma na webhostingu, kdežto i u MySQL se najdou černé ovce, jež ji zpoplatňují.
  • Minusy
    • Není multiuživatelská, aktivní operaci (tj. jinou než výběr dat) může dělat jediná aplikace/jediný proces. Bohužel stále nemám vyzkoumáno jak se chová připojení v PHP aplikaci když se paralelně načítají data několika uživatelům (tj. zda se sdílí jediné připojení, nebo se pro návštěvníky webu požadujících obsah v tutéž chvíli vytvoří tolik připojení mezi databází a PHP, kolik jich je aktivních).

MySQL je zcela určitě bezpečná volba, při využití InnoDB tabulek i velmi rychlá a efektivní. SQLite je minimalistické řešení, víceméně odpovídající mým ideálům. Protože je SQLite pro mě pole poměrně málo prozkoumané, láká mě celé řešení přenést na tuto databázi, ale nevím jak velkou snese zátěž návštěv a jak se chová při souběžném spuštění několika scriptů vyžadujících data z téhož databázového serveru.

Jak z mého blábolu příspěvku vyplývá, SQLite je lákavou alternativou, víceméně mám vše připravené pro ostré nasazení (vedle MySQL verze), ale ostrého nasazení se trochu bojím. Pokud mi někdo dovede fundovaně odpovědět, jak je to s kombinací PHP/SQLite u webu s návštěvností do 5000 UIP denně, budu velmi rád.

Komentáře

3 komentáře: „Databáze pro eshop/cms, váhání mezi MySQL/MariaDB a SQLite“

  1.   avatar
     

    Doporučuji MariaDB, SQLite to neuveze.

  2. Zdeněk Burda avatar

    Sqlite mi připadá prima na drobné aplikace kde se moc nemění schema případně na aplikace u kterých nehrozí, že budou provozované na nějakém sdíleném úložišti. To zrovna v případě webshopu (dle mého) sqlite vylučuje.

    1. MaReK Olšavský avatar

      @Zdeněk Burda: Díky, beru argumenty a zůstanu radši u klasiky MySQL/MariaDB. Někde jsem narazil na info o webech s SQLite a provozu kolem 100 000 UIP denně, ale já sám ji nemám v takovém overloadu nasazenu, takže nedůvěra je. Abych nekecal že nemám nasazenu, tak na pár webech od OCAL Webdesign SQLite je, ale jsou v ní buď novinky, nebo jídelní lístky, návštěvnost <1000 UIP denně.