window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } 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 }) }, } } })() Schnittstelle für die Abfrage aktiver Datensätze - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2020-06-03
Software-Entwicklung

Schnittstelle für die Abfrage aktiver Datensätze

Marta Polec

Die Leistung ist einer der wichtigsten Aspekte, die bei der Entwicklung von Webanwendungen berücksichtigt werden müssen. Die Analyse der Art und Weise, wie die Daten aus einer Datenbank abgerufen werden, ist ein guter Ausgangspunkt für die Suche nach Verbesserungen. In diesem Artikel finden Sie Beispiele dafür, wie Sie die Leistung durch die Verwendung von Aggregatfunktionen und das Filtern von Daten auf Datenbankebene verbessern können.

Zunächst etwas Kontext

Dieser Artikel wurde von einem echten Problem inspiriert, mit dem ich einmal konfrontiert wurde. Der Umgang damit hat mich viel gelehrt, und ich habe es immer noch als Referenz im Kopf. Ich denke, Beispiele sind eine gute Lernquelle, sie können viel klären. In diesem Artikel möchte ich Ihnen einige Beispiele für die Verwendung der Active Record-Abfragemethoden vorstellen.

Um keine domänenspezifischen Details einzuführen, werde ich zur Veranschaulichung der Beispiele eine Beispielanwendung für eine Bibliothek verwenden. Es ist alles ziemlich einfach, wie das folgende Diagramm zeigt. Wir haben vier Tabellen: Autoren, Bücher, Benutzer und Ausleihen. Da ein Benutzer viele Bücher ausleihen kann und ein Buch von vielen Benutzern ausgeliehen werden kann, benötigen wir eine Verbindungstabelle, um die Beziehungen zwischen mehreren Benutzern zu modellieren. In unserem Fall ist das die Tabelle "Ausleihen". Wir speichern dort auch einige zusätzliche Informationen, nämlich die Daten der Ausleihe und der Rückgabe. Einem Autor können viele Bücher zugewiesen werden. Ein Buch hat auch ein Attribut, das sein Genre definiert.

Benutzer-Lesestatistiken

Die Aufgabe bestand darin, eine Statistik für einen einzelnen Benutzer zu erstellen, damit wir wissen, wie viele Bücher aus jedem Genre ausgeliehen wurden. Mein erster Gedanke war, alle Bücher, die vom Benutzer ausgeliehen wurden, zu holen, sie nach ihrem Genre zu gruppieren und dann die Zuordnung vorzunehmen, so dass jedem Genre eine Anzahl von Büchern anstelle einer Liste zugeordnet ist. Ich habe mir folgendes ausgedacht:

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

Dieser Ansatz funktioniert zwar und sieht sauber aus, aber er nutzt nicht alle Möglichkeiten, die Active Record-Abfragemethoden bieten. Dank ihnen sind wir in der Lage, Daten auf Datenbankebene zu filtern und zu aggregieren, ohne rohes SQL direkt in unserer Code. Die Arbeit auf db-Ebene erhöht auch unsere Effizienz.

Im obigen Beispiel können wir die group-Methode anstelle von Ruby's group verwendennach Methode. Es wird die GROUP angewendetBY-Klausel in die tSQL-Abfrage einfügen. Außerdem kann die Mapping- und Size-Methode durch eine Zählaggregationsfunktion ersetzt werden. Am Ende haben wir eine Abfrage, die wie folgt aussieht:

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

Es sieht noch einfacher aus!

Weitere nützliche Beispiele

Nachfolgend finden Sie einige weitere Möglichkeiten zur Verwendung der Abfragemethoden, die ich für wissenswert halte.

Einladung für inaktive Nutzer

AUFGABE: Filtern Sie Nutzer, die noch nie ein Buch ausgeliehen haben oder dies vor mehr als einem Jahr getan haben.

Wir könnten alle Benutzer abrufen, indem wir die zugehörigen Mietverträge einbeziehen und sie dann mit der Select-Methode filtern.

User.includes(:rentals).select do |user|
 benutzer.mietobjekte.leer? || benutzer.mietungen.keine? { |vermietung| vermietung.start_date >= Date.today - 1.year }
end 

Aber es ist natürlich nicht nötig, alles abzurufen. Mit Hilfe der Abfragemethoden können wir die Daten auf der Ebene der Datenbank herausfiltern. Lassen Sie uns zunächst die Benutzer auswählen, die im letzten Jahr einige Bücher ausgeliehen haben, und diese dann von der endgültigen Auswahl ausschließen.

So wird die Unterabfrage aussehen:

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

Und nun wollen wir alles zusammenfügen:

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

Unterrepräsentierte Autoren

AUFGABE: Autoren mit einem oder keinem ausgeliehenen Buch finden

Es mit der Select-Methode zu tun ist super einfach, aber wieder - es gibt keine Notwendigkeit, auf einem so großen Satz von Daten zu arbeiten, wie die DB kann es für uns filtern:

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

Dann ist das Filtern von Autoren, denen keine Bücher zugewiesen wurden, schnell und einfach:

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

Bei der Verwendung von Left_Joins (und Outer-Joins im Allgemeinen) ist eine Sache zu beachten. Wenn es Datensätze in der linken Tabelle (hier: Autoren) gibt, die keine entsprechenden Datensätze in der rechten Tabelle (hier: Bücher) haben, dann werden die Spalten der rechten Tabelle mit Nullwerten gefüllt.

Da wir auch Autoren benötigen, denen ein Buch im System zugewiesen ist, müssen wir noch einige weitere Operationen durchführen. Wir müssen die Gruppierung, die Zählung und das Hinzufügen einer Bedingung vornehmen. Hier sehen Sie, wie man das alles zusammenfügt:

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

Die Bedingung kommt nach der Aggregationsfunktion, daher müssen wir die HAVING-Klausel anstelle der WHERE-Klausel verwenden, um sie anzugeben.

Die Abfragemethoden von Active Record sind eine Überlegung wert, wenn es um die Leistung einer Anwendung geht. Sie können Ihren Code vereinfachen und schneller arbeiten lassen. Ich hoffe, dass die gemeinsamen Beispiele Ihnen dabei helfen, die Möglichkeiten zu erkunden, die die Abfragemethoden bieten.

Lesen Sie mehr:

– Zeit für eine neue Realität. Eine Ära der Fernarbeit hat vor einem Monat begonnen

– Müssen Sie die gängigen JS-Frameworks in Ihrer Rails-Anwendung verwenden? Stimulus.js kann eine Alternative sein

– Web-App-Entwicklung: Warum ist Ruby on Rails eine Technologie, für die es sich lohnt?

Ähnliche Artikel

Software-Entwicklung

Zukunftssichere Web-Apps bauen: Einblicke vom The Codest-Expertenteam

Entdecken Sie, wie sich The Codest bei der Erstellung skalierbarer, interaktiver Webanwendungen mit Spitzentechnologien auszeichnet, die nahtlose Benutzererfahrungen auf allen Plattformen bieten. Erfahren Sie, wie unsere Expertise die digitale Transformation und...

DAS SCHÖNSTE
Software-Entwicklung

Top 10 Softwareentwicklungsunternehmen in Lettland

Erfahren Sie in unserem neuesten Artikel mehr über die besten Softwareentwicklungsunternehmen Lettlands und ihre innovativen Lösungen. Entdecken Sie, wie diese Technologieführer Ihr Unternehmen voranbringen können.

thecodest
Enterprise & Scaleups Lösungen

Grundlagen der Java-Softwareentwicklung: Ein Leitfaden für erfolgreiches Outsourcing

Entdecken Sie diesen wichtigen Leitfaden zum erfolgreichen Outsourcing der Java-Softwareentwicklung, um die Effizienz zu steigern, auf Fachwissen zuzugreifen und den Projekterfolg mit The Codest voranzutreiben.

thecodest
Software-Entwicklung

Der ultimative Leitfaden für Outsourcing in Polen

Der Anstieg des Outsourcings in Polen wird durch wirtschaftliche, bildungspolitische und technologische Fortschritte angetrieben, die das IT-Wachstum und ein unternehmensfreundliches Klima fördern.

TheCodest
Enterprise & Scaleups Lösungen

Der vollständige Leitfaden für IT-Audit-Tools und -Techniken

IT-Audits gewährleisten sichere, effiziente und gesetzeskonforme Systeme. Erfahren Sie mehr über ihre Bedeutung, indem Sie den vollständigen Artikel lesen.

Der Codest
Jakub Jakubowicz CTO & Mitbegründer

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

    • Büro 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale Tech-Hubs

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

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