Databázový systém v konečném důsledku ukládá data (BLOBy) taky jako soubory na disk a nečiní mu to žádné problémy. Takže z tohoto pohledu tomu nic nebrání. Problém je spíš v tom, jak BLOB z databáze dostaneš ke klientovi. Většinou máš totiž vrstvy:
disk → DBMS → aplikace (Java, PHP, Python…) → HTTP server (Apache, Nginx)
A pokud máš soubory v databázi, tak je musíš protáhnout přes SQL rozhraní mezi DB a aplikací (např. v Javě si tam otevřeš
InputStream) a pak mezi aplikací a HTTP serverem – v obou případech tam budeš s největší pravděpodobností v cyklu přehazovat data z jednoho „bufferu“ do druhého. Tzn. DBMS to tahá z disku do své paměti a předává do paměti aplikace a ta to předává ze své paměti do paměti HTTP serveru, který to následně předává klientovi. Tzn. problém není v tom, že by DB nezvládala uložení velkých dat, ale problém je v tom, kudy a jak ta data tečou potom. Zbytečně ti to zatěžuje aplikační server (který mohl dělat něco užitečnějšího než přehazovat bajty z jednoho místa na druhé) a aplikace se může stát i úzkým hrdlem, které to bude brzdit.
V případě souborů na disku pošleš z aplikace HTTP serveru jen cestu k souboru a HTTP server data servíruje rovnou z disku na síť. (samozřejmě bys to mohl dělat hloupě a číst v aplikaci data z disku a přehazovat je lopatou k HTTP serveru, ale proč bys to dělal, když stačí předat název souboru a dál se o to nestara?)
U některých DBMS je navíc problém v tom, že moc nezvládají defragmentaci, takže i když data smažeš, pořád ti zabírají místo. Zatímco souborový systém by se celkem v pohodě defragmentoval a uvolněné místo použil pro nové soubory.
Naopak argumentem pro soubory v DB jsou transakce a 100% konzistentní zálohy. Pokud máš data mimo DB v souborech, musíš si tohle ošetřit sám (ale není to zase tolik práce navíc).
Pokud je těch dat málo a nehrozí výkonnostní problémy, tak můžou převážit výhody uložení v DB – bude to na jednom místě, nebudeš muset nic řešit, zálohovat se ti bude vše najednou… – jinak bych ale volil spíš uložení do souborů a jejich přímé odesílání HTTP serverem (sám jsem to implementoval na svém webu a nebylo to moc práce navíc).
--
https://blog.frantovo.cz/