window.pipedriveLeadboosterConfig = { base: pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on jo olemassa') } 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 }) }, } } })() Aktiivisen tietueen kyselykäyttöliittymä - The Codest
Codest
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Toimialat
    • Fintech & pankkitoiminta
    • E-commerce
    • Adtech
    • Terveysteknologia
    • Valmistus
    • Logistiikka
    • Autoteollisuus
    • IOT
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
Takaisin nuoli PALAA TAAKSE
2020-06-03
Ohjelmistokehitys

Aktiivisen tietueen kyselykäyttöliittymä

Marta Polec

Suorituskyky on yksi tärkeimmistä huomioon otettavista seikoista verkkosovelluksia kehitettäessä. Tietokannasta haettavan tiedon analysointi on hyvä lähtökohta parannuksia etsittäessä. Tässä artikkelissa on esimerkkejä siitä, miten suorituskykyä voidaan parantaa käyttämällä aggregaattifunktioita ja suodattamalla tietoja tietokantatasolla.

Aluksi muutama asiayhteys

Tämä artikkeli on saanut inspiraationsa todellisesta ongelmasta, jonka kanssa olen kerran ollut tekemisissä. Sen käsitteleminen opetti minulle paljon, ja minulla on se edelleen viitteenä mielessäni. Mielestäni esimerkit ovat hyvä oppimisresurssi, ne voivat selventää paljon. Tässä artikkelissa haluan jakaa kanssasi esimerkkejä Active Record -kyselymenetelmien käytöstä.

Jotta en esittelisi toimialakohtaisia yksityiskohtia, käytän esimerkkien havainnollistamiseen kirjaston esimerkkisovellusta. Kaikki on melko yksinkertaista, kuten alla olevassa kaaviossa näkyy. Meillä on neljä taulukkoa: kirjoittajat, kirjat, käyttäjät ja vuokraus. Yksi käyttäjä voi lainata monta kirjaa ja yhtä kirjaa voi lainata monta käyttäjää, joten tarvitsemme liitäntätaulukon, jolla voimme mallintaa monesta moniin -suhteita. Meidän tapauksessamme se on rentals-taulu. Tallennamme sinne myös joitakin lisätietoja, jotka ovat lainaus- ja palautuspäivämäärät. Kirjailijalla voi olla useita kirjoja nimellään. Kirjalla on myös attribuutti, joka määrittelee sen genren.

Käyttäjän lukutilastot

Tehtävänä oli laatia tilastoja yhdestä käyttäjästä, jotta voisimme kertoa, kuinka monta kirjaa kustakin genrestä oli lainattu. Ensimmäinen ajatukseni oli hakea kaikki käyttäjän lainaamat kirjat, ryhmitellä ne genren mukaan ja tehdä sitten mappaus, jotta jokaiselle genrelle olisi määritetty kirjojen määrä luettelon sijaan. Keksin seuraavan ratkaisun:

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

Vaikka tämä lähestymistapa toimii ja näyttää siistiltä, se ei käytä kaikkia Active Record -kyselymenetelmien tarjoamia mahdollisuuksia. Niiden ansiosta voimme suodattaa ja aggregoida tietoja tietokantatasolla ilman, että käytämme raakaa SQL:ää suoraan meidän koodi. Toimiminen db-tasolla lisää myös tehokkuuttamme.

Yllä olevassa esimerkissä voimme käyttää ryhmämenetelmää Rubyn ryhmän sijasta.menetelmän mukaan. Se soveltaa GROUPBY-lauseke tSQL-kyselyyn. Lisäksi kartoitus- ja kokomenetelmä voidaan korvata laskenta-aggregaatiofunktiolla. Loppujen lopuksi jäljelle jää kysely, joka näyttää tältä:

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

Se näyttää vielä yksinkertaisemmalta!

Muita hyödyllisiä esimerkkejä

Alla on joitakin muita tapoja käyttää kyselymenetelmiä, jotka ovat mielestäni tietämisen arvoisia.

Kutsu inaktiivisille käyttäjille

TEHTÄVÄ: Suodata käyttäjät, jotka eivät ole koskaan lainanneet kirjaa tai jotka ovat lainanneet kirjan yli vuosi sitten.

Voisimme hakea kaikki käyttäjät sisällyttämällä niihin liittyvät vuokrasopimukset ja suodattaa ne sitten select-menetelmällä.

User.includes(:vuokraus).select do |user|
 user.rentals.empty? || user.rentals.none? { |vuokraus| vuokraus.alkupäivä >= Date.today - 1.year }
end 

Kaikkea ei tietenkään tarvitse hakea. Käyttämällä kyselymenetelmiä voimme suodattaa sen pois tietokantatasolla. Ensin valitaan käyttäjät, jotka ovat lainanneet joitakin kirjoja viimeisen vuoden aikana, ja jätetään ne sitten lopullisen valinnan ulkopuolelle.

Alakysely näyttää tältä:

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

Ja nyt kootaan kaikki yhteen:

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

Aliedustetut kirjoittajat

TEHTÄVÄ: Hanki kirjailijat, joilla on yksi tai nolla lainattua kirjaa.

Sen tekeminen select-menetelmällä on erittäin yksinkertaista, mutta jälleen kerran - ei ole tarvetta käsitellä niin suurta tietomäärää, koska tietokanta voi suodattaa sen puolestamme:

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

Sen jälkeen on helppoa ja nopeaa suodattaa kirjailijat, joille ei ole annettu yhtään kirjaa:

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

On tärkeää muistaa yksi asia, kun käytät left_joineja (ja ulompia liitoksia yleensä). Jos vasemmanpuoleisessa taulukossa (tässä: kirjoittajat) on tietueita, joilla ei ole vastaavia tietueita oikeanpuoleisessa taulukossa (tässä: kirjat), tuloksena oikeanpuoleisen taulukon sarakkeet täytetään nolla-arvoilla.

Koska tarvitsemme myös kirjailijoita, joilla on yksi kirja järjestelmässä, on tehtävä vielä muutama toimenpide. Meidän on tehtävä ryhmittely, laskenta ja ehdon lisääminen. Tässä on, miten kaikki kootaan yhteen:

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

Ehto tulee aggregointitoiminnon jälkeen, joten meidän on käytettävä HAVING-lauseketta WHERE-lausekkeen sijasta sen määrittämiseen.

Active Record -kyselymenetelmät kannattaa tarkistaa, kun mietit sovelluksen suorituskykyä. Ne voivat yksinkertaistaa koodia ja nopeuttaa sen toimintaa. Toivon, että jaetut esimerkit auttavat sinua tutkimaan kyselymenetelmien tarjoamia mahdollisuuksia.

Lue lisää:

– On uuden todellisuuden aika. Etätyön aikakausi on alkanut kuukausi sitten

– Haluatko käyttää yleisiä JS-kehyksiä Rails-sovelluksessasi? Stimulus.js voi olla vaihtoehto.

– Web-sovellusten kehittäminen: Miksi Ruby on Rails on valitsemisen arvoinen teknologia?

Aiheeseen liittyvät artikkelit

Ohjelmistokehitys

Tulevaisuuden web-sovellusten rakentaminen: The Codest:n asiantuntijatiimin näkemyksiä

Tutustu siihen, miten The Codest loistaa skaalautuvien, interaktiivisten verkkosovellusten luomisessa huipputeknologian avulla ja tarjoaa saumattomia käyttäjäkokemuksia kaikilla alustoilla. Lue, miten asiantuntemuksemme edistää digitaalista muutosta ja liiketoimintaa...

THECODEST
Ohjelmistokehitys

Top 10 Latviassa toimivaa ohjelmistokehitysyritystä

Tutustu Latvian parhaisiin ohjelmistokehitysyrityksiin ja niiden innovatiivisiin ratkaisuihin uusimmassa artikkelissamme. Tutustu siihen, miten nämä teknologiajohtajat voivat auttaa nostamaan liiketoimintaasi.

thecodest
Yritys- ja skaalausratkaisut

Java-ohjelmistokehityksen perusteet: A Guide to Outsourcing Successfully

Tutustu tähän keskeiseen oppaaseen Java-ohjelmistokehityksen onnistuneesta ulkoistamisesta tehokkuuden parantamiseksi, asiantuntemuksen saamiseksi ja projektin onnistumiseksi The Codestin avulla.

thecodest
Ohjelmistokehitys

Perimmäinen opas ulkoistamiseen Puolassa

Ulkoistamisen lisääntyminen Puolassa johtuu taloudellisesta, koulutuksellisesta ja teknologisesta kehityksestä, joka edistää tietotekniikan kasvua ja yritysystävällistä ilmapiiriä.

TheCodest
Yritys- ja skaalausratkaisut

Täydellinen opas IT-tarkastustyökaluihin ja -tekniikoihin

Tietotekniikan tarkastuksilla varmistetaan turvalliset, tehokkaat ja vaatimustenmukaiset järjestelmät. Lue lisää niiden merkityksestä lukemalla koko artikkeli.

Codest
Jakub Jakubowicz teknologiajohtaja ja toinen perustaja

Tilaa tietopankkimme ja pysy ajan tasalla IT-alan asiantuntemuksesta.

    Tietoa meistä

    The Codest - Kansainvälinen ohjelmistokehitysyritys, jolla on teknologiakeskuksia Puolassa.

    Yhdistynyt kuningaskunta - pääkonttori

    • Toimisto 303B, 182-184 High Street North E6 2JA
      Lontoo, Englanti

    Puola - Paikalliset teknologiakeskukset

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsova, Puola

      Codest

    • Etusivu
    • Tietoa meistä
    • Palvelut
    • Tapaustutkimukset
    • Tiedä miten
    • Työurat
    • Sanakirja

      Palvelut

    • Se neuvoa-antava
    • Ohjelmistokehitys
    • Backend-kehitys
    • Frontend-kehitys
    • Staff Augmentation
    • Backend-kehittäjät
    • Pilvi-insinöörit
    • Tietoinsinöörit
    • Muut
    • QA insinöörit

      Resurssit

    • Faktoja ja myyttejä yhteistyöstä ulkoisen ohjelmistokehityskumppanin kanssa
    • Yhdysvalloista Eurooppaan: Miksi amerikkalaiset startup-yritykset päättävät muuttaa Eurooppaan?
    • Tech Offshore -kehityskeskusten vertailu: Tech Offshore Eurooppa (Puola), ASEAN (Filippiinit), Euraasia (Turkki).
    • Mitkä ovat teknologiajohtajien ja tietohallintojohtajien tärkeimmät haasteet?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Verkkosivuston käyttöehdot

    Tekijänoikeus © 2025 by The Codest. Kaikki oikeudet pidätetään.

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