Article View: pl.comp.lang.php
Article #232436Re: Symfony 4 - jak projektować bazę danych pod Doctrine?
From: Wojciech Bancer
Date: Fri, 26 Apr 2019 07:32
Date: Fri, 26 Apr 2019 07:32
94 lines
5233 bytes
5233 bytes
On 2019-04-25, Marek S <precz@spamowi.com> wrote:
>> Nie, nie, nie, nie. Nie zrozumiałeś. To co napisałem to:
>> Zamiast przyspieszyć _moze_ 2x procesy w bazie np. przez dołożenie trigerów,
>> wolę mieć opcję stabilnej obsługi zarówno 10, 100 jak i 1000+ userów "na raz")
>> bez straty wydajności, w zależności od potrzeb, przez auto-skalowalne rozwiązania.
>
> Ok, czuję intencję.
> BTW
> Jak tworzysz podkreślenia? Próbowałem _ przed i za, próbowałem __ i
> kiszka. Być może więcej wyrazowych wyrażeniach próbowałem. Nie pamiętam już.
Przez dodanie _ na początku i na końcu wyrazu (bez spacji).
>>> Ja preferuję inne podejście:
>>> zoptymalizować bazę, a gdy już więcej się nie da - wtedy zająć się
>>> infrastrukturą sprzętową. Tego nie zmienię w sobie.
>>
>> No i właśnie. Projektujesz system który "ma ścianę" i to dość blisko.
>
> Czy jest coś w tym nagannego, że z wyciskam z serwera max. ilość
> operacji/s?
Wygląda jak klasyczna niepotrzebna optymalizacja.
Zamieniasz też " na ', żeby zyskać 2 sekundy czasu serwera w rok?
> Może inaczej: proponujesz pousuwać wszelkie optymalizacje z
> bazy, jak np. indeksy, po to by być daleko od ściany i mieć świadomość,
> że można dużo poprawić w tejże bazie?
Wszysktie? Nie. Nadmiarowe, stworzone "na wszelki wypadek"? Tak.
To co robisz nosi wszelkie znamiona premature optimization i unnecessary
optimization. Niby jest wydajnej, ale różnicy nikt tak realnie nie zobaczy,
a Ty tracisz na tym czas.
>> Problem w tym, że na razie "beztroski" to wydajesz się Ty, w angażowaniu
>> ORMa bez zrozumienia idei za nim stojących.
>
> Nie beztroski lecz uczący się. Jednakże już w tym wątku dostałem
> wytyczne jak "naprawić" ideę ORM w zakresie usuwania/aktualizacji
> rekordów poprzez banalnie proste zabiegi na udostępnionych przez ORM
> mechanizmach. Mam na myśli łatanie niedostatków poprzez stosowanie
> querybuildera etc.
Query builder *nie* jest żadnym łataniem, ani też żadnym SQLem.
Jest narzędziem do budowania zapytań.
Jak chciałbyś odpytywać bazę inaczej?
Nie wszystko na bazie sprowadza się do robienia pojedynczych zapytań
i działania na pojedynczych obiektach.
>>> To ja wiem. To jest korzystanie z SQLa, do którego z awersją podchodzisz
>>> r=traktując go jako raka w ORMie.
>>
>> Gdzie Ty tam widzisz SQL? o.O
>> To jest wg Ciebie SQL?
>> ---
>> $qb = $em->createQueryBuilder();
>> $qb->delete('Services', 's');
>> $qb->where('s.project = :project');
>> $qb->setParameter('project', $project);
>> ---
>
> Kompletnie nie znam querybuildera a widzę (być może fałszywie) to, co
> poniżej. Zgaduję, że Services odnosi się do nazwy entity a ta do tabeli
> o tej samej nazwie. Więc:
>
> "DELETE FROM services s WHERE s.project=$project"
No nie. Query builder zbuduje zapytanie DQL:
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/dql-doctrine-query-language.html
Uwalnie Ciebie od znajomości struktury (nazw kolumn kluczy, nazw tabeli),
bo sam to ogarnia na podstawie otworzonej przez Ciebie relacji z obiektami
Entities.
A potem ten DQL zostanie przetworzony na coś w stylu:
DELETE FROM services s WHERE s.project_id = " . $project->getId(); // jeśli $project to obiekt
DELETE FROM services s WHERE s.project_id = " . $project; // jeśli $project to prymityw (liczba lub string)
ale już bez Twojego udziału.
Ale tak g gdzieś ostatecznie pod spodem jest wynik w postaci SQL.
Przecież musi być, bazy danych inaczej nie gadają.
Zauważ, że:
- nie znasz tej nazwy tabeli (doctrine sam ją "ogarnia"
na podstawie tego jak zdefiniowałeś entity)
- do $project wstawiasz obiekt entity lub id, a doctrine
sam sobie poradzi z tym by to miało dla niego sens
sam też zna nazwę kolumny, na podstawie relacji jaka
była utworzona w entity
--
Wojciech Bańcer
wojciech.bancer@gmail.com
Technical Details
Message-ID:
<slrnqc5d19.27vm.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-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> <5cbf10a8$0$482$65785112@news.neostrada.pl> <q9ngu2$rla$1@node2.news.atman.pl> <szccfmi95el5$.xlp4ie6tp398.dlg@40tude.net> <q9nrgf$d0c$1@node1.news.atman.pl> <slrnqbuueh.2ui0.wojciech.bancer@pl-test.org> <q9q6ee$a2s$1@node2.news.atman.pl> <slrnqc194m.2amm.wojciech.bancer@pl-test.org> <q9t7vj$4ol$1@node2.news.atman.pl>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-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> <q9ngu2$rla$1@node2.news.atman.pl> <szccfmi95el5$.xlp4ie6tp398.dlg@40tude.net> <q9nrgf$d0c$1@node1.news.atman.pl> <slrnqbuueh.2ui0.wojciech.bancer@pl-test.org> <q9q6ee$a2s$1@node2.news.atman.pl> <slrnqc194m.2amm.wojciech.bancer@pl-test.org> <q9t7vj$4ol$1@node2.news.atman.pl> Organization: None Date: Fri, 26 Apr 2019 09:32:56 +0200 User-Agent: slrn/1.0.3 (Darwin) Mime-Version: 1.0 Message-ID: <slrnqc5d19.27vm.wojciech.bancer@pl-test.org> Lines: 94 NNTP-Posting-Host: 46.227.242.29 X-Trace: 1556263977 unt-rea-a-01.news.neostrada.pl 490 46.227.242.29:50810 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit