Zpravidla neukládejte soubory do databáze.
Co o tom říká příručka mysql? http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-optimization-tips.html
S webovými servery ukládejte obrázky a další binární prostředky jako soubory s názvem cesty uloženým v databázi, nikoli se samotným souborem. Většina webových serverů je lepší v ukládání souborů do mezipaměti než obsahu databáze, ukládání souborů je obecně rychlejší. (I když v tomto případě musíte řešit problémy se zálohováním a úložištěm sami.)
Vůbec neukládejte soubory zakódované v base4 do databáze
Funguje dobře, ale zabere to tolik času, než jsem očekával. Obrázek má tedy o 33 % větší velikost a vypadá naprosto vybouleně.
Jak jste zjistili, nežádoucí režie při kódování/dekódování + prostor navíc se spotřeboval, což znamená také přenos dat tam a zpět navíc.
Jak zmínil @mike-m. Kódování Base64 není metoda komprese. Proč používat kódování Base64 je také zodpovězeno odkazem, který zveřejnil @mike-m K čemu se kódování base 64 používá?.
Stručně řečeno, není co získat a mnoho ztratit kódováním obrázků base64 před jejich uložením do souborového systému, ať už je to S3 nebo jiný.
A co Gzip nebo jiné formy komprese bez použití base64. Opět odpověď zní, že není co získat a mnoho ztratit. Například jsem právě gzipoval obrázek JPEG 1941980 a ušetřil 4000 bajtů, což je úspora 0,2 %.
Důvodem je, že obrázky jsou již v komprimovaných formátech. Nelze je dále komprimovat.
Když ukládáte obrázky bez komprese, mohou být doručeny přímo do prohlížečů a jiných klientů a mohou být uloženy do mezipaměti. Pokud jsou komprimované (nebo zakódované v base64), musí je vaše aplikace dekomprimovat.
Moderní prohlížeče jsou schopny zobrazit obrázky base64 vložené do HTML, ale pak je nelze uložit do mezipaměti a data jsou asi o 30 % větší, než je potřeba.
Je to výjimka z normy?
Uživatel tam může zveřejňovat data a obrázky a vše je v bezpečí.
Předpokládám, že máte na mysli, že si uživatel může stáhnout obrázky, které mu patří nebo které s ním sdílí. Toho lze snadno dosáhnout uložením souborů z webového prostoru v systému souborů a uložením pouze cesty v databázi. Poté je soubor odeslán klientovi (po provedení požadovaných kontrol) pomocí fpassthru
A co když vyrostu na 100 000 uživatelů
Jak se starají o soubory obrázků. V otázce výkonu, když se jedná o velkého uživatele, zdá se mi, že potřebuji složku 100 000 pro 100 000 uživatelů a jejich podsložku. Když velké množství uživatelů prohlíží stejnou kořenovou složku, jak souborový systém zpracuje každou jedinečnou složku.
Použijte CDN nebo použijte souborový systém, který je pro to speciálně vhodný, jako je BTRFS
Databáze má dobré vyhledávací zařízení, dobré vlákno bezpečné připojení, dobrou správu relací. Změnil se tento scénář, když se jednalo o velký provoz
Ano vskutku. Využijte jej naplno uložením všech informací o souboru a jeho cesty k souboru do databáze. Poté uložte samotný soubor do systému souborů. Získáte to nejlepší z obou světů.