Thread View: pl.comp.lang.php
12 messages
12 total messages
Started by Marek S
Tue, 25 Dec 2018 13:54
Laravel ORM czy SQL?
Author: Marek S
Date: Tue, 25 Dec 2018 13:54
Date: Tue, 25 Dec 2018 13:54
42 lines
3052 bytes
3052 bytes
Witam, Próbuję przekonać się do ORM. Ponoć jest to szybsze i wygodniejsze. Być może gdy robimy jakiegoś prostego inserta do jednej tabeli i czy selecta. Jednakże tu też mam wątpliwości czy jest to faktycznie szybsze niż pisanie w SQL. Nie bardzo potrafię zainfekować się tą ideą. Oto moje wątpliwości: 1. Pracując w ORM musimy nauczyć się SQL raz jeszcze - od nowa. Jest on zapisany w języku PHP za pomocą funkcji. Pytanie: po co? Jest z tego jakaś korzyść? W dodatku łapię się na tym, że staram się przekładać w myślach to co piszę w ORM na język zapytania SQL jakie z tego może powstać by uzyskać efektywność wykonania złożonego zapytania. Tymczasem szybciej byłoby zwyczajnie w SQL skrobnąć to samo zapytanie zamiast kombinować. 2. W ORM tracimy w pewnym zakresie kontrolę nad tym jaki SQL z tego się wytworzy. Nie wiem czy jest inny sposób monitorowania wygenerowana SQL przez ORM jak grzebanie w logach bazy danych - co mocno komplikuje development. Nie wiem czy da się zmusić ORM do generowania optymalnych struktur SQL charakterystycznych dla konkretnej bazy danych. Np. z tego co pamiętam, w MySQL JOINny mogły mieć tylko 1 argument a w niektórych przypadkach w PostgreSQL JOINy z wieloma argumentami potrafiły dramatycznie zwiększyć wydajność zapytania. Oczywiście to tylko jest przykład ad hoc. Zapewne jeśli się zastanowić, to wiele sytuacji można wymyślić. 3. Przy tworzeniu większych systemów rzadko zdarza się, że pracujemy z jedną tabelą w sensie aktualizacji zawartości. Np. aby móc zrobić inserta z kompletem potrzebnych danych, to nierzadko zachodzi potrzeba wydobycia informacji z innych tabel, przeliczenie czegoś tam i w zależności od wyników zmodyfikowanie rekordów w tej i innych tabelach. Tak więc traktowanie ORM jako "rekordu w pojedynczej tabeli" jest mocnym ograniczeniem. Model i tak musi grzebać w całym ekosystemie bazy danych. Jedyna korzyść jaką dostrzegam, to możliwość przenoszenia projektów między jedną z 4 baz danych jaką Laravel obsługuje. Ale czy to jest faktycznie takie istotne? Zazwyczaj nie ma potrzeby zmiany bazy. -- Pozdrawiam, Marek
Re: Laravel ORM czy SQL?
Author: Borys Pogoreło
Date: Wed, 26 Dec 2018 16:50
Date: Wed, 26 Dec 2018 16:50
27 lines
1931 bytes
1931 bytes
Dnia Tue, 25 Dec 2018 14:54:39 +0100, Marek S napisał(a): > 1. Pracując w ORM musimy nauczyć się SQL raz jeszcze - od nowa. Jest on > zapisany w języku PHP za pomocą funkcji. Pytanie: po co? Jest z tego > jakaś korzyść? Oczywiście, możesz łatwo modyfikować zapytanie i przekazywać je dalej w logice programu, która znów je modyfikuje. Prosto, łatwo i przyjemnie, zamiast robić rzeźbę na stringach (którą łatwo robić przyrostowo, ale już nie w drugą stronę). > 2. W ORM tracimy w pewnym zakresie kontrolę nad tym jaki SQL z tego się > wytworzy. I jaki widzisz w tym problem? Jeśli akurat jest to ten 1% zapytań, gdzie lepiej je napiszesz ręcznie, to możesz tak robić. > Tak więc traktowanie ORM jako "rekordu w pojedynczej tabeli" jest mocnym > ograniczeniem. Model i tak musi grzebać w całym ekosystemie bazy danych. Dokładnie, bo źle to traktujesz. Eloquent potrafi dużo więcej, niż zwykły ORM i tu tkwi jego siła. Poczytaj o relacjach modeli i co za ich pomocą można robić, to szybko przejdzie Ci ochota na dłubanie w SQL. -- Borys Pogoreło borys(#)leszno,edu,pl
Re: Laravel ORM czy SQL?
Author: Marek S
Date: Wed, 26 Dec 2018 20:28
Date: Wed, 26 Dec 2018 20:28
33 lines
2323 bytes
2323 bytes
W dniu 2018-12-26 o 17:50, Borys Pogoreło pisze: > > Oczywiście, możesz łatwo modyfikować zapytanie i przekazywać je dalej w > logice programu, która znów je modyfikuje. Prosto, łatwo i przyjemnie, > zamiast robić rzeźbę na stringach (którą łatwo robić przyrostowo, ale już > nie w drugą stronę). Ok. Tu faktycznie racja. >> 2. W ORM tracimy w pewnym zakresie kontrolę nad tym jaki SQL z tego się >> wytworzy. > > I jaki widzisz w tym problem? Jeśli akurat jest to ten 1% zapytań, gdzie > lepiej je napiszesz ręcznie, to możesz tak robić. Wystarczy że ten 1% zapytań powoduje upadek serwera bazodanowego gdy (konkretny przypadek) miliony rekordów są przetwarzane każdej nocy. Wystarczy również, że optymalizacja SQL skróciła w ten sposób czas wykonywania procesu z 4h do 20 minut (również konkretny przypadek). W tym przypadku zastosowałem składnię typową dla PostgreSQL zamiast uniwersalnej, działającej również na MySQL. > Dokładnie, bo źle to traktujesz. Eloquent potrafi dużo więcej, niż zwykły > ORM i tu tkwi jego siła. Poczytaj o relacjach modeli i co za ich pomocą > można robić, to szybko przejdzie Ci ochota na dłubanie w SQL. Oki, tak zrobię niebawem. Jestem na początku tej drogi, wdrażam się właśnie w Eloquenta. Być może powrócę za jakiś czas z dalszymi pytaniami. -- Pozdrawiam, Marek
Re: Laravel ORM czy SQL?
Author: Borys Pogoreło
Date: Wed, 26 Dec 2018 22:26
Date: Wed, 26 Dec 2018 22:26
15 lines
1428 bytes
1428 bytes
Dnia Wed, 26 Dec 2018 21:28:50 +0100, Marek S napisał(a): >> I jaki widzisz w tym problem? Jeśli akurat jest to ten 1% zapytań, gdzie >> lepiej je napiszesz ręcznie, to możesz tak robić. > > Wystarczy że ten 1% zapytań powoduje upadek serwera bazodanowego gdy > (konkretny przypadek) miliony rekordów są przetwarzane każdej nocy. To są skrajne przypadki, które optymalizuje się ręcznie. 99% reszty to wyciąganie komentarzy do posta czy zdjęć dla profilu, ale tylko tych mających komentarze. -- Borys Pogoreło borys(#)leszno,edu,pl
Re: Laravel ORM czy SQL?
Author: Marek S
Date: Thu, 27 Dec 2018 21:05
Date: Thu, 27 Dec 2018 21:05
13 lines
1448 bytes
1448 bytes
W dniu 2018-12-26 o 23:26, Borys Pogoreło pisze: > To są skrajne przypadki, które optymalizuje się ręcznie. 99% reszty to > wyciąganie komentarzy do posta czy zdjęć dla profilu, ale tylko tych > mających komentarze. Czy w ORM daje się jakoś ogarnąć takie przypadki? Właśnie zaangażowano mnie do innego przedsięwzięcia, w którym ta skrajność występuje (inna firma). Najwidoczniej mam pecha do nich :-) -- Pozdrawiam, Marek
Re: Laravel ORM czy SQL?
Author: Wojciech Bancer
Date: Thu, 27 Dec 2018 21:12
Date: Thu, 27 Dec 2018 21:12
18 lines
1775 bytes
1775 bytes
On 2018-12-27, Marek S <precz@spamowi.com> wrote: [...] >> To są skrajne przypadki, które optymalizuje się ręcznie. 99% reszty to >> wyciąganie komentarzy do posta czy zdjęć dla profilu, ale tylko tych >> mających komentarze. > > Czy w ORM daje się jakoś ogarnąć takie przypadki? Właśnie zaangażowano > mnie do innego przedsięwzięcia, w którym ta skrajność występuje (inna > firma). Najwidoczniej mam pecha do nich :-) To zadziała? https://stackoverflow.com/questions/33049511/how-to-execute-raw-queries-with-laravel-5-1 -- Wojciech Bańcer wojciech.bancer@gmail.com
Re: Laravel ORM czy SQL?
Author: Marek S
Date: Fri, 28 Dec 2018 21:28
Date: Fri, 28 Dec 2018 21:28
11 lines
1309 bytes
1309 bytes
W dniu 2018-12-27 o 22:12, Wojciech Bancer pisze: > > To zadziała? > https://stackoverflow.com/questions/33049511/how-to-execute-raw-queries-with-laravel-5-1 Z pewnością, ale jest to zaniechanie ORM :-) -- Pozdrawiam, Marek
Re: Laravel ORM czy SQL?
Author: Borys Pogoreło
Date: Fri, 28 Dec 2018 21:48
Date: Fri, 28 Dec 2018 21:48
17 lines
1650 bytes
1650 bytes
Dnia Fri, 28 Dec 2018 22:28:46 +0100, Marek S napisał(a): >> To zadziała? >> https://stackoverflow.com/questions/33049511/how-to-execute-raw-queries-with-laravel-5-1 > > Z pewnością, ale jest to zaniechanie ORM :-) ORM to nie jest jakaś świętość - jeśli w danym przypadku lepsze będzie ręcznie napisane zapytanie SQL, to nie ma przeszkód by go użyć. Miej tylko na uwadze, że wynikiem zapytania select zawsze będzie kolekcja obiektów stdClass, nie jest łatwo to zamienić na zwykłą tablicę (array_pluck() nie polecam dla większych zbiorów danych). -- Borys Pogoreło borys(#)leszno,edu,pl
Re: Laravel ORM czy SQL?
Author: Marek S
Date: Fri, 28 Dec 2018 22:29
Date: Fri, 28 Dec 2018 22:29
18 lines
1854 bytes
1854 bytes
W dniu 2018-12-28 o 22:48, Borys Pogoreło pisze: > Miej tylko na uwadze, że wynikiem zapytania select zawsze będzie kolekcja > obiektów stdClass, nie jest łatwo to zamienić na zwykłą tablicę > (array_pluck() nie polecam dla większych zbiorów danych). Ok, tak też sądziłem... Jeszcze na koniec jedno pytanie o ORM. Czy jest jakiś konwerter SQL -> laravelowy ORM? Chodzi o to, że o wiele łatwiej napisać złożone zapytanie w SQL. Przy prostych strukturach nie ma problemu. Dość często potrzebne są np. podzapytania agregujące do tworzenia kryteriów wyboru w zapytaniu nadrzędnym i inne ekwilibrystyki z wieloma JOINami wszelkiej maści. -- Pozdrawiam, Marek
Re: Laravel ORM czy SQL?
Author: Borys Pogoreło
Date: Fri, 28 Dec 2018 23:03
Date: Fri, 28 Dec 2018 23:03
21 lines
1862 bytes
1862 bytes
Dnia Fri, 28 Dec 2018 23:29:11 +0100, Marek S napisał(a): > Ok, tak też sądziłem... > > Jeszcze na koniec jedno pytanie o ORM. Czy jest jakiś konwerter SQL -> > laravelowy ORM? Nie spotkałem się z czymś takim i wątpię, by ktoś miał potrzebę stworzenia tak skomplikowanego narzędzia. > Chodzi o to, że o wiele łatwiej napisać złożone zapytanie w SQL. Przy > prostych strukturach nie ma problemu. Dość często potrzebne są np. > podzapytania agregujące do tworzenia kryteriów wyboru w zapytaniu > nadrzędnym i inne ekwilibrystyki z wieloma JOINami wszelkiej maści. Prawdopodobnie większość z nich będziesz mógł zastąpić relacjami Eloquenta i operacjami na nich. -- Borys Pogoreło borys(#)leszno,edu,pl
Re: Laravel ORM czy SQL?
Author: Marek S
Date: Sat, 29 Dec 2018 20:23
Date: Sat, 29 Dec 2018 20:23
13 lines
1779 bytes
1779 bytes
W dniu 2018-12-29 o 00:03, Borys Pogoreło pisze: > Prawdopodobnie większość z nich będziesz mógł zastąpić relacjami Eloquenta > i operacjami na nich. Być może zbyt wcześnie panikuję :-) ORM wydaje mi się póki co sztuczny środowiskiem dla nieuków bazodanowych. Z drugiej strony gadałem z kolegami programującymi w C#, których jest drastyczna przewaga w firmie i oni wszyscy jadą w ORM. Wyrażenie SQL kojarzy im się ze studiami niż z czymkolwiek użytecznym. Być może czas na zmiany... -- Pozdrawiam, Marek
Re: Laravel ORM czy SQL?
Author: irq
Date: Sun, 06 Jan 2019 12:05
Date: Sun, 06 Jan 2019 12:05
13 lines
2038 bytes
2038 bytes
W dniu sobota, 29 grudnia 2018 21:24:00 UTC+1 użytkownik Marek S napisał: > > Być może zbyt wcześnie panikuję :-) ORM wydaje mi się póki co sztuczny > środowiskiem dla nieuków bazodanowych. Z drugiej strony gadałem z > kolegami programującymi w C#, których jest drastyczna przewaga w firmie > i oni wszyscy jadą w ORM. Wyrażenie SQL kojarzy im się ze studiami niż z > czymkolwiek użytecznym. właśnie trafnie ich nazwałeś > Być może czas na zmiany... ... pracy
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads