🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Symfony 4 - jak projektować bazę danych pod Doctrine?

#232407
From: Wojciech Bancer
Date: Fri, 26 Apr 2019 15:18
170 lines
9695 bytes
On 2019-04-26, Kviat <Kviat> wrote:

[...]

>> Ale ja podałem argumenty dlaczego są złe, a nie "bo są złe".
>> Natomiast można założyć, że w świecie o którym mówisz, ze względu
>> na niewielkie rozproszenie i małą skalę są to wady nieistotne.
>
> Ok. Moim zdaniem w pewnych przypadkach w Twoim świecie są to wady.
> A nie, że wady ogólnie.

Ja napisałem, że w dzisiejszym świecie "w którym zapotrzebowanie
na dane", przetwarzane coraz szybciej oraz ich ilość rośnie w zastraszającym 
tempie z roku na rok, to już jest wada.

A Ty jako kontr-przykład podajesz mi architekturę rodem z lat 90-tych,
intranetu i mówisz "u mnie działa". Jasne. Działa. Co nie znaczy
że owa architektura nie ma wad o których pisałem. Po prostu te 
wady są akceptowalne w konkternych rozwiązaniach (jeszcze).

>>> Na drodze: przeglądarka->baza danych, to właśnie php pełni
>>> niejako naturalną rolę api dla aplikacji "przeglądarkowej".
>>> Nie ma innego sposobu.
>> 
>> Nie możesz tego zrobić jedynie dlatego że przeglądarki wprowadzają ograniczenia
>> w komunikacji, a nie dlatego że to niemożliwe w języku 
>
> Tak. To miałem na myśli.

I dlaczego tak jest, jak myślisz?

>> (patrz https://github.com/sindresorhus/awesome-nodejs#database ).
>> Jakby consensus środowiska był taki, że bezpośrednia praca z DB "to jest to",
>> to przeglądarki nie miałyby takich ograniczeń.
>
> Ale mają i nie chciałem drążyć tego tematu, dlatego posłużyłem się 
> skrótem myślowym.

A zastanowiłeś się dlaczego nie mają? Dlaczego model "otwarci 
do świata" się nie sprawdził?

>>> Przykład podałem w poprzednim poście. Najprostszy z możliwych z
>>> aktualizacją pola stanu magazynowego po dodaniu/zmianie/skasowaniu
>>> rekordu z towarem.
>> I jak myślisz, jak Ci to zadziała na sklepie wielkości Amazona?
> A ile jest sklepów wielkości Amazona?

Dobrze. Czy myślisz, że wystarczy w sklepie pokroju żabki, jak ten będzie
zautomatyzowany i będzie *musiał* wiedzieć że klient wychodzący przez
kasę automatyczną nosi to i to, zabrane z półki tamtej i siamtej,
dokonać rozliczenia tego klienta i ewentualnie dokonać korekty jak
klient postanowi się rozmyślić?

Pierwsze sklepy już gdzieś tam się pojawiają. Co będzie za 5-10 lat?
A może chciałbyś mieć dane o pozycji klienta z telefonem w czasie
rzeczywistym poprzez urządzenia IoT, by serwować mu dopasowany content
w sklepie? Albo sterować urządzeniami domowymi/firmowymi w reakcji
na zdarzenia rzeczywiste?

Do tego wszystkiego model "centralny serwer + triggery" klęknie.
Po prostu. 

>> Dlaczego google używa baz nierelacyjnych do swoich wyszukiwarek (bigtable)
>> https://cloud.google.com/bigtable/
>
> Bo takich potrzebuje.

Ale dlaczego potrzebuje? Czyż nie jest wydajniej mieć monolityczny
serwer z triggerami i wszystko "w jednej maszynie"? Takie można odnieść
wrażenie po tym jak zachwalałeś triggery oraz ich optymalność.

>> We wszystkich przypadkach odpowiedź jest taka sama: tradycyjne serwery sql
>> "nie wyrabiają" i nie potrafią sprostać potrzebom.
>
> Nie we wszystkich przypadkach.
> W większości przypadków tradycyjne serwery sql bez problemu wyrabiają.

Jeszcze. Ale odpowiedzialne projektowanie *aplikacji webowej* musi
przewidywać pewien rozwój sytuacji. Inaczej będziesz jak nasza klasa 
i pan gąbka z błędem typu error 500.

Architektura oparta o monolityczne serwery i triggery jest zwyczajnie zamknięta 
do małej skali. _Zmiana_ wymaga przepisania logiki. Architektura oparta o 
ORM (i zdarzenia), może i jest jednostkowo wolniejsza, ale w razie potrzeby 
w łatwy sposób zostać rozbudowana "w bok", by spełnić nagłe wymagania 
obciążeniowe. I równie szybko może być ściągnięta w dół (bo się zapotrzebowanie
skończyło).

Weź takie obciążenie np. na black friday. Ja dostawię 3-4, 10, 15 maszyn
i się wyrobię. Jak przestanąć być potrzebne, to zejdą w dół. A storage mam
stosunkowo tani i niezwykle szybki (bo nie pilnuje wszystkiego czego nie musi
sam robić).

A jaką Ty masz wizję? Dostawimy 10 serwerów, zrobimy migrację, a jak przestanie
być potrzebne, to migrujemy ponownie? Wszystko ręcznie, z olbrzymim wysiłkiem
czasowym Bez żadnej automatyki?

O ile *koszt* projektowania aplikacji w jeden i drugi sposób jest podobny,
to poprzez ograniczanie logiki siedzącej na bazie masz potem dużo istotnych 
korzyści - mniejszy jest koszt przepisania aplikacji z ORM do ODM niż koszt 
przeniesienia logiki z bazy do aplikacji.

Mniejszy jest też koszt optymalizacji konkretnych bottlenecków "na aplikacji"
niż na bazie (bo masz mnóstwo alternatyw od zapewnienia cache w pamięci,
rozładowania ruchu poprzez load balancery, kontroli że np. pojedynczy
użytkownik nie może wykonać > 10 żądań na sekundę (throttling pattern),
tworzenia kolejek i priorytetów (a nie wyłącznie obsługi fifo).

a to wszystko możesz stosować na różnych poziomach infrastruktury,
połączonej w logiczną strukturę z aplikacją (podejście IaaC) i zebrane
w jednym logicznym miejscu.

>> Tam gdzie naprawdę musisz mieć skalowalne rozwiązanie, to właśnie
>> tak jest. I nie jedna "maszyna z API". Wrzucę kod na:
> Zgada. Tam gdzie naprawdę musisz.

Właśnie odwrotnie. Tam *gdzie nie musisz* żyłować wydajności pojedynczej
maszyny, nie stosujesz niepotrzebnej optymalizacji (takiej która potem blokuje
ewentualne drogi do przodu), ale projektujesz system tak by był na potencjalne 
potrzeby otwarty.

*Nie oznacza to*, że musisz od razu zakładać że będziesz miał ruch 100k userów
godzinę. Ale w miarę możliwości powinieneś projektować system tak, żeby
niewielkim kosztem zmian móc to zrobić.

>> Tego wszystkiego nie zrealizujesz w tracydyjnym modelu SQL,
>> nie dlatego że pojedyncze bajtowe operacje są mniej/bardziej
>> wydajne, tylko dlatego że jest to narzędzie o niewielkiej
>> skalowalności.
>>
> Ale przecież to nie jest tak, że teraz wszyscy nagle powinni porzucić 
> triggery/sp, bo stały się złe, bo Amazon i google z nich nie korzysta.

Ale (poza desktopami), to wszyscy chyba się przerzucili z triggerów/sp,
na inplementacje w aplikacjach. Nie tylko Amazon i Google.

> Borys Pogoreło już o tym wspomniał. Wdrażanie na siłę takich rozwiązań, 
> tam gdzie nie są konieczne, to jest rozwiązywanie problemów, których 
> większość nie ma i nigdy mieć nie będzie.

Oczywiście że ma i będzie (bo apetyt na dane rośnie). Zobacz sobei IoT,
ML, segmenty Big Data.

A tak swoją drogą, to zauważ, że te wszystkie klasyczne aplikacje księgowe
o których mówisz "ostały się" głównie w większych przedsiębiorstwach,
bo tam koszty zmian są znaczące, a ludzie do tych systemów są już
przyzwyczajeni i przeszkoleni.

Ale w takim sektorze mikro-przedsiębiorstw, jedno-osobowych DG,
zamiast instalowanej wypaśnie aplikacji z serwerem bazy masz coraz
bardziej popularne serwisy typu infakt, wfirma, itp.

I już teraz te serwisy mają więcej możliwości niż desktopowe aplikacje
będą miały kiedykolwiek (dla tej grupy). Masz więc i odczytywanie/procesowanie 
faktur z PDF (rozpoznawanie obrazów), masz automatyczne wysyłanie przypomnień 
na maila, integracje z allegro/ceneo/magazynami *różnych* sklepów po API, 
systemami płatności, bankami, wysyłaniem maili do klientów, zarządzaniem 
windykacją, automatycznym przeliczaniem kursów walut, CRM, aplikacje/wersje 
mobilne, automatyzacją wystawiania i wysyłka faktur seryjnych (Rachmistrz 
to już potrafi?) i bardzo szybkie wprowadzanie nowinek dostępnych 
*u wszystkich na raz* (np. weryfikacja numerów VAT kontrahentów). 
A i masz możliwość integracji z własnymi systemami, np. by sklep XYZ
wystawiał sam fakturę, nawet jeśli ten XYZ jest Twoim własnym i autorskim
rozwiązaniem (bo jest dostępne proste API i nie trzeba się zagłębiać
w rozwiązywanie zależności na > 100 tabelach w bazie). I to wszystko 
dużo szybciej i taniej niż desktopowe wersje oferowały kiedykolwiek.

-- 
Wojciech Bańcer
wojciech.bancer@gmail.com
Technical Details
Message-ID: <slrnqc689s.2i2i.wojciech.bancer@pl-test.org>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <q9foak$p72$1@node2.news.atman.pl> <slrnqboo9s.e87.wojciech.bancer@pl-test.org> <5cbf10a8$0$482$65785112@news.neostrada.pl> <slrnqbuasg.28r5.wojciech.bancer@pl-test.org> <5cc00030$0$476$65785112@news.neostrada.pl> <slrnqc0o86.drp.wojciech.bancer@pl-test.org> <5cc08eba$0$523$65785112@news.neostrada.pl> <slrnqc1a43.2amm.wojciech.bancer@pl-test.org> <5cc0de68$0$539$65785112@news.neostrada.pl> <slrnqc42f0.2lii.wojciech.bancer@pl-test.org> <5cc24956$0$526$65785112@news.neostrada.pl> <slrnqc5fkk.27vm.wojciech.bancer@pl-test.org> <5cc2e453$0$522$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Newsgroups: pl.comp.lang.php
From: Wojciech Bancer <wojciech.bancer@gmail.com>
Subject: Re: Symfony 4 - jak projektować bazę danych
 pod Doctrine?
References: <q9foak$p72$1@node2.news.atman.pl> <slrnqboo9s.e87.wojciech.bancer@pl-test.org> <5cbf10a8$0$482$65785112@news.neostrada.pl> <slrnqbuasg.28r5.wojciech.bancer@pl-test.org> <5cc00030$0$476$65785112@news.neostrada.pl> <slrnqc0o86.drp.wojciech.bancer@pl-test.org> <5cc08eba$0$523$65785112@news.neostrada.pl> <slrnqc1a43.2amm.wojciech.bancer@pl-test.org> <5cc0de68$0$539$65785112@news.neostrada.pl> <slrnqc42f0.2lii.wojciech.bancer@pl-test.org> <5cc24956$0$526$65785112@news.neostrada.pl> <slrnqc5fkk.27vm.wojciech.bancer@pl-test.org> <5cc2e453$0$522$65785112@news.neostrada.pl>
Organization: None
Date: Fri, 26 Apr 2019 17:18:19 +0200
User-Agent: slrn/1.0.3 (Darwin)
Mime-Version: 1.0
Message-ID: <slrnqc689s.2i2i.wojciech.bancer@pl-test.org>
Lines: 170
NNTP-Posting-Host: 46.227.242.29
X-Trace: 1556291900 unt-rea-a-02.news.neostrada.pl 531 46.227.242.29:65259
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit