🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#232395
From: Wojciech Bancer
Date: Wed, 24 Apr 2019 07:20
73 lines
5038 bytes
On 2019-04-24, Roman Tyczka <noemail@because.no> wrote:

[...]

>> Myślę że Twoja praca kosztowała więcej niż koszt działania serwera
>> przez te kilka godzin. No i jak sobie z firmy pójdziesz, to ktoś
>> będzie musiał rozgryzać "dlaczego magicznie coś się dzieje" na bazie,
>> skoro w kodzie aplikacji nic nie ma.
>
> Dziwne to wnioskowanie. Dlaczego treść triggerów i sp nie traktujesz jako
> kod źródłowy systemu? Tak samo struktura bazy to kod źródłowy aplikacji.
> Niektóre systemy są pisane w kilku językach programowania, każdy ten
> fragment jest częścią systemu.

Jak zapiszesz trigger do git?
Jak zapewnisz bezkonfliktową pracę *zespołu* (nie jednej osobie) na takim
zestawie, rozwiążesz konflikty? Triggery to relikt zamierzchłych czasów 
"one-man-army" programistów.

> Druga sprawa z tym unikaniem triggerów w celu oszczędzania wydajności to
> imho właśnie zabijanie wydajności i spójności. Trigger przy danych wykona
> się dzięsiątki razy szybciej niż kod gdzieś w oddali,

Idąc takim tokiem to należy pisać tylko w assemblerze, wszystko
inne jest dziesiątki razy wolniejsze.

> zwłaszcza interpretowany. Ja rozumiem, że np. jak sobie rozrzucisz ten kod po 10
> serwerach aplikacyjnych to one go wykonają w sumie szybciej, ale wtedy
> tracisz fundamentalną cechę bazy czyli ACID, bo wszystko to wykona się w
> osobnych transakcjach bez gwarancji niepodzielności i spójności.

Nic się nie traci.

> A jeszcze co do transakcji to kluczowe jest by transakcje aktualizujące dane 
> były jak najkrótsze, wykorzystanie triggera skraca ten czas, użycie kodu 
> na zewnątrz wydłuża, co ciągnie za sobą problemy z blokowaniem zasobów bazy 
> i dalsze spadki wydajności.

To jest koncept postrzegania wydajności "w górę". Takie podejście ma tą wadę,
że jest *skończone*, tzn. w końcu napotyka się na gardło pod tytułem "hardware
więcej nie da". Wystarczy liniowy skok i brak zasobów gotowy.

> Coś za coś, nie jest tak, że jedno jest lepsze niż drugie i droga bez
> triggerów jest słuszna.

Pewne rozwiązania z czasem stają się tzw. anti-patternami.
Przykłady to goto, wzorce singletona. Wkładanie logiki biznesowej
do triggerów też jest pewnego rodzaju anty-wzorcem. Jakby czysta
wydajność była tak kluczowa, to pisalibyśmy wszystko w asemblerze
albo gołym C. Procedury, triggery itp. są koszmarkiem do zarzącania
w porównaniu do alternatyw, a oferują dużo biedniejsze możliwości.
Profit w postaci szybkości nie jest tu wystarczającym argumentem.

> Być może jest tak jak Marek sugeruje, że na rynku
> brakuje fachowców od baz danych i się to załatwia ORMami, nie rozumiejąc co
> się w zamian traci.

W dobie rozwiązan cloudowych patrzy się raczej jak coś skalować "w bok" a nie 
tylko przez podniesienie mocy maszyny i mikrooptymalizacje. I tak, przez to
kod pojedynczej aplikacji wykonuje się może te 10x wolniej, ale jesteś w stanie
tego wykonać o rzędy wielkości więcej niż przy skalowaniu w górę. I jesteś 
w stanie reagować na zmiany przez skalowanie ifnrastruktury w miarę wzrostu
obciążenia.

Utrzymywanie kodu na jednym serwerze jest zaprzeczeniem tej idei, a (co już podnosiłem)
bazy danych to sa zazwyczaj najmniej skalowalne elementy infrastuktury. I myślenie
architektów idzie w kierunku zapewnienia możliwej równoległości przeliczeń (co
też sprawdza się w ML), a nie w kierunku optymalizacji bajtowych,
czy oferowanych przez języki programowania.

-- 
Wojciech Bańcer
wojciech.bancer@gmail.com
Technical Details
Message-ID: <slrnqc03hl.2175.wojciech.bancer@pl-test.org>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!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> <q9lb2m$rq3$1@node2.news.atman.pl> <slrnqbtc0m.106s.wojciech.bancer@pl-test.org> <q9nf0j$pso$1@node2.news.atman.pl> <slrnqbuic6.11h6.wojciech.bancer@pl-test.org> <q9nqvt$cgp$1@node1.news.atman.pl> <slrnqbutgg.2ui0.wojciech.bancer@pl-test.org> <19e3n4frifzjg$.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!3.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!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> <q9lb2m$rq3$1@node2.news.atman.pl> <slrnqbtc0m.106s.wojciech.bancer@pl-test.org> <q9nf0j$pso$1@node2.news.atman.pl> <slrnqbuic6.11h6.wojciech.bancer@pl-test.org> <q9nqvt$cgp$1@node1.news.atman.pl> <slrnqbutgg.2ui0.wojciech.bancer@pl-test.org> <19e3n4frifzjg$.dlg@tyczka.com>
Organization: None
Date: Wed, 24 Apr 2019 09:20:20 +0200
User-Agent: slrn/1.0.3 (Darwin)
Mime-Version: 1.0
Message-ID: <slrnqc03hl.2175.wojciech.bancer@pl-test.org>
Lines: 73
NNTP-Posting-Host: 46.227.242.29
X-Trace: 1556090421 unt-rea-a-01.news.neostrada.pl 501 46.227.242.29:53314
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 4725
X-Received-Body-CRC: 1234255640
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit