it-swarm-eu.dev

Je lepší ukládat obrázky do BLOBu nebo pouze do URL?

Možný duplikát:
Soubory - nebo ne?

Zajímalo by mě, jestli existuje nějaký dobrý důvod k tomu, aby se blobová pole v databázi stále používala. Před pár lety jsem pracoval s DB se spoustou obrázků v něm, DB byl velmi pomalý a neviděl jsem žádný dobrý důvod k tomu, aby obrázky zůstal uvnitř DB, takže jsem obrázky dostal ven a uložil názvy souborů namísto.

Byl to chytrý tah? Co byste dělali u mě?

38
eiefai

Jak můžete říci z ostatních odpovědí, jedná se o velký „záleží“. Některé další faktory mohou být, pokud platíte za hosting, účtují více za ukládání souborů nebo ukládání databáze. Ukládání souborů je obvykle levnější, zejména pro cloudové služby.

Pokud jste hostováni sami a používáte SQL Server, nadcházející verze, kódové jméno Denali, rozšíří FILESTREAM , aby umožnil přístup prostřednictvím TSQL i souborového systému. Také zajistí, že tyto zůstanou synchronizované. Můžete přistupovat, aktualizovat, mazat z obou stran a vše bude uspořádáno.

Proveďte výzkum a zjistěte, co je pro vás důležité, a vyberte směr na základě této volby.

Důvodem použití BLOB je docela jednoduše ovladatelnost - máte přesně jednu metodu pro zálohování a obnovení databáze, můžete snadno provádět přírůstkové zálohy, existuje nulové riziko, že obraz a jeho metadata uložená v tabulkách DB se stále synchronizují , máte také jedno programovací rozhraní pro spouštění dotazů nebo načítání/ukládání obrázků, takže nemusíte dávat přístup k souborovým systémům vzdálených klientů a víte, že stejné GRANTy se použijí na obrázky a jejich přidružená data. Navíc máte jednu metodu správy úložiště (např. V Oracle byste mohli dát vše na ASM a používat Oracle jako své LVM pro všechno).

Další aplikací je smíchání relačních dat se serializovanými objekty (BLOB může být jakýkoli binární, nemusí to být obrázky). Nebo můžete spustit dotaz na relační data a bajty x-y v BLOB, což může být například záhlaví souboru. Aplikace jsou ve skutečnosti nekonečné.

Pokud byl přístup BLOB pomalejší než přístup k souborovému systému, je velmi pravděpodobné, že vaše databáze byla nesprávně nakonfigurována.

17
Gaius

Nepoužívám kuličky - většinou z pohledu zálohování a obnovy, protože nechci, aby data blob zpomalovala zálohování.

Neukládám úplnou adresu URL, ale ... uložím pouze cestu pod určitým bodem a buduji cestu, protože mám více než jeden způsob, jakým lidé a programy přistupují k mým souborům (FTP, HTTP, místní adresář, NFS připojené adresáře).

... samozřejmě se zabývám více a většími obrázky než většina lidí ... jeden z mých datových souborů dostane asi 700 GB obrázků (komprimovaných) denně. Ale i miniatury těchto obrázků si stále ukládám navenek.

13
Joe

Jsem velkým fanouškem ukládání „referenční“ kopie obrazu do databáze - z pohledu správy/obnovy po katastrofě je to opravdu způsob, jak létat.

Nyní můžete pro většinu aplikací udělat spoustu věcí, abyste poskytli obraz ze souborového systému, takže na samotný databázový server nevyvíjíte tolik tlaku, aby dělal věci, které ve skutečnosti nechce.

8
Wyatt Barnett

Pokud pracujete s linuxem, ukládání obrázků do souborového systému a ne do databáze má výrazně lepší výkon, viz tento výňatek knihy Brada Edigera Advanced Rails .

8
j.p.

Nejsem moc příznivcem ukládání obrázků do databáze. V malé aplikaci s několika uživateli to vypadá jako snadné řešení, ale když začnete škálovat, je to obtížnější.

Mým přednostem je začít ukládat obrázky do složky na webovém serveru, ale udržovat cestu ve snadno přístupné konfiguraci, abych je mohl rychle přesunout na svůj vlastní dedikovaný optimalizovaný obrazový server. Později je chci stejně přemístit někam jinam (myslím S3 nebo Akamai). To vše je mnohem komplikovanější, pokud musím změnit kód, který očekával, že je přečte z databáze.

5
phred

Byl to chytrý tah?

Pokud to byl chytrý tah nebo ne, záleží na vašem konkrétním případě:

Pokud umístění souboru přímo ovlivňuje jakoukoli strukturu URL nebo pokud ukládáte úplné adresy do databáze (špatně), mohu říci, že to byl špatný krok, protože budete mít potíže v případě, že někdo přesune nebo přejmenuje nějaký adresář.

Ale jako Ale pokud je vaše aplikace postavena tak, že jednoduše musíte nasměrovat adresář souborů a logika přístupu k souborům je dynamická, udělali jste inteligentní tah z následujících důvodů:

  • Při ukládání databáze: Pokud je potřeba obsloužit mnoho obrázků na žádost, zvýšíte dobu odezvy vaší aplikace, protože soubory budou posílány synchronně do sítě. Na server také přidáte trochu dalšího zpracování.

  • Ukládání souborů je obvykle levnější než ukládání databáze.

  • Při ukládání souborů (pokud neexistují omezení pro přístup k obrázkům: k dané skupině obrázků může přistupovat pouze určený uživatel), není pro přístup k obrázkům nebo jiným druhům souborů zapotřebí žádné zpracování.

  • S úložištěm databáze není možné přistupovat k vašim souborům pomocí FTP (docela zřejmé, ale je dobré si pamatovat).

  • Úložiště databázových souborů zpomalí nebo zkomplikuje pravidelné zálohování databáze.

Co byste dělali u mě?

Toto rozhodnutí bych ponechal, dokud se neobjeví opačný dominantní faktor.

Doufám, že to pomůže.

4
marcio