Recept na vejce Vindaloo - chutný a kořeněný recept !! Goanský recept

Moje aplikace (klasický asp yay!) Má asi 2,1 milionu obrázků @ 25 GB a to představuje pouze 90 dní dat a já bych chtěl jít minimálně na 365.Musím je dostat pod kontrolu a zvažuji všechny možnosti. Co si myslíte o výhodách a nevýhodách následujících postupů:

  • Výhody serveru SQL Server: Snadné zálohování Nevýhody: Výkon?
  • Výhody systému souborů: Nevýhody rychlosti: Redundance, zálohování je pomalé (v současné době se zkoumá místo toho syntetické úplné zálohování, které by to mohlo zlepšit)
  • S3 a podobné výhody: Šířka pásma se přesunula z mého datového centra na Amazon, prakticky neomezené úložiště. Nevýhody: Náklady, analýza nákladů je složitá (odhadem 80% mé šířky pásma jsou obrázky pro účely návratnosti investic), obtížné / nákladné pro poskytovatele služeb, pokud by to bylo nutné

Řeší někdo jiný výzvu týkající se více milionů obrázků a jak jste ji řešili?

  • 4 Nepoužívejte ne ne ne ne neukládejte obrazová data (objekty BLOB) do databáze. Udělali jsme tuto chybu před mnoha lety a od té doby za ni platíme. Databáze je však skvělá pro metadata.
  • Podívejte se na můj příspěvek o datovém typu FILESTREAM - mohlo by to změnit váš názor.

Nemáme miliony obrázků, ale máme stovky tisíc a používáme hybridní přístup - mysql pro metadata, obrázky uložené na místním disku pro zálohování a přenesené na Amazon s3, kde jsou poskytovány uživatelům. S Amazonem a dostupností jsme neměli žádné potíže. Přechod na cloudfront je v našich plánech, stačí si najít čas.

Tato diskuse vám může pomoci při rozhodování:
http://ask.metafilter.com/59635/Millions-of-images

Chtěl bych jít s metadaty na serveru SQL a soubory na souborovém systému (nebo s3 nebo cloudfront). Nejlepší odpověď však závisí na některých dalších vzorcích použití:

  • obrázky se často mění
  • můžete podávat obrázky přímo ze souborového systému (tj. img src='...' ) nebo je potřebujete kontrolovat přístupem. Pokud je to druhé, pak je nejlepší databázové řešení
  • obsluhujete po většinu času malý počet obrázků (posledních 10%) nebo je distribuce relativně rozšířená.

Zálohy pro miliony obrázků budou komplikované bez ohledu na to, jak je uspořádáte - je to jen spousta dat. Chtěl bych najít dobrou případovou studii o zálohování objektů BLOB na serveru SQL, než jsem se k tomuto řešení zavázal. (Zde je článek, který by mohl být užitečný: http://www.databasejournal.com/features/mssql/article.php/3738276/Storing-Images-and-BLOB-files-in-SQL-Server-Part-4.htm )

  • Zálohování bude složité, ale přinejmenším u záloh na úrovni souborů nemusíte (obecně) obnovovat celou zálohu, abyste obnovili jeden záznam / obraz. IMO, souborový systém ve výchozím nastavení, pokud vám databáze neposkytne něco, co nemůžete udělat jinak. +1
  • Souborové systémy jsou určeny k ukládání souborů - najdete souborové systémy určené k efektivnímu ukládání milionů souborů. Databáze jsou navrženy pro věci, jako jsou vaše metadata - dotazování a související. Pokud nemáte jen velmi málo obrázků, je to pravděpodobně nejlepší způsob (kromě cloudových řešení).

Pokud se rozhodnete jít s jejich ukládáním do souborového systému, možná budete chtít přečíst tuto otázku ServerFault pro některé, co dělat a ne: Ukládat milion obrázků do souborového systému.

Ignorujte lidi, kteří říkají: „Neukládejte obrázky / binární data do databáze„protože své odpovědi zakládají na starých informacích (za předpokladu, že budete data ukládat do sloupce typu VarBinary). Problémy s výkonem při ukládání obrázků pomocí serveru SQL lze nyní zmírnit pomocí datového typu FILESTREAM v serveru SQL Server 2008. V v podstatě vám datový typ FILESTREAM umožňuje kombinovat snadné ukládání dat v databázi s výkonem, který získáte při poskytování souborů ze skladu souborů NTFS.

Citovat SQL Mag:

„Nová podpora FILESTREAM serveru SQL Server 2008 kombinuje výhodu přístupu k LOB přímo ze systému souborů NTFS s referenční integritou a snadným přístupem, který nabízí relační databázový stroj SQL Server.“

Pro více informací si přečtěte tento blog od Ravi S.Maniam na MSDN.

  • Mění vůbec úložiště FILESTREAM příběh zálohování / obnovení? To je náš největší hangup právě teď ... pokud jsou uloženy ve VarBinary, byl by to relativně přímočarý příběh.
  • Ne, s daty FILESTREAM se zachází jako s jakýmikoli jinými, takže se zálohují s databází. Citovat MSDN: "můžete použít všechny modely zálohování a obnovy s daty FILESTREAM a data FILESTREAM jsou zálohována se strukturovanými daty v databázi." - technet.microsoft.com/en-us/library/bb933993.aspx

I když se nezabývám výzvou pro miliony obrázků, použil bych Amazon CloudFront. Všechny soubory jsou uloženy v kbelíku S3, ale jsou serverem prostřednictvím systému doručování obsahu Amazon. S3 bych sám nepoužíval.

Moje druhá volba by byla souborový systém. Jednoduché a snadné, jediným problémem je, že pokud všechny tyto soubory skončí v jednom adresáři, celá věc se zhroutí, tvrdě.

SQL by pro mě nebyl pro takový systém možností. Nejen, že vám bude účtován přenos šířky pásma, bude vám také účtováno zpracování dotazu - to bude velmi záviset na hostování, ale předpokládám, že používáte dedikovaný server nebo alespoň vps, kde vám bude účtován poplatek pro cykly. Pak použije celý web, pokud používá stejnou databázi jako server obrázků. Pokud ne, přidáte takovou složitost nutnosti spravovat dvě připojení k databázi.

  • V mém scénáři je v současné době vše na premise na mých vlastních serverech, které vlastním. Neexistují tedy transakční náklady samy o sobě.

Databáze jsou navrženy pro transakční data / konzistenci a zabezpečení.

Mediální soubory (obrázky, audio, video) mají tendenci být vytvářeny a možná mazány, ale velmi zřídka aktualizovány. Obecně tedy není nutné, aby byly transakčně konzistentní s jinými daty, a databáze vám tam nepřinese žádnou skutečnou výhodu. Textový obsah může být jiná věc.

Pokud nemáte problém s konceptem, že někdo váš soubor vytáhne přímo, pokud má adresu URL souboru, pak je systém souborů v pořádku. Pokud jste provozovali něco jako knihovnu fotografií, kde očekáváte účtování, než si lidé soubor stáhnou, pak je to pravděpodobně jiná věc. To znamená, že jakmile uživatel zaplatí, může získat adresu URL specifickou pro daného uživatele nebo platnou pouze na krátkou dobu a aplikace zpracovává více nebo dočasné adresy URL směřující na stejný obrázek. To by ještě mohla zvládnout aplikace a souborový systém, ale nakonec média obsluhujete prostřednictvím aplikace, nikoli jako přímé stahování souborů (což by většinou vyloučilo jakékoli výhody S3) a mezi DB a souborovým systémem je menší rozdíl .

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?