Thread View: pl.comp.lang.php
14 messages
14 total messages
Started by jivanmukta
Thu, 12 Feb 2015 17:14
dane binarne w bazie?
Author: jivanmukta
Date: Thu, 12 Feb 2015 17:14
Date: Thu, 12 Feb 2015 17:14
28 lines
3048 bytes
3048 bytes
Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL) przechowuję m.in. dane o nieruchomościach, dla których użytkownik może załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem pewną książkę o PHP5+MySQL i tam polecają rozwiązanie z przechowywaniem danych binarnych w bazie.
Pytałem już o to, ale ponieważ nie jestem przekonany do mojego aktualnego rozwiązania (tzn. w systemie plików), zapytuję raz jeszcze - może wypowiedzą się inne osoby, z innymi argumentami. Szczerze mówiąc teraz bardziej mi się podoba przechowywanie danych w bazie, bo chyba na bazę jest więcej miejsca niż w systemie plików. Co prawda moja witryny na razie będzie działać dla woj. mazowieckiego, ale później potencjalnie na wiele krajów, również spoza Europy; zatem danych będzie sporo.
Rozwiązanie opisane w książce jest, w skrócie, następujące:
1. ładowanie obrazka do bazy:
$f = @fopen($_FILES['picture']['tmp_name'], 'r');
if ($f === NULL)
throw new FileAccessException();
$fsize = @filesize($_FILES['picture']['tmp_name']);
$fileData = addslashes(fread($f, $fsize));
fclose($f);
$query = <<< EOQUERY
INSERT INTO sample VALUES (..., '$fileData', ...);
EOQUERY;
2. odczyt obrazka z bazy:
$query = <<< EOQUERY
SELECT user_id, picture, file_type, file_size
FROM sample
WHERE user_id = $uid
EOQUERY;
...
if ($row !== NULL) {
header("Content-type: {$row['file_type']}");
header("Content-length: {$row['file_size']}");
header("Content-Disposition: attachment; filename = $uid.jpg");
header("Content-Description: PHP Generated Data");
echo $row['picture'];
}
Co o tym sądzicie?
Re: dane binarne w bazie?
Author: Borys Pogoreło
Date: Thu, 12 Feb 2015 18:29
Date: Thu, 12 Feb 2015 18:29
26 lines
1793 bytes
1793 bytes
Dnia Thu, 12 Feb 2015 09:14:10 -0800 (PST), jivanmukta@poczta.onet.pl
napisał(a):
> Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL)
> przechowuję m.in. dane o nieruchomościach, dla których użytkownik może
> załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te
> obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem pewną
> książkę o PHP5+MySQL i tam polecają rozwiązanie z przechowywaniem danych
> binarnych w bazie.
I jak konkretnie uzasadniają to rozwiązanie? Bo chyba mieli jakieś powody,
by to polecać?
> if ($row !== NULL) {
> header("Content-type: {$row['file_type']}");
> header("Content-length: {$row['file_size']}");
> header("Content-Disposition: attachment; filename = $uid.jpg");
> header("Content-Description: PHP Generated Data");
> echo $row['picture'];
> }
No super, teraz to odpal w starszym IE.
--
Borys Pogoreło
borys(#)leszno,edu,pl
Re: dane binarne w bazie?
Author: Ministerstwo Propagandy
Date: Thu, 12 Feb 2015 18:48
Date: Thu, 12 Feb 2015 18:48
1 lines
1028 bytes
1028 bytes
nie napisałeś mu "powrotu do zdrowia życzę", a to czemu?
Re: dane binarne w bazie?
Author: Lemat
Date: Fri, 13 Feb 2015 06:57
Date: Fri, 13 Feb 2015 06:57
57 lines
3205 bytes
3205 bytes
jivanmukta@poczta.onet.pl wrote: > Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL) > przechowuję m.in. dane o nieruchomościach, dla których użytkownik może > załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te > obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem pewną > książkę o PHP5+MySQL i tam polecają rozwiązanie z przechowywaniem danych > binarnych w bazie. teatrzyk zielona gęś przedstawia przypadek trzymania w systemie plików: P - przeglądarka A - apacz PHP - PHP M - MySQL 1) P - daj mnie tu plik taki a taki.bin od bajtu 1000 do 2000 A - masz od bajtu 1000 do 2000. Co więcej? bo jak nie to lecę obsługiwać kolejnych kolesi 2) P - daj mnie tu plik taki a taki.bin od bajtu 1000 do 2000 A - a czekajno nie tylko PHP się obudzi to ci odpowie w złośliwym tonie... PHP - wooo, wstałem, gdzie moja poranna kawa i inne parametry rozruchowe? PHP - no chyba se jaja robicie, przecież to trzeba odeskejpować... PHP - czekojcie, przecież ja musza pierdyliard inców includować... PHP - no dobra, przestępujemy do pracy... PHP - pierdolniemy se połączenie do bazy danych M - jestem, ktoś ty zacz? PHP - a daj pokój łączyłem się przeca z milisekundę temu M - ktoś ty zacz, bo rzucę połączeniem! PHP - no dobra, dobra. Masz tu login i hasło. M - czekaj no, sprawdzę w księgach M - dobra, wlozł, ale mam na ciebie oko! PHP - połącz mnie z bazą danych taką a taką M - a uprawnienia masz? sprawdzę... no dobra PHP - dawaj no pole takie a takie z tabeli takiej a takiej M - a uprawnienia masz? sprawdzę... no dobra M - niech no tylko je przekształcę do odpowiedniego formatu PHP - tylko 8GB a i tak wyglada jak najbliższy kernel panic PHP - co to ja miałem, jakieś tam parametry od-do były, czekaj, ale programista ciul jeden nie raczył w ogóle tego oprogramować, ciul z tym jedziemy pełnym plikiem. PHP - nagłóweczki i sruuu, poleciało... A - miało być tysiąc bajtów, tysiąc słyszysz?! nie słyszy, dawno się skilował... A - no to obrabiamy... i do przeglądarki sruuu, poleciało P - miało być tysiąc bajtów, tysiąc słyszysz?! nie słyszy, limit na łączu wyczerpany I dlatego właśnie tego typu danych binarnych nie trzyma się w bazie. -- Pozdrawiam Lemat
Re: dane binarne w bazie?
Author: jivanmukta
Date: Fri, 13 Feb 2015 12:00
Date: Fri, 13 Feb 2015 12:00
5 lines
1608 bytes
1608 bytes
> I jak konkretnie uzasadniają to rozwiązanie? Bo chyba mieli jakieś powody, by to polecać? Nie pamiętam, książkę czytałem w bibliotece, nie mam jej w domu. To jest ta książka: http://helion.pl/ksiazki/php-i-mysql-tworzenie-aplikacji-www-marc-wandschneider,phmsap.htm
Re: dane binarne w bazie?
Author: jivanmukta
Date: Fri, 13 Feb 2015 15:14
Date: Fri, 13 Feb 2015 15:14
4 lines
1630 bytes
1630 bytes
> > I jak konkretnie uzasadniają to rozwiązanie? Bo chyba mieli jakieś powody, > by to polecać? Może chodziło o przypadek, gdy obrazków jest niewiele, bo w książce omawiano problem kont użytkowników którzy mają swoje zdjęcia.
Re: dane binarne w bazie?
Author: Kviat
Date: Fri, 13 Feb 2015 17:56
Date: Fri, 13 Feb 2015 17:56
28 lines
2996 bytes
2996 bytes
W dniu 2015-02-12 o 18:14, jivanmukta@poczta.onet.pl pisze: > Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL) przechowuję m.in. dane o nieruchomościach, dla których użytkownik może załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem pewną książkę o PHP5+MySQL i tam polecają rozwiązanie z przechowywaniem danych binarnych w bazie. > Pytałem już o to, ale ponieważ nie jestem przekonany do mojego aktualnego rozwiązania (tzn. w systemie plików), zapytuję raz jeszcze - może wypowiedzą się inne osoby, z innymi argumentami. Szczerze mówiąc teraz bardziej mi się podoba przechowywanie danych w bazie, bo chyba na bazę jest więcej miejsca niż w systemie plików. Co prawda moja witryny na razie będzie działać dla woj. mazowieckiego, ale później potencjalnie na wiele krajów, również spoza Europy; zatem danych będzie sporo. > Rozwiązanie opisane w książce jest, w skrócie, następujące: No ludzie... zlitujcie się. Temat wałkowany _od_lat_. Google zamknęli czy co? Pierwsze z brzegu: http://www.depesz.com/2006/09/05/przechowywanie-obrazkow-w-bazie-tak-czy-nie-i-dlaczego/ i pierdyliard innych (specjalnie wkleiłem link do tak starego wpisu) Czas leci, a więc i niektóre argumenty tracą na znaczeniu (np. ceny dysków, pamięci), a legenda jakoby nie należy trzymać danych binarnych w bazie ciągle żywa. Silniki baz danych się zmieniają... Trzymać czy nie trzymać w bazie? Odpowiedź jak zwykle leży po środku: to zależy. Są bazy, które sobie z tym radzą lepiej, a inne gorzej. https://technet.microsoft.com/pl-pl/library/sql-server-2008---filestream-czyli-przechowywanie-duzych-obiektow-binarnych-blob-w-systemie-plikow.aspx A w kontekście MySQL użyj googla, poczytaj i sam oceń co ci jest potrzebne. To ty wiesz najlepiej jakie masz wymagania. A może używasz narzędzi nieadekwatnych do wymagań? Pozdrawiam Piotr
Re: dane binarne w bazie?
Author: Kviat
Date: Fri, 13 Feb 2015 19:40
Date: Fri, 13 Feb 2015 19:40
8 lines
1311 bytes
1311 bytes
W dniu 2015-02-12 o 19:48, Ministerstwo Propagandy pisze: > nie napisałeś mu "powrotu do zdrowia życzę", a to czemu? Bo w przeciwieństwie do ciebie jest zdrowy i nie syfi gównem politycznym jak leci po grupach dyskusyjnych. Powrotu do zdrowia życzę. Piotr
Re: dane binarne w bazie?
Author: Ministerstwo Propagandy
Date: Fri, 13 Feb 2015 19:57
Date: Fri, 13 Feb 2015 19:57
1 lines
1122 bytes
1122 bytes
niemożliwe... chce przechowywać binarne dane i jest normalny?
Re: dane binarne w bazie?
Author: jivanmukta
Date: Sat, 14 Feb 2015 07:49
Date: Sat, 14 Feb 2015 07:49
1 lines
1383 bytes
1383 bytes
nie jestem normalny - mam IQ takie jak 2% ludzi ;-)
Re: dane binarne w bazie?
Author: Ministerstwo Propagandy
Date: Sat, 14 Feb 2015 10:24
Date: Sat, 14 Feb 2015 10:24
3 lines
1204 bytes
1204 bytes
ja tez mam tyle co 2%... ale za to po to dopiero...
Re: dane binarne w bazie?
Author: PawelS cbrbob(at)wbcd(dot)pl
Date: Sat, 14 Feb 2015 13:53
Date: Sat, 14 Feb 2015 13:53
39 lines
2745 bytes
2745 bytes
Lemat pisze: > jivanmukta@poczta.onet.pl wrote: > >> Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL) >> przechowuję m.in. dane o nieruchomościach, dla których użytkownik może >> załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te >> obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem pewną >> książkę o PHP5+MySQL i tam polecają rozwiązanie z przechowywaniem danych >> binarnych w bazie. > > teatrzyk zielona gęś przedstawia przypadek trzymania w systemie plików: > > P - przeglądarka > A - apacz > PHP - PHP > M - MySQL [...] > M - niech no tylko je przekształcę do odpowiedniego formatu > PHP - tylko 8GB a i tak wyglada jak najbliższy kernel panic > PHP - co to ja miałem, jakieś tam parametry od-do były, czekaj, ale > programista ciul jeden nie raczył w ogóle tego oprogramować, ciul z tym > jedziemy pełnym plikiem. OK, tu usprawiedliwiam Twój tok rozumowania, ale mógłbym mimo wszystko trochę popolemizować. Skoro już zadał sobie trud by te obrazki do bazy wstawić, to przypuszczam, że może mieć świadomość istnienia funkcji w bazie danych typu SUBSTR()/SUBSTRING(), i mógłby to oprogramować zwłaszcza w przypadku przechowywania w bazie danych dużych plików. PS: oczywiście również nie jestem za takim rozwiązaniem, a co przechowywania plików w systemie plików oraz uprawnień było to już poruszane w wątku o temacie: "obrazek PNG w bazie MySQL". > PHP - nagłóweczki i sruuu, poleciało... > A - miało być tysiąc bajtów, tysiąc słyszysz?! nie słyszy, dawno się > skilował... > A - no to obrabiamy... i do przeglądarki sruuu, poleciało > P - miało być tysiąc bajtów, tysiąc słyszysz?! nie słyszy, limit na łączu > wyczerpany
Re: dane binarne w bazie?
Author: Lemat
Date: Sat, 14 Feb 2015 20:59
Date: Sat, 14 Feb 2015 20:59
90 lines
4866 bytes
4866 bytes
PawelS cbrbob(at)wbcd(dot)pl wrote: > Lemat pisze: >> jivanmukta@poczta.onet.pl wrote: >> >>> Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL) >>> przechowuję m.in. dane o nieruchomościach, dla których użytkownik może >>> załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te >>> obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem >>> pewną książkę o PHP5+MySQL i tam polecają rozwiązanie z >>> przechowywaniem danych binarnych w bazie. >> >> teatrzyk zielona gęś przedstawia przypadek trzymania w systemie plików: >> >> P - przeglądarka >> A - apacz >> PHP - PHP >> M - MySQL > [...] >> M - niech no tylko je przekształcę do odpowiedniego formatu >> PHP - tylko 8GB a i tak wyglada jak najbliższy kernel panic >> PHP - co to ja miałem, jakieś tam parametry od-do były, czekaj, ale >> programista ciul jeden nie raczył w ogóle tego oprogramować, ciul z tym >> jedziemy pełnym plikiem. > OK, tu usprawiedliwiam Twój tok rozumowania, > ale mógłbym mimo wszystko trochę popolemizować. > Skoro już zadał sobie trud by te obrazki do bazy wstawić, > to przypuszczam, że może mieć świadomość istnienia > funkcji w bazie danych typu SUBSTR()/SUBSTRING(), na danych binarnych?! to są funkcje do obsługi tekstów a nie danych binarnych. Po pierwsze walisz z muchy do armaty a po drugie istnieje wysokie prawdopodobieństwo zjebania tego (dane w bazie są wyeskejpowane, tysięczny znak nie będzie zawsze tysięcznym bajtem). > i mógłby to oprogramować zwłaszcza w przypadku > przechowywania w bazie danych dużych plików. > PS: oczywiście również nie jestem za takim rozwiązaniem, > a co przechowywania plików w systemie plików oraz uprawnień > było to już poruszane w wątku o temacie: "obrazek PNG w bazie MySQL". > Do czego się nadaje baza danych: 1) do przeszukiwania baza danych ma wbudowane mechanizmy indeksowania, dzięki którym łatwo i szybko jest coś w niej wyszukać. W danych binarnych nie da się niczego wyszukać. 2) Wielodostęp baza danych ma mechanizmy umożliwiające odczyt i zapis danych jednocześnie. Trudno mi sobie wyobrazić problem wymagający czegoś podobnego dla obrazków w bazie. 3) do obliczeń - baza danych jest genialnym narzędziem do statystyk, raportów i innych tego typu cudów. Relacyjność umożliwia składanie (join) tabel. Składanie obrazków robi się w photoshopie. 4) Mechanizmy replikacji, klastrowania i inne high-availability sztuczki... a trzymanie ogromnych danych binarnych skutecznie je zarzyna / stanowi całkowite zaprzeczenie tych idei. Równie dobrze da się to osiągnąć trzymając obrazki w plikach a ścieżki oraz dodatkowe informacje np tagi, wymiary - w bazie. Baza napakowana danymi binarnymi puchnie i hujowo się ją przenosi phpMyAdminem (memory_limit+post_max_size). Obciąża niepotrzebnie serwer operacjami - jak zaczynałem pracę na stanowisku programisty php to dostałem do poprawki serwis, który trzymał obrazki w bazie. Ten jeden serwis potrafił rozpieprzyć cały serwer. Zły dotyk boli całe życie. Taka baza danych hujowo się backupuje (standardowymi narzędziami) - za każdym razem trzeba zrzucić te kilka gigabajtów danych do pliku - niezależnie od tego czy się coś zmieniło czy nie. Obecnie mam na tapecie serwis www wykonany w technologii zope+plone. Twórcom tego czegoś wydawało się, że umieją zrobić wydajną bazę danych obiektów binarnych na jednym pliku. Ponieważ ten plik ma już 3GB to kilka operacji zapisu (nawet nie jednoczesnych a kolejnych) do niego potrafi skutecznie rozpieprzyć ten serwis. I oczywiście klient ma pretensje, że to pewnie wina serwera. Czy użyłem wystarczająco wiele razy "hujowo" aby podkreślić, że danych binarnych nie trzyma się w bazie? -- Pozdrawiam Lemat
Re: dane binarne w bazie?
Author: PawelS cbrbob(at)wbcd(dot)pl
Date: Sat, 21 Feb 2015 06:08
Date: Sat, 21 Feb 2015 06:08
93 lines
5504 bytes
5504 bytes
Lemat pisze: > PawelS cbrbob(at)wbcd(dot)pl wrote: > >> Lemat pisze: >>> jivanmukta@poczta.onet.pl wrote: >>> >>>> Piszę system o nieruchomościach w CodeIgniterze. W bazie (MySQL) >>>> przechowuję m.in. dane o nieruchomościach, dla których użytkownik może >>>> załączyć kilka zdjęć/filmów. Ktoś mi polecił, żebym przechowywał te >>>> obrazki w systemie plików a nie w bazie, jednak ostatnio czytałem >>>> pewną książkę o PHP5+MySQL i tam polecają rozwiązanie z >>>> przechowywaniem danych binarnych w bazie. >>> teatrzyk zielona gęś przedstawia przypadek trzymania w systemie plików: >>> >>> P - przeglądarka >>> A - apacz >>> PHP - PHP >>> M - MySQL >> [...] >>> M - niech no tylko je przekształcę do odpowiedniego formatu >>> PHP - tylko 8GB a i tak wyglada jak najbliższy kernel panic >>> PHP - co to ja miałem, jakieś tam parametry od-do były, czekaj, ale >>> programista ciul jeden nie raczył w ogóle tego oprogramować, ciul z tym >>> jedziemy pełnym plikiem. >> OK, tu usprawiedliwiam Twój tok rozumowania, >> ale mógłbym mimo wszystko trochę popolemizować. >> Skoro już zadał sobie trud by te obrazki do bazy wstawić, >> to przypuszczam, że może mieć świadomość istnienia >> funkcji w bazie danych typu SUBSTR()/SUBSTRING(), > > na danych binarnych?! to są funkcje do obsługi tekstów a nie danych > binarnych. Po pierwsze walisz z muchy do armaty a po drugie istnieje wysokie > prawdopodobieństwo zjebania tego (dane w bazie są wyeskejpowane, tysięczny Przepraszam za może głupie pytanie, ale czy sugerujesz, że po odczytaniu danych należy przeprowadzić jeszcze operację odwrotną do: "wyeskejpowane", jeśli nie to poniżej: > znak nie będzie zawsze tysięcznym bajtem). to chyba zależy od kodowania (popraw mnie jeśli się mylę) ? >> i mógłby to oprogramować zwłaszcza w przypadku >> przechowywania w bazie danych dużych plików. >> PS: oczywiście również nie jestem za takim rozwiązaniem, >> a co przechowywania plików w systemie plików oraz uprawnień >> było to już poruszane w wątku o temacie: "obrazek PNG w bazie MySQL". >> > > Do czego się nadaje baza danych: Napisałem, że "nie jestem za takim rozwiązaniem", ale niestety chyba ten fragment posta nie dotarł na grupę ... > 1) do przeszukiwania > baza danych ma wbudowane mechanizmy indeksowania, dzięki którym łatwo i > szybko jest coś w niej wyszukać. W danych binarnych nie da się niczego > wyszukać. > > 2) Wielodostęp > baza danych ma mechanizmy umożliwiające odczyt i zapis danych jednocześnie. > Trudno mi sobie wyobrazić problem wymagający czegoś podobnego dla obrazków w > bazie. > > 3) do obliczeń - baza danych jest genialnym narzędziem do statystyk, > raportów i innych tego typu cudów. Relacyjność umożliwia składanie (join) > tabel. Składanie obrazków robi się w photoshopie. > > 4) Mechanizmy replikacji, klastrowania i inne high-availability sztuczki... > a trzymanie ogromnych danych binarnych skutecznie je zarzyna / stanowi > całkowite zaprzeczenie tych idei. > > Równie dobrze da się to osiągnąć trzymając obrazki w plikach a ścieżki oraz > dodatkowe informacje np tagi, wymiary - w bazie. > > Baza napakowana danymi binarnymi puchnie i hujowo się ją przenosi > phpMyAdminem (memory_limit+post_max_size). > > Obciąża niepotrzebnie serwer operacjami - jak zaczynałem pracę na stanowisku > programisty php to dostałem do poprawki serwis, który trzymał obrazki w > bazie. Ten jeden serwis potrafił rozpieprzyć cały serwer. > Zły dotyk boli całe życie. > > Taka baza danych hujowo się backupuje (standardowymi narzędziami) - za > każdym razem trzeba zrzucić te kilka gigabajtów danych do pliku - > niezależnie od tego czy się coś zmieniło czy nie. > > Obecnie mam na tapecie serwis www wykonany w technologii zope+plone. Twórcom > tego czegoś wydawało się, że umieją zrobić wydajną bazę danych obiektów > binarnych na jednym pliku. Ponieważ ten plik ma już 3GB to kilka operacji > zapisu (nawet nie jednoczesnych a kolejnych) do niego potrafi skutecznie > rozpieprzyć ten serwis. I oczywiście klient ma pretensje, że to pewnie wina > serwera. > > Czy użyłem wystarczająco wiele razy "hujowo" aby podkreślić, że danych > binarnych nie trzyma się w bazie? Podziękował, cytuję raz jeszcze, co by pozostało dla potomnych.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads