🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#232417
From: Wojciech Bancer
Date: Sun, 28 Apr 2019 12:18
96 lines
6314 bytes
On 2019-04-28, Roman Tyczka <noemail@because.no> wrote:

[...]

> Czy tego chcemy czy nie to systemy stają się coraz bardziej skomplikowane,
> stawia się im coraz więcej wymagań, przetwarzają coraz więcej informacji a
> hardware tanieje. Oczywiście nie można olewać algorytmiki, matematyki i
> zdrowego rozsądku, bo braku podstaw i głupoty nawet setką serwerowni się
> nie naprawi, ale zgodnie z regułą pareto wystarczy 20% nakłady by uzyskać
> 80% efektu, a te 20% to gotowe klocki w postaci chmur, bibliotek,
> frameworków - uniwersalnych, więc nie zawsze zbyt wydajnych, ale tanich,
> skalowalnych i wystarczających do realizacji zadań. 

Tu trochę się wetnę, bo mam wrażenie że moje słowa są źle interpretowane.

Nie pisałem "nie optymalizować", tylko wyważyć i przesunąć ciężar 
optymalizacji, nie robić "nadmiernej optymalizacji" ani "przedwczesnej",
ani w złym miejscu.

W dzisiejszych czasach zarówno kompilatory jak i frameworki potrafią
zrobić samodzielnie własną optymalizację i to w 99% dużo lepiej niż
przeciętny programista (ilu z nas ogarnie specyficzne własności nowoczesnych
procesorów i zastosuje odpowiednie optymalizacje pod nie?). Tylko trzeba 
poprawnie tych kompilatorów /frameworków używać.

Kompilator C++ wygeneruje optymalniejszy kod niż człowiek ręcznie 
dziubiący assemblera.

PHP4 był "sam z siebie" o wiele mniej wydajniejszy niż PHP5.0
A potem był php 5.3, 7+ - każdy z nich często niesie większe 
zmiany wydajności aplikacji w dużo większym stopniu niż 
najbardziej wymyślne poprawki uruchamianego kodu.

Doctrine nie puści setek zapytań za każdym razem kiedy je 
puścimy, tylko przeprowadza wewnętrzną analizę i optymalizacje. 
Jak już zapytałeś o jakiś obiekt przez find, to drugi raz
zapytanie do bazy nie pójdzie. Update do obiektów które się
nie zmieniły, nie zostaną wysłane "do bazy".

Ilu programistów stać na takie optymalizacje jak wyżej przy
każdym możliwym fragmencie gdy używają SQL? I o ile mniej
wydajna jest wtedy ich praca?

Warto poczytać: 
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/unitofwork.html

I z każdą wersją kolejnych bibliotek dzieje się coraz więcej "pod maską". 
Tak, w szczególnych przypadkach można mieć potrzebę na robienie tego inaczej, 
w drobnym fragmencie bardziej wyszukanie, ale jest to już od dawna na zasadzie 
"wyjątku" a nie "reguły".

Więc z dużym prawdopodobieństwiem, o ile Twój *algorytm* nie jest
wadliwy i nie ma wyjechanej w kosmos złożoności, to nie musisz się
skupiać na bajtowych mikro-optymalizacjach, dopóki z systemu nie
przyjdzie sygnał "że gdzieś jest za ciasno".

Odnośnie moich argumentów o infrastrukturze:
Infrastruktura jest obecnie skalowalna i dużo tańsza niż jescze
10 lat temu i o wiele szybciej dostępna. Używałem tego w przykładzie
skokowych obciążeń (o których wiemy, albo umiemy je przewidzieć) a nie 
jako remedium na nieprzemyślane algorytmy.

Ale niestety trzeba wyważyć koszt pomiędzy coraz wyższymi stawkami 
programistów, coraz bardziej wysokopoziomowym kodem, a coraz niższymi 
stawkami za skalowalną infrastrukturę.

[...]

> ps. nie uważam, że serwery SQL są miepotrzebne i trzeba je do /dev/null'a
> wsadzić, jest i będzie dla nich zawsze zastosowanie, bo imho nie jest tak,
> że cały świat to docelowo będzie jedno wielkie big data. Tzn. będzie, ale
> na zasadzie łączenia w jeden wielk zbiór wszystkich malukich źródeł danych,
> a te małe źródła to będą także serwery SQL.

Nigdy nie pisałem że nie będzie. :)

Dyskusja poszła w stronę pokazywania w jaką zmierzają coraz bardziej
wydajne systemy, żeby wyraźnie pokazać trudności skalowania serwerów
SQL, ale przecież zaczęła się od tematu "gdzie lepiej optymalizować
w aplikacji (tu: opartej o doctrine) czy na bazie (tu: triggery)" 
i dlaczego Doctrine ma swoje mechanizmy jako alternatywę dla 
wspomnianych triggerów.

SQL z nami jeszcze długo będzie. COBOL też jest tu i ówdzie.
A sam mam dostęp do 30-letnich systemów w perlu i aplikacji
PHP której development zaczął się w 2002 roku i jest używana
do dzisiaj.

PS. A desktopowcy powinni patrzeć w stronę PWA, osobiście uważam,
że desktop będzie powoli ewoluował w podobne hybrydy (tam gdzie
będzie potrzebny dostęp do natywnego hardware i będą ograniczenia
przeglądarkowe).

-- 
Wojciech Bańcer
wojciech.bancer@gmail.com
Technical Details
Message-ID: <slrnqcb6hn.1fju.wojciech.bancer@pl-test.org>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-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> <slrnqc689s.2i2i.wojciech.bancer@pl-test.org> <5cc34968$0$523$65785112@news.neostrada.pl> <slrnqc6qbq.2tg1.wojciech.bancer@pl-test.org> <5cc4127b$0$493$65785112@news.neostrada.pl> <slrnqc8gus.1i19.wojciech.bancer@pl-test.org> <5cc45b8e$0$521$65785112@news.neostrada.pl> <slrnqc8qn8.1fib.wojciech.bancer@pl-test.org> <1k7ivof1kqsjf$.dlg@tyczka.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-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> <slrnqc689s.2i2i.wojciech.bancer@pl-test.org> <5cc34968$0$523$65785112@news.neostrada.pl> <slrnqc6qbq.2tg1.wojciech.bancer@pl-test.org> <5cc4127b$0$493$65785112@news.neostrada.pl> <slrnqc8gus.1i19.wojciech.bancer@pl-test.org> <5cc45b8e$0$521$65785112@news.neostrada.pl> <slrnqc8qn8.1fib.wojciech.bancer@pl-test.org> <1k7ivof1kqsjf$.dlg@tyczka.com>
Organization: None
Date: Sun, 28 Apr 2019 14:18:59 +0200
User-Agent: slrn/1.0.3 (Darwin)
Mime-Version: 1.0
Message-ID: <slrnqcb6hn.1fju.wojciech.bancer@pl-test.org>
Lines: 96
NNTP-Posting-Host: 46.227.242.29
X-Trace: 1556453943 unt-rea-a-02.news.neostrada.pl 541 46.227.242.29:60478
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit