Veiktspējas atšķirības starp Laravela daiļrunīgajiem ORM un RAW SQL vaicājumiem ir nozīmīgas un galvenokārt izriet no abstrakcijas un apstrādes pieskaitāmās izmaksas daiļrunīgi, salīdzinot ar RAW SQL tiešo izpildi.
Veiktspējas virs galvas daiļrunīgā ormā
Eloquent nodrošina objektu relāciju kartēšanas slāni, kas datu bāzes ierakstus tulko PHP objektos. Šī abstrakcija palielina ērtības un lasāmību, bet ievieš vairākas veiktspējas izmaksas:
- Paaugstināta CPU un atmiņas lietošana: daiļrunīgi instantio katra iegūtā vai manipulētā datu bāzes ieraksta objekts, kas patērē vairāk atmiņas un CPU resursu nekā RAW SQL, kas darbojas tieši datu rindās bez objekta konvertēšanas [3] [6].
- Lēnāks izpildes laiks: papildu apstrādes dēļ daiļrunīgi jautājumi parasti prasa ilgāku laiku. Tas ir īpaši izteikts lielapjoma operācijās, piemēram, tūkstošiem ierakstu ievietošana vai atjaunināšana, kur ir ievērojami uzkrājies daiļrunības [3] [6].
- Sarežģīta vaicājumu ģenerēšana: operācijām, kas saistītas ar vairākām galda savienojumiem, daiļrunība bieži ģenerē vairākus SQL vaicājumus vai sarežģītus vaicājumus, kas ir mazāk optimizēti nekā viens labi izstrādāts neapstrādāts SQL pievienošanās vaicājums. Tas noved pie ilgāka izpildes laikiem atsevišķās operācijās ar vairākām savienojumiem [3].
RAW SQL priekšrocības
Neapstrādāti SQL vaicājumi apiet ORM slāni, nosūtot tiešās SQL komandas uz datu bāzi. Tā rezultātā:
- Ātrāka izpilde: RAW SQL vaicājumi izpilda ātrāk, jo tie izvairās no objekta izveidošanas un tulkošanas slāņu pieskaitāmām izmaksām. Veiktspējas testi parāda, ka RAW SQL pārspēj daiļrunību ievietot, atjaunināt un atlasīt operācijas, palielinoties laika atšķirībām, pieaugot datu apjomam vai vaicājuma sarežģītībai [3] [6].
- Labāks lielapjoma un sarežģītām operācijām: RAW SQL ir efektīvāks lielapjoma ieliktņiem/atjauninājumiem un sarežģītiem vaicājumiem, kas saistīti ar vairākiem savienojumiem, jo tas ļauj precīzi kontrolēt vaicājuma struktūru un optimizāciju [3] [6].
Kad lietot katru
- Eliquent ORM: vispiemērotākie mazām un vidējām lietojumprogrammām ar salīdzinoši vienkāršām CRUD operācijām un mazākām datu kopām. Tas uzlabo izstrādātāja produktivitāti, koda lasāmību, uzturamību un drošības funkcijas, padarot to ideālu, ja neapstrādāta veiktspēja nav kritiska [3] [6].
- RAW SQL: Vēlams, lai veiktu kritiskus lietojumprogrammas, kas attiecas uz lieliem datu apjomiem, lielapjoma operācijām vai sarežģītiem vaicājumiem, ja izpildes ātrums ir ārkārtīgi svarīgs. RAW SQL nodrošina lielāku kontroli un efektivitāti šajos scenārijos [3] [6].
Kopsavilkums
Kaut arī daiļrunīgs ORM piedāvā ievērojamas attīstības ērtības, tam tiek noteikts izmērāms sods par veiktspēju, salīdzinot ar RAW SQL vaicājumiem. Atšķirība ir visievērojamākā liela mēroga datu operācijās un sarežģītos jautājumos. RAW SQL izpilda ātrāk un izmanto mazāk resursu, bet prasa lielāku manuālu vaicājumu pārvaldību. Izvēle starp tiem ir atkarīga no lietojumprogrammas darbības prasībām un attīstības prioritātēm [3] [6].
Atsauces:
[1] https://www.reddit.com/r/laravel/comments/hezv6m/eloquent_vs_query_builder_vs_sql_performance_test/
[2.]
[3] https://www.diva-portal.org/smash/get/diva2:1014983/fulltext02
.
[5] https://www.youtube.com/watch?v=n_rbsoJfcau
[6] https://blog.livares.com/comparison-of-performance-between-eloquent-and-raw-query/
[7] https://dev.to/hesamrad/laravel-orm
[8] https://stackoverflow.com/questions/38391710/what-are-the-key-differences-between-laravels-loquent-or-and-query-Builder