Není to tak jednoznačné.
Záleží na několika faktorech, jedním z těch důležitějších jsou průměrná velikost souboru a počet přepisování. Co se týče čistě výkonu, objekty do 256 KiB je lepší ukládat do databáze, objekty nad 1 MiB do souborů; mezi těmito hodnotami není jasný vítěz a mělo by se přihlédnout k dalším faktorům.
Jen poznámka ke Scorpiusově bodu 2) pokud se obrázek má zobrazit na klientově počítači, pak "velký blok binárních dat" se k němu musí přenést tak jako tak. Jde jen o to kudy.
výhody ukládání do souborů (doplnění):
* cesty, kterými se načtou všechny obrázky, řeší webserver (a jeho operační a souborový systém)
* tzn. obsahy obrázků nejdou přes databázi a nekonkurují si s konvenčními databázovémi daty
výhody ukládání do databáze:
* konzistence dat
* možnost uzamknout metadata do obrázku a jeho obsah jako jeden celek
* obrázek a jeho miniaturu lze držet atomárně v jednom místě
* lepší verzování (a možnost "undo" nad některými operacemi, která ve file systému jaksi nejde)
* při hromadné operaci s obrázky lze používat transakce
* nemáš omezení souborového systému
** v názvu (uznávám, že to většinou není problém, ale přece)
** v maximálním počtu souborů v jednom adresáři (uznávám, že se to dá vyřešit, ale přece)
** pokud to vyloženě takto chceš, můžeš mít víc obrázků stejného jména
** u případné migrace musíš myslet na specifika cílového souborového systému (jinými slovy je to na něm závislé), příklad: rozlišování velkých/malých písmen
* v případě obrázků SVG lze vyhledávat fulltextově v jejich obsahu
Pro více info viz například
http://arxiv.org/ftp/cs/papers/0701/0701168.pdf (ta je mimochodem pro Win/ASP.NET/MSSQL Server). Vím, že o tom byl ještě český článek na zdrojáku nebo rootu, ale už jsem ho nanašel.
Dělal jsem projekty, kde byly obrázky ukládány jak do souborů tak do databáze, a nejsem zavilý zastánce ani jednoho - jednoduše každý způsob má své výhody i nevýhody.
mé zkušenosti v případě projektů, které soubory ukládaly do souborů:
* lidský faktor
** v jedné z prvních verzí byly přepsány soubory s lomítkem v názvu, protože lomítko bylo webalizováno na minus a soubor s tím názvem už existoval (byla to chyba programátora, neprezentuju to jako nevýhodu tohoto řešení).
** k projektu přibrali nového člověka, který jednoho dne změnil strukturu adresářů a než se na to přišlo a opravilo to, nefungovalo kompletně nic
** potom jiný člověk hromadně manipuloval s adresáři (kopíroval/přesouval..), byl přerušen telefonátem a po jeho skončení už si nepamatoval, kde skončil (a žádné ROLLBACK nebylo)
** jednou update souborů z nějakého obskurního FTP klienta zmršil názvy asi u tisícovky souborů, to bylo zjištěno až mnohem později a příšerná piplačka to všechno opravit
** jiný FTP klient měl zase při jednom takovém kopírování zapnut převod na malá písmena a tak u několika souborů se (z pohledu OS) cesta neshodovala soubory se nezobrazovaly
** přes všechna opatření u projektu s více lidmi s přístupem k FTP byly neustále čas po čase nacházeny nekonzistence jako chybějící obrázek k miniatuře či miniatura k obrázku nebo to, že si obrázek a miniatura neodpovídaly, apod.
mé zkušenosti v případě projektů, které soubory ukládaly do databáze:
* zálohovací SQL soubor (pochopitelně) nakynul na desítky MB
** u daného hostingu to zrovna nebyl problém, ale měl bych asi říct, že u jiných hostingů by mohl být
** to mě přimělo rozdělit zálohování speciálně pro obrázky a ostatní tabulky (které dohromady nezabíraly ani mega)
* ještě ad zálohování, konkrétně jeden velký soubor versus tisícovka malých - stáhnout/nahrát jeden velký soubor je (empiricky vzato) rychlejší, ale v případě přerušení spojení (nepamatuji se, že by se mi stalo) pak většinou přijdeme o všechno
* z localhostu se "někdy" i menší obrázky načítaly pomaleji, na hostingu to fungovalo normálně. Takže si vlastně tak jistý výsledky té studie nejsem. ;)
28. 8. 2014 12:55:32