window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Aktiivse kirje päringuliides - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2020-06-03
Tarkvaraarendus

Aktiivse kirje päringuliides

Marta Polec

Veebirakenduste arendamisel on jõudlus üks olulisemaid aspekte, mida tuleb arvesse võtta. Andmebaasist andmete kättesaamise viisi analüüsimine on hea lähtepunkt täiustuste otsimisel. Selles artiklis leiate näiteid selle kohta, kuidas parandada jõudlust, kasutades koondfunktsioone ja filtreerides andmeid andmebaasi tasandil.

Alustuseks mõningane kontekst

See artikkel on inspireeritud reaalsest probleemist, millega mulle kunagi tehti ülesandeks. Sellega tegelemine õpetas mulle palju, ja mul on see siiani meeles kui viide. Ma arvan, et näited on hea õppevahend, need võivad palju selgeks teha. Selles artiklis tahaksin jagada teiega mõningaid näiteid Active Record päringumeetodite kasutamise kohta.

Et mitte tutvustada valdkondlikke üksikasju, kasutan näidete illustreerimiseks ühe raamatukogu näidisrakendust. Kõik on üsna lihtne, nagu on näidatud alloleval joonisel. Meil on neli tabelit: autorid, raamatud, kasutajad ja laenutused. Üks kasutaja võib laenutada palju raamatuid ja ühte raamatut võib laenutada mitu kasutajat, seega vajame liitumistabelit, et modelleerida paljude-mitmele suhteid. Meie puhul on see rentals tabel. Samuti salvestame sinna mõned lisainfot, milleks on laenutamise ja tagastamise kuupäevad. Ühele autorile võib olla määratud mitu raamatut. Raamatul on ka atribuut, mis määrab selle žanri.

Kasutaja lugemisstatistika

Ülesanne oli koostada statistika ühe kasutaja kohta, et me saaksime öelda, kui palju raamatuid igast žanrist laenutati. Minu esimene mõte oli välja otsida kõik raamatud, mida kasutaja on laenutanud, rühmitada need žanri järgi ja seejärel teha kaardistus, nii et igale žanrile oleks nimekirja asemel määratud raamatute arv. Siin on see, mida ma välja mõtlesin:

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

Kuigi see lähenemine töötab ja näeb puhas välja, ei kasuta see kõiki võimalusi, mida Active Record päringumeetodid pakuvad. Tänu neile on meil võimalik filtreerida ja agregeerida andmeid andmebaasi tasandil, ilma et kasutaksime otse toores SQL-i meie kood. Tegutsemine db tasandil suurendab ka meie tõhusust.

Ülaltoodud näites saame Ruby grupi asemel kasutada meetodit groupmeetodi järgi. See rakendab tGRUPPIBY-klauslit tSQL päringule. Lisaks võib kaardistamise ja suuruse meetodi asendada loendamisfunktsiooniga. Lõpuks jääb meile päring, mis näeb välja selline:

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

See tundub veelgi lihtsam!

Muud kasulikud näited

Järgnevalt leiate mõned muud viisid, kuidas kasutada päringumeetodeid, mida minu arvates tasub teada.

Kutse mitteaktiivsetele kasutajatele

ÜLESANNE: Filtreeri kasutajad, kes ei ole kunagi raamatut laenanud või tegid seda rohkem kui aasta tagasi.

Me võiksime välja otsida kõik kasutajad, lisades nendega seotud üürid ja seejärel filtreerida neid meetodi select abil.

User.includes(:rentals).select do |user|
 user.rentals.empty? || user.rentals.none? { |rental| rent.start_date >= Date.today - 1.year }
end 

Kuid loomulikult ei ole vaja kõike välja tuua. Kasutades päringumeetodeid, saame seda db tasandil välja filtreerida. Kõigepealt valime välja kasutajad, kes on viimase aasta jooksul laenutanud mõned raamatud ja seejärel jätame nad lõplikust valikust välja.

Nii näeb alamküsitlus välja:

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

Ja nüüd paneme selle kõik kokku:

User.where.not(id: [User.joins(:rentals).where(rentals: { alguskuupäev: (kuupäev.täna - 1.aasta)..kuupäev.täna })])

Alaesindatud autorid

ÜLESANNE: saada autorid, kellel on üks või null laenutatud raamatut

Selle tegemine select-meetodiga on super lihtne, kuid jällegi - nii suurt andmekogumit ei ole vaja opereerida, sest db suudab seda meie eest filtreerida:

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

Seejärel on kiire ja lihtne filtreerida autoreid, kellele on määratud null raamatut:

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

Left_joins'i (ja üldiselt outer joins'i) kasutamisel on oluline meeles pidada üht asja. Kui vasakpoolses tabelis (siin: autorid) on kirjeid, millel ei ole vastavaid kirjeid parempoolses tabelis (siin: raamatud), siis täidetakse parempoolse tabeli veerud nullväärtustega.

Kuna meil on vaja ka autoreid, kellele on süsteemis määratud üks raamat, on vaja teha veel mõned toimingud. Peame tegema rühmitamist, loendamist ja tingimuse lisamist. Siin on, kuidas seda kõike kokku panna:

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

Tingimus tuleb pärast summeerimisfunktsiooni, seega peame selle täpsustamiseks kasutama WHERE-klausli asemel HAVING-klauslit.

Active Record'i päringumeetodid tasub kontrollida, kui mõelda rakenduse jõudlusele. Need võivad lihtsustada teie koodi ja muuta selle kiiremini toimivaks. Loodan, et jagatud näited aitavad teil uurida võimalusi, mida päringumeetodid pakuvad.

Loe edasi:

– Aeg on uue reaalsuse jaoks. Kaugtöö ajastu algas kuu aega tagasi

– Kas teil on vaja kasutada oma Railsi rakenduses tavalisi JS raamistikke? Stimulus.js võib olla alternatiiviks.

– Veebirakenduse arendamine: Miks on Ruby on Rails tehnoloogia, mida tasub valida?

Seotud artiklid

Tarkvaraarendus

Tulevikukindlate veebirakenduste loomine: The Codest ekspertide meeskonna ülevaade

Avastage, kuidas The Codest paistab skaleeritavate, interaktiivsete veebirakenduste loomisel silma tipptehnoloogiatega, mis pakuvad sujuvat kasutajakogemust kõigil platvormidel. Saate teada, kuidas meie eksperditeadmised aitavad kaasa digitaalsele ümberkujundamisele ja äritegevusele...

THECODEST
Tarkvaraarendus

Top 10 Lätis asuvat tarkvaraarendusettevõtet

Tutvu Läti parimate tarkvaraarendusettevõtete ja nende innovaatiliste lahendustega meie viimases artiklis. Avastage, kuidas need tehnoloogiajuhid saavad aidata teie äri edendada.

thecodest
Enterprise & Scaleups lahendused

Java tarkvaraarenduse põhitõed: A Guide to Outsourcing Successfully

Tutvuge selle olulise juhendiga, kuidas edukalt outsourcing Java tarkvara arendada, et suurendada tõhusust, pääseda ligi eksperditeadmistele ja edendada projekti edu The Codest abil.

thecodest
Tarkvaraarendus

Ülim juhend Poola allhanke kohta

outsourcing kasv Poolas on tingitud majanduslikust, hariduslikust ja tehnoloogilisest arengust, mis soodustab IT kasvu ja ettevõtlussõbralikku kliimat.

TheCodest
Enterprise & Scaleups lahendused

Täielik juhend IT-auditi vahendite ja tehnikate kohta

IT-auditid tagavad turvalised, tõhusad ja nõuetele vastavad süsteemid. Lisateavet nende tähtsuse kohta leiate kogu artiklist.

The Codest
Jakub Jakubowicz CTO & kaasasutajad

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian