![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 8 Dołączył: 8.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Chciałbym się dowiedzieć co będzie lepszym rozwiązaniem zapisanie zdjęcia do bazy danych (MySQL) czy jako zwykły plik graficzny na serwerze? Z góry dzięki za odpowiedź Ten post edytował ZeTu 21.08.2013, 00:41:53 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 3 Dołączył: 17.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego nie trzymać plików w bazie?
Może dlatego, że w takim systemie dane przetwarzane są 3 razy. Najpierw baza musi je wysłać do drivera w języku serverside (PHP), później driver musi umieścić je w lokalnej strukturze danych (2 operacje kopiowania), na koniec dane trzeba przetworzyć i wysłać do przeglądarki. 3 razy to wersja bardzo optymistyczna, pomijająca operacje kopiowania danych występujące między userland a kernelem, które występują co najmniej dodatkowe 2 razy. Więc CPU zamiast robić cokolwiek pożytecznego w kółko przepisuje te same dane. Jak to serwujesz normalnie to dane odczytujesz bez przetwarzania, bezpośrednio z dysku (cache), nie trzeba ich nawet nigdzie kopiować, "nowe" kernele (takie nowsze niż robiono 10 lat temu) mogą wysyłać dane bezpośrednio do interfaceu sieciowego z pominięciem userland. Cytat sendfile() copies data between one file descriptor and another. Because this copying is done within the kernel, sendfile() is more efficient than the combination of read(2) and write(2), which would require transferring data to and from user space. Cytat If your OS supports a sendfile(2) system call, make sure you install the release and/or patches needed to enable it. (With Linux, for example, this means using Linux 2.4 or later. For early releases of Solaris 8, you may need to apply a patch.) On systems where it is available, sendfile enables Apache 2 to deliver static content faster and with lower CPU utilization. Druga sprawa to fakt, że trzeba ręcznie obsługiwać cacheowanie, niewielu ludzi potrafi zrobić to dobrze. A trzeci problem, to fakt że tak napisany skrypt nie obsługuje partial-content, więc jeśli np. na komórce padnie połączenie to trzeba będzie ściągać cały plik od nowa. Więc się skończy albo niedorobionym kodem, albo marnym wymyślaniem koła na nowo i implementowaniem podstawowych operacji HTTP (już widzę jak będzie z kompatybilnością takiej "rzemieślniczej" implementacji robionej przez kogoś, kto ma może na desktopie 3 przeglądarki + 2 komórki). Na prawdę nie można chyba zrobić wiele głupszego, niż słać pliki z bazy (no chyba, że piszemy jakiś mikro-skrypt który odwiedza 30 ludzi dziennie). To świetny materiał na atak DOS. Jak ktoś się dowie, to może jednym łączem 128 kbit ubić cały serwer a być może i zamulić sieć usługodawcy po prostu inicjując requesty. Już o backupach nie wspominając (taki plik w bazie, jako dump zajmuje 3-4x więcej miejsca na dysku) Cytat Wykonaj upload kilku gigabajtowego pliku przez http, omijając limity php.ini - większość dostawców nie zezwala na modyfikowanie ini, a jeśli już to nie pod takie wartości. Serwer dedykowany w OVH kosztuje 15 złotych brutto, średni VPS 20. Plik można podzielić i przesłać. Jak na dzielonym hostingu załadujesz do BLOB's nawet paręset MB crap'u to wylecisz po 10 minutach bo tak obciążysz system że od razu zauważą. Zwłaszcza, że w normalnych rozwiązaniach są dedykowane serwery DB... więc śląc ten crap w kółko po sieci tak im obciążysz linki że cię wywalą nawet zanim zauważą nadmierne obciążenie CPU i dysków. BTW: Myślałem, że ten "dylemat" rozwiązano 10 lat temu (IMG:style_emoticons/default/wink.gif) Po to się buduje szybkie serwery plików i rozwija kernele, żeby można było słać setki tysięcy statycznych plików na sekundę z jednej maszyny. Nie sztuka nakupić sprzętu za 100 tysięcy i go zamulić 50 transferami / s http://lowlatencyweb.wordpress.com/2012/03...rvers-are-fast/ http://www.techrepublic.com/article/use-se...-data-transfer/ http://redmine.lighttpd.net/projects/1/wiki/Docs_Performance http://www.lighttpd.net/benchmark/ Każdy nowocześniejszy serwer ma nagłówki, żeby serwowania plików nie robić z interpreterów po stronie serwera... a każdy nowocześniejszy OS obsługuje operacje atomowe na plikach, więc jedyna potencjalna zaleta bazy i tak tutaj odpada. http://redmine.lighttpd.net/projects/1/wik...HTTPD-send-file Ten post edytował xdev 24.08.2013, 13:17:08 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 05:50 |