#1 před 3 lety

_Martin_
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 718

Ukládat obrázky do databáze?

Ahoj, chystám se na tvorbu fotogalerie a zvažuji, zda obrázky ukládat:

  1. do databáze
  2. na disk a do databáze dát pouze nějaký referenční údaj (jméno souboru, id,…)

Z pohledu výkonnosti se více kloním k druhému řešení, neboť velikost fotek bude s jistotou větší, než stovka kilobajtů, takže by první řešení kladlo velký zápřah nejen na samotnou databázi, ale i na přenos dat mezi databází a web serverem. Zvedla by se také paměťová náročnost skriptu.

Ovšem první řešení by mi umožňovalo mít data konzistentní, odpadla by nutnost hlídat integritu dat – databáze si toto hlídá sama. Ve druhém případě mohu mít v databázi záznamy o fyzicky neexistujících obrázcích nebo naopak mohu mít uloženy obrázky, na které neexistuje v databázi odkaz.

Zajímalo by mě, zda někdo podobný problém řešil se zajímavějším výsledkem, než je prosté využití druhé metody a občasná „ruční“ kontrola integrity?

 

#2 před 3 lety

SniperCZE
Člen
Registrovaný: 6. 1. 2009
Příspěvky: 13

Re: Ukládat obrázky do databáze?

Ja ukladam data na disk a v db mam jenom reference (konkretne nazev souboru). Pri ukladani to resim tak, ze nejdriv uploadnu fotku, vytvorim nahledy a pripadne resiznu velikost a az kdyz vsechno tohle probehne uspesne tak zapisuju soubor do DB. Takze chybou muze nastat pouze situace, kdy mam na disku soubor, na kterej nemam v db referenci (nepocitam, kdyz nekdo smaze z disku data). Pri odstranovani zase nejdriv smazu radek v db a pak az mazu soubory na disku (pred smazanim z db kontroluju, jestli mam prava soubory smazat). Osobne nepovazuju soubory nez reference v db za problem a neresim, maximalne jednou za cas spustim skript, kterej smaze soubory bez zaznamu v db.

 

#3 před 3 lety

Wosonj
Člen
Registrovaný: 22. 12. 2008
Příspěvky: 65

Re: Ukládat obrázky do databáze?

Do databáze obrázky rozhodně necpi. Všechny výhody a nevýhody si popsal celkem dobře.

Případnou nekonzistenci můžeš řešit prostým testem přes file_exists() při načítání stránky (minimální výkonnostní dopad), pokud by ses bál výkonu, tak lze testovací větev uzavřít do podmínky – např if (rand(0,99)<5). Další možnost je řešit to přes ErrorDocument 404 handler nebo jak píšeš nějakým maintenance skriptem (tam to lze z obou stran).


hledáme zkušené programátory v PHP / Nette: http://www.twobits.cz/volna-mista/

 

#4 před 3 lety

skocourek
Člen
Registrovaný: 15. 6. 2007
Příspěvky: 200

Re: Ukládat obrázky do databáze?

Řeším teď něco podobného, i když otázka z ní trošku jinak.

Jedná se o velmi jednoduchou galerii (vlastní galerie a informace o nich jsou uložené v databázi, navázané na zbytek RS), ale nevím, jestli má cenu v databázi evidovat fotky. Nepotřebuji u nich žádné popisky, datum vytvoření, vlastně by tam byly jen názvy souborů, které si ale dokážu zjistit přes mnou napsaný FileBrowser.

Co Vy na to?

 

#5 před 3 lety

_Martin_
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 718

Re: Ukládat obrázky do databáze?

Pokud si informace o fotkách nepotřebuješ ukládat do DB, tak rozhodně použít FileBrowser či tak něco. Osobně bych to řešil přes vlastní komponentu FileStorage, která je velmi podobná keši v Nette – má podporu jmenných prostorů a do každého jmenného prostoru lze nahrávat libovolné soubory. V tvém případě bych to řešil tak, že by pro každou galerii byl jmenný prostor (třeba fotogalerie/45, kde 45 je id galerie z DB) a v něm fotky té dané galerie.

 

Zápatí