🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #230910

Re: dane binarne w bazie?

#230910
From: 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
Technical Details
Message-ID: <54dfb73e$0$2177$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!goblin2!goblin3!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <36897656-eb47-48fd-8bc1-410b96a612ce@googlegroups.com> <54dda047$0$12961$65785112@news.neostrada.pl> <mbnk10$9bd$1@node1.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!goblin2!goblin3!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: Lemat <#@lemat.priv.pl>
Organization: lemat.priv.pl
Date: Sat, 14 Feb 2015 21:59:59 +0100
User-Agent: KNode/4.14.1
Subject: Re: dane binarne w bazie?
Newsgroups: pl.comp.lang.php
References: <36897656-eb47-48fd-8bc1-410b96a612ce@googlegroups.com> <54dda047$0$12961$65785112@news.neostrada.pl> <mbnk10$9bd$1@node1.news.atman.pl>
MIME-Version: 1.0
Lines: 90
Message-ID: <54dfb73e$0$2177$65785112@news.neostrada.pl>
NNTP-Posting-Host: 79.189.200.118
X-Trace: 1423947582 unt-rea-b-01.news.neostrada.pl 2177 79.189.200.118:51915
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit