Jak nejlépe ukládat soubory? Do databáze nebo na disk?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fary
Člen | 155
+
0
-

Ahoj, tohle se sice netýká přímo Nette, ale rád bych znal váš názor a rád bych se zeptal, jestli je lepší ukládat soubory (i obrázky) na disk a využít tak filesystému nebo do databáze? Když je budu ukládat do databáze, tak tam sice budu mít tu mezikomunikaci s databází, ale není pro tohle databáze právě určená? všem pro manipulaci se soubory se mi pak zdá lepší právě ten filesystém. A co když mám těch souborů v databázi hodně? Třeba 10 000 řádků v tabulce? Co je lepší?

Editoval fary (16. 12. 2013 13:30)

Jan Suchánek
Člen | 404
+
0
-

@fary: Já jsem ukládal všechny soubory do databáze (dvě tabulky upload + upload_binary) i s určením mime a obrázky tahal pomocí helperu a ten uměl i různé velikosti i vodoznak a podobné blbosti, vlastěn delegoval požadavky na určitý repository, který vše tohle zařizoval, hlavně také řešil strukturu file systému, aby se někde netvořili stovky souborů.

K čemu to je dobré? Nevím. Ovšem hodně sem viděl, že se cpe vše do jednoho adresáře což je fuj.

fary napsal(a):

Ahoj, tohle se sice netýká přímo Nette, ale rád bych znal váš názor a rád bych se zeptal, jestli je lepší ukládat soubory (i obrázky) na disk a využít tak filesystému nebo do databáze? Když je budu ukládat do databáze, tak tam sice budu mít tu mezikomunikaci s databází, ale není pro tohle databáze právě určená? všem pro manipulaci se soubory se mi pak zdá lepší právě ten filesystém. A co když mám těch souborů v databázi hodně? Třeba 10 000 řádků v tabulce? Co je lepší?

Jan Suchánek
Člen | 404
+
0
-

@fary: Lze taky ukládat do tabulky upload jen informace o jaký soubor se jedna a kde je uložený, ale přijde mi příjemnější a konzistentnější při případné migraci nepřijít o nějaké soubory tím že se mi stáhnou nulové.

mkoubik
Člen | 728
+
0
-

Pokud ty soubory servíruješ přes php pomocí nette, tak je dobrý si před to dát nějakou http cache.

Jan Suchánek
Člen | 404
+
0
-

@mkoubik v jakých případech se vyplatí je připravovat pomocí php?

mkoubik
Člen | 728
+
0
-

Například pokud z obrázků generuješ víc variant (rozměry, formát, kvalita, transformace atd.) a nevíš dopředu které budeš potřebovat, případně pokud ty varianty za chodu přibývají. Pak se mi osvědčilo to generovat pomocí php a dát před to cache. Můžeš si buď generovat ETag třeba z hashe obrázku a použít Varnish, nebo mnohem jednodušší varianta – při přístupu do php vygenerovat fyzický soubor na stejné adrese a ten servírovat třeba nginxem (a při „invalidaci“ ho jen smazat).

Jan Suchánek
Člen | 404
+
0
-

@mkoubik: Aha ja to dělal kdykoliv kdy nahled chyběl helprem a ukladal do filesystemu s tím že kdykoliv kdy jsem obrázek změnil změnilo se i jeho jméno a znovu se vygeneroval. Tudíž pak tohle nebylo potřeba, o varianty se staral Repository.

Editoval jenicek (16. 12. 2013 16:43)

Jiří Nápravník
Člen | 710
+
0
-

Neivdím důvod proč ukládat soubory do databáze. Snad vždy jsem viděl a sám používám – je to soubor patří do filesystemu, už ten název FILE system:-) Jinak samozřejmě ne všechno cpát do jednoho adresáře, pak je tam hodně dlouhá doba hledání a nedá se s tím pracovat, mě se osvědčilo ukládat na filesystem photo/YEAR/MONTH/DAY a mám to rovnoměrně rozloženo. No a pak samozřejmě cesta a metadata jsou uložena v db.

A u větších aplikací, kde je hodně fotek si ani tu práci s obrázyk v dtb nedovedu představit. fuj

Jan Suchánek
Člen | 404
+
0
-

@Jiří Nápravník: Samozřejmě, ale já udržuji jen originál v oddělené tabulce a všechny další jsou ve filesystemu.

romiix.org
Člen | 343
+
0
-

Keď som s PHP pred pár rokmi začínal (PHP3) tak som sa v knihe dočítal, že je možné do DB ukladať aj súbory. Vtedy sa mi to zdal super nápad:)

Relatívne rýchle som toto riešenie opustil z presvedčenia, že súbory patria na na FS a pri ňom som zostal doteraz.

Faktom ale je, že mi nenapadá reálny dôvod prečo obrázky neukladať do DB (a potom samozrejme kešovať). Výhodu vidím v zjednodušení modelov – informácie o zaradení obrázku sa mi aj tak ukladajú do DB, tak by sa rovno mohol aj jeho obsah. Ďalšou minivýhodou je neobmedzená veľkosť DB na hostingu.

Má niekto neodškriepiteľný dôkaz, že je ukladanie súborov do databázy zlo?

Jan Suchánek
Člen | 404
+
0
-

@romiix.org: Starší diskuze na http://php.vrana.cz/…databaze.php

Další zajímavý článek: http://www.fuzzy.cz/…do-databaze/

Editoval jenicek (16. 12. 2013 17:48)

Jan Suchánek
Člen | 404
+
0
-

@romiix.org: Podle mě pokud se čtou obrázky jen když je opravdu potřeba, tak není problém např. při generování náhledů.

Otázka je co se stane, když bude databáze opravdu obrovská?

Edit: ještě jeden pěkný článek: http://www.heronovo.cz/…-souboru-db/

Editoval jenicek (16. 12. 2013 18:03)

romiix.org
Člen | 343
+
0
-

Takže keď to zhrnieme:

Ukladanie súborov do DB bez FS cache

Plusy
  • Jednoduchší vývoj
  • Jednoduchšia konzistentná záloha
  • Počet súborov nie je obmedzený FS
Mínusy:
  • Rýchlosť
  • Pamäťová náročnosť

Ukladanie súborov do DB s FS cache

Plusy
  • Jednoduchší vývoj
  • Jednoduchšia konzistentná záloha
Mínusy:
  • Pamäťová náročnosť (čiastočne – pri prvom použití)
  • Počet súborov cache je obmedzený FS

Ukladanie súborov na FS s cache (metadáta z DB)

Plusy
  • Malá pamäťová náročnosť
Mínusy
  • Zložitejší vývoj
  • Zložité vytvorenie konzistentnej zálohy
  • Počet súborov je obmedzený FS

Editoval romiix.org (16. 12. 2013 18:34)