Article View: pl.comp.lang.php
Article #232395Re: Symfony 4 - jak projektować bazę danych pod Doctrine?
From: Wojciech Bancer
Date: Wed, 24 Apr 2019 07:20
Date: Wed, 24 Apr 2019 07:20
73 lines
5038 bytes
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-mailReferences:
<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