• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wiele zapytań vs jedno duże zapytanie

Object Storage Arubacloud
0 głosów
497 wizyt
pytanie zadane 28 września 2019 w SQL, bazy danych przez niezalogowany
hej pytanie dotyczace wydajności oraz szybkości.

 

Jaka jest lepza praktyka dotyczace łączenia kodu php z sql?

Lepiej sotosować rozbudowane zapytania czy wiele zapytań mniejszych, które zwracają dane, po połączeniu, których otrzymam identyczny wyniki co z dużego zapytania?

Mam tu na myśli 11 joinów w dużym zapytaniu.

2 odpowiedzi

+1 głos
odpowiedź 28 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
Nie ma uniwersalnej odpowiedzi na takie pytanie. Generalnie wiele zapytań do bazy to wiele połaczeń, wiele wątków na bazie... pytanie jaki jest czas wykonywania tego jednego dużego zapytania. Bo może się okazać, że np. to jedno leci w 300ms, a przy pojedynczych czas wykonania wszystkich sięgnie rzędu 500-600ms. To, że zapytanie jest krótkie to jedno, ale patrz na całość.

Trzeba też zastanowić się nad ewentualnym skalowaniem bazy, co będzie wtedy lepsze - więcej polączeń czy mniej, ale dłuższe zapytania.

No i w ogóle pytanie o jak dużych bazach i jakim ruchu mówimy, czy rozmawiamy tu o mikro bazie gdzie jest kilkadziesiąt czy kilkaset rekordów czy o BigData. Oraz o ruchu, czy jest to ruch rzędu kilku RPS czy kilku tysięcy RPS, bo to wszystko ma znaczenie.

Ale tak swoją drogą to jeśli potrzebujesz az 11 joinów to zastanowiłbym się nad strukturą tej bazy... Można porobić sobie np. widoki i z nich pobierać dane, a już baza będzie odpowiedzialna za ich aktualizację, porobić jakieś cache albo w ogóle zmienić strukturę.

Czasami nawet okazuje się, że bazy z tak dużą relacyjnością wcale jej nie potrzebują i można przejść na rozwiązania nierelacyjne, np. mongo, które jest bardzo szybkie.
komentarz 28 września 2019 przez niezalogowany
Słyszałem o mogno jednakże, na jednym z artykułów, w wadach mongo napisane było, ze bardzo ciężko jest je zabezpieczyć  i wycieki danych z tego faktu są spore.
komentarz 28 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
jak ktoś się nie zna to zepsuje każdą baze:) pracuję z bazami mongo gdzie mamy tysiace rps i tez i update i nie ma problemow. Kwestia odpowiedniego ustawienia, tak samo jak np. oracle. szczerze to widzę naprawde wiele zalet mongo i jestem bardzo zadowolony z tych baz.
komentarz 28 września 2019 przez niezalogowany
Bardzo dziękuję za odpowiedź , ruszę w tym kierunku  :)
0 głosów
odpowiedź 28 września 2019 przez mokrowski Mędrzec (155,460 p.)
Ogólnie wydajniejsze jest "pozostanie w warstwie bazy danych" więc zapytanie większe. Nie bez powodu zalecenia architektury np. DDD, mówią o agregacji do specyfikacji zapytania i separacji przez repozytorium.
komentarz 28 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
Nie zawsze, czasami w warstwie aplikacji lepiej jest zachować niektóre wyniki. Wg mnie nie znając całej architektury apki i wielkości ruchu, ilości wątków itp to nie można niż stanowczo polecać. Inne podejscie możesz mieć w mikro apce gdzie masz kilkanaście czy kilkadziesiąt requstow na sekundę,a inne w apce gdzie masz tysiące rps. Ponadto nie wiemy nic o innych zapytania, może mają one jakieś części wspólne, może w ogóle warto pozbyć się niektórych joinow itp itd. Teoria z książek to jedno, a praktyka to drugie.
komentarz 28 września 2019 przez mokrowski Mędrzec (155,460 p.)

Teoria z książek to jedno, a praktyka to drugie.

Wbrew pozorom to nie teoria. A samo zdanie to także nie argument (jeśli się bliżej przyjrzeć). Napisałem w pierwszym słowie jak widzisz "ogólnie". Kolega pytał przecież o ogólną wykładnię, więc ją dostał. Łamanie samej zasady owszem jest wykonywane ale przesłanki powinny być bardzo poważne i świadome. Odpowiedź w stylu "to nie takie proste", (w mojej ocenie) nie wnosi nic konstruktywnego. Oczywiście można zawsze tworzyć anemiczną domenę lub typowy CRUD bądź doprowadzić do patologicznego stosowania procedur wyzwalanych co będzie sklejało z warstwą persystencji. Problemy skalowalności/wydajności/dostępności/... w nietrywialnych architekturach nie powinny wpływać na model domeny a takie będą konsekwencje jeśli zapytania będą rozdrobnione z powodów technicznych (które sam opisałeś). Lepiej bardziej skomplikowane zapytania gromadzić w specyfikację i nie pozwalać na wpływ surowych SQL'owych zapytań na kod samej logiki aplikacji separując ją np. poprzez repozytorium (w końcu na SQL'u świat się nie kończy). Można także oczywiście te problemy obsługiwać przez inne style architektoniczne (CQRS, Microservice, Reactiv prg.. ). Ale jakiekolwiek nie będą możliwe jeśli.. "wyciek paradygmatu złączeń kartezjańskich" będzie obecny w domenie :)

Ww. podejście oczywiście obowiązuje do poważniejszych zastosowań. Możemy ustalić roboczo że dla takich dla których "książka zgadza się z praktyką". Inaczej będzie jeśli świadomie decydujesz o "bardzo wczesnej optymalizacji małego rozwiązania". Tylko że drut i sznurek to w mojej ocenie to nie jest "dobra praktyka" a zrobienie "szybko po małym koszcie... dziś" z (oby) świadomą decyzją że tak zrobimy. A jakże często jest to wynik nawarstwiania się reaktywnego rozwiązywania problemów.

Podobne pytania

0 głosów
1 odpowiedź 570 wizyt
pytanie zadane 7 marca 2020 w PHP przez franz Gaduła (4,940 p.)
0 głosów
0 odpowiedzi 114 wizyt
+1 głos
3 odpowiedzi 414 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...