🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
14 messages
14 total messages Started by jivanmukta Thu, 12 Feb 2015 17:14
dane binarne w bazie?
#230904
Author: jivanmukta
Date: Thu, 12 Feb 2015 17:14
28 lines
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?
#230905
Author: Borys Pogoreło
Date: Thu, 12 Feb 2015 18:29
26 lines
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?
#230913
Author: Ministerstwo Propagandy
Date: Thu, 12 Feb 2015 18:48
1 lines
1028 bytes
nie napisałeś mu "powrotu do zdrowia życzę", a to czemu?
Re: dane binarne w bazie?
#230908
Author: Lemat
Date: Fri, 13 Feb 2015 06:57
57 lines
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?
#230906
Author: jivanmukta
Date: Fri, 13 Feb 2015 12:00
5 lines
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?
#230907
Author: jivanmukta
Date: Fri, 13 Feb 2015 15:14
4 lines
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?
#230912
Author: Kviat
Date: Fri, 13 Feb 2015 17:56
28 lines
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?
#230914
Author: Kviat
Date: Fri, 13 Feb 2015 19:40
8 lines
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?
#230915
Author: Ministerstwo Propagandy
Date: Fri, 13 Feb 2015 19:57
1 lines
1122 bytes
niemożliwe... chce przechowywać binarne dane i jest normalny?
Re: dane binarne w bazie?
#230916
Author: jivanmukta
Date: Sat, 14 Feb 2015 07:49
1 lines
1383 bytes
nie jestem normalny - mam IQ takie jak 2% ludzi ;-)
Re: dane binarne w bazie?
#230917
Author: Ministerstwo Propagandy
Date: Sat, 14 Feb 2015 10:24
3 lines
1204 bytes
ja tez mam tyle co 2%...

ale za to po to dopiero...
Re: dane binarne w bazie?
#230909
Author: PawelS cbrbob(at)wbcd(dot)pl
Date: Sat, 14 Feb 2015 13:53
39 lines
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?
#230910
Author: Lemat
Date: Sat, 14 Feb 2015 20:59
90 lines
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?
#230911
Author: PawelS cbrbob(at)wbcd(dot)pl
Date: Sat, 21 Feb 2015 06:08
93 lines
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