(function(w,d,s,l,i){w[l]=w[l]|||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=? 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Aktīvā ieraksta vaicājuma saskarne - The Codest
The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2019-04-15
Programmatūras izstrāde

Aktīvā ieraksta vaicājuma saskarne

Marta Polec

Veiktspēja ir viens no svarīgākajiem aspektiem, kas jāņem vērā, izstrādājot tīmekļa lietojumprogrammas. Analizējot, kā dati tiek saņemti no datubāzes, ir labs sākumpunkts, meklējot uzlabojumus. Šajā rakstā atradīsiet piemērus, kā uzlabot veiktspēju, izmantojot apkopojošās funkcijas un filtrējot datus datubāzes līmenī.

Dažas lietas sākumā

Šo rakstu iedvesmoja reāla problēma, ar kuru man reiz ir nācies saskarties. Tās risināšana man daudz ko iemācīja, un man tā joprojām ir kā atsauce prātā. Manuprāt, piemēri ir labs mācību materiāls, tie var daudz ko izskaidrot. Šajā rakstā vēlos dalīties ar dažiem piemēriem par Active Record vaicājumu metožu izmantošanu.

Lai neieviestu ar domēnu saistītas detaļas, piemēru ilustrēšanai izmantošu bibliotēkas lietojumprogrammas paraugu. Viss ir diezgan vienkārši, kā parādīts diagrammā zemāk. Mums ir četras tabulas: autori, grāmatas, lietotāji un nomas. Viens lietotājs var aizņemties daudzas grāmatas, un vienu grāmatu var aizņemties daudzi lietotāji, tāpēc mums ir nepieciešama savienojošā tabula, lai modelētu attiecības "daudz pret daudz". Mūsu gadījumā tā ir nomas tabula. Tajā mēs glabājam arī papildu informāciju, proti, aizņemšanās un atgriešanas datumus. Autoram var būt daudzas grāmatas, kas piešķirtas viņa vārdam. Grāmatai ir arī atribūts, kas nosaka tās žanru.

Lietotāju lasīšanas statistika

Uzdevums bija sagatavot statistiku par vienu lietotāju, lai mēs varētu pateikt, cik daudz katra žanra grāmatu ir aizņemtas. Mana pirmā doma bija iegūt visas grāmatas, kuras lietotājs ir aizņēmies, sagrupēt tās pēc žanra un pēc tam veikt kartēšanu, lai katram žanram tiktu piešķirts grāmatu skaits, nevis saraksts. Lūk, ko es izdomāju:

Hash[Book.joins(:nomaals).where(nomaals: { user: user }).group_by(&:genre).map { |genre, books| [genre, books.size] }]

Lai gan šī pieeja darbojas un izskatās tīri, tā neizmanto visas iespējas, ko piedāvā Active Record vaicājuma metodes. Pateicoties tām, mēs varam filtrēt un apkopot dati datubāzes līmenī, neizmantojot neapstrādātu SQL tieši mūsu kods. Darbība db līmenī arī palielina mūsu efektivitāti.

Iepriekš minētajā piemērā mēs varam izmantot grupu metodi, nevis Ruby's group.pēc metodes. Tā piemēros GROUPBY klauzulu tSQL vaicājumā. Turklāt kartēšanas un lieluma metodi var aizstāt ar skaitīšanas agregēšanas funkciju. Beigu beigās mēs iegūstam šādu vaicājumu:

Book.joins(:rentals).where(rentals: { user: user }).group(:genre).count(:books)

Tas izskatās vēl vienkāršāk!

Citi noderīgi piemēri

Zemāk atradīsiet dažus citus pieprasīšanas metožu izmantošanas veidus, kurus, manuprāt, ir vērts zināt.

Aicinājums neaktīvajiem lietotājiem

UZDEVUMS: Uzdevums: Izfiltrējiet lietotājus, kuri nekad nav aizņēmušies grāmatu vai ir to darījuši vairāk nekā pirms gada.

Mēs varētu iegūt visus lietotājus, iekļaujot saistītās īres maksas, un pēc tam tos filtrēt, izmantojot atlases metodi.

Lietotājs.includes(:noma).select do |lietotājs|
 user.nomaals.empty? ||| user.rentals.none? { || noma| noma.start_date >= Date.today - 1.year }
end 

Bet, protams, nav nepieciešams visu ņemt līdzi. Izmantojot vaicājuma metodes, mēs to varam izfiltrēt db līmenī. Vispirms atlasīsim lietotājus, kuri pēdējā gada laikā ir aizņēmušies dažas grāmatas, un pēc tam izslēgsim tos no galīgās atlases.

Lūk, kā izskatīsies apakšvaicājums:

User.joins(:rentals).where(rentals: { start_date: (Date.today - 1.year).Date.today })

Un tagad saliksim to visu kopā:

User.where.not(id: [User.joins(:nomaals).where(nomaals: {datums: (Date.today - 1.year)..Date.today })]))

Nepietiekami pārstāvēti autori

UZDEVUMS: Iegūstiet autorus ar vienu vai nulli aizņemto grāmatu

Tas ir ļoti vienkārši, bet atkal - nav nepieciešams strādāt ar tik lielu datu kopumu, jo db var filtrēt to, lai mums:

Author.includes(:books).select { | |author| author.books.size <= 1 }

Tad autoru, kuriem nav piešķirta neviena grāmata, filtrēšana ir ātra un vienkārša:

Author.left_joins(:books).where(books: { id: nil })

Lietojot left_joins (un vispār ārējos savienojumus), ir svarīgi atcerēties vienu lietu. Ja kreisajā tabulā (šeit: autori) ir ieraksti, kuriem nav atbilstošu ierakstu labajā tabulā (šeit: grāmatas), tad rezultātā labās tabulas kolonnas tiks aizpildītas ar nulles vērtībām.

Tā kā mums ir vajadzīgi arī autori, kuriem sistēmā ir piešķirta viena grāmata, ir jāveic vēl dažas darbības. Mums būs jāveic grupēšana, skaitīšana un nosacījuma pievienošana. Lūk, kā to visu salikt kopā:

Author.left_joins(:books).group(:id).having("count(*) <= ?", 1)

Nosacījums ir aiz apkopošanas funkcijas, tāpēc tā norādīšanai ir jāizmanto HAVING klauzula, nevis WHERE klauzula.

Domājot par lietojumprogrammas veiktspēju, ir vērts pārbaudīt Active Record vaicājumu metodes. Tās var vienkāršot jūsu kodu un padarīt to ātrāku. Es ceru, ka kopīgie piemēri palīdzēs jums izpētīt iespējas, ko piedāvā vaicājumu metodes.

Lasīt vairāk:

- Laiks jaunai realitātei. Pirms mēneša sākās attālinātā darba ēra

- Vai jūsu Rails lietojumprogrammā ir nepieciešams izmantot parastos JS ietvarus? Stimulus.js var būt alternatīva

- Web lietojumprogrammu izstrāde: Kāpēc ir vērts izvēlēties Ruby on Rails tehnoloģiju?

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

    The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

    Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

    Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lt_LTLithuanian is_ISIcelandic lvLatvian