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 υπάρχει ήδη') } 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 }) }, } } })() Διεπαφή αναζήτησης ενεργών εγγραφών - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2020-06-03
Ανάπτυξη λογισμικού

Διεπαφή αναζήτησης ενεργού εγγραφής

Marta Polec

Η απόδοση είναι μία από τις πιο σημαντικές πτυχές που πρέπει να λαμβάνονται υπόψη κατά την ανάπτυξη εφαρμογών ιστού. Η ανάλυση του τρόπου άντλησης των δεδομένων από μια βάση δεδομένων είναι ένα καλό σημείο εκκίνησης κατά την αναζήτηση βελτιώσεων. Σε αυτό το άρθρο, θα βρείτε παραδείγματα για το πώς μπορείτε να βελτιώσετε την απόδοση με τη χρήση συγκεντρωτικών συναρτήσεων και το φιλτράρισμα δεδομένων σε επίπεδο βάσης δεδομένων.

Κάποιο πλαίσιο για να ξεκινήσουμε

Αυτό το άρθρο είναι εμπνευσμένο από ένα πραγματικό πρόβλημα που μου είχε ανατεθεί κάποτε. Η αντιμετώπισή του με δίδαξε πολλά, και το έχω ακόμα ως αναφορά στο μυαλό μου. Νομίζω ότι τα παραδείγματα είναι μια καλή πηγή μάθησης, μπορούν να διευκρινίσουν πολλά. Σε αυτό το άρθρο, θα ήθελα να μοιραστώ μαζί σας μερικά παραδείγματα χρήσης των μεθόδων αναζήτησης Active Record.

Προκειμένου να μην εισαγάγω λεπτομέρειες που αφορούν συγκεκριμένο τομέα, θα χρησιμοποιήσω ένα δείγμα εφαρμογής για μια βιβλιοθήκη για να παρουσιάσω παραδείγματα. Όλα είναι αρκετά απλά, όπως φαίνεται στο παρακάτω διάγραμμα. Έχουμε τέσσερις πίνακες: συγγραφείς, βιβλία, χρήστες και ενοικιάσεις. Ένας χρήστης μπορεί να δανειστεί πολλά βιβλία και ένα βιβλίο μπορεί να δανειστεί από πολλούς χρήστες, οπότε χρειαζόμαστε έναν πίνακα σύνδεσης για να μοντελοποιήσουμε τις σχέσεις πολλά προς πολλά. Στην περίπτωσή μας είναι ο πίνακας rentals. Εκεί αποθηκεύουμε επίσης κάποιες πρόσθετες πληροφορίες, οι οποίες είναι οι ημερομηνίες δανεισμού και επιστροφής. Ένας συγγραφέας μπορεί να έχει πολλά βιβλία αντιστοιχισμένα στο όνομά του. Ένα βιβλίο έχει επίσης ένα χαρακτηριστικό που ορίζει το είδος του.

Στατιστικά στοιχεία ανάγνωσης χρηστών

Το καθήκον ήταν να ετοιμάσουμε στατιστικά στοιχεία για έναν μεμονωμένο χρήστη, ώστε να μπορούμε να πούμε πόσα βιβλία από κάθε είδος δανείστηκαν. Η πρώτη μου σκέψη ήταν να αντλήσω όλα τα βιβλία που έχει δανειστεί ο χρήστης, να τα ομαδοποιήσω με βάση το είδος τους και στη συνέχεια να κάνω την αντιστοίχιση, έτσι ώστε σε κάθε είδος να αντιστοιχίζεται ένας αριθμός βιβλίων αντί για μια λίστα. Ακολουθεί αυτό που σκέφτηκα:

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

Αν και αυτή η προσέγγιση λειτουργεί και φαίνεται καθαρή, δεν χρησιμοποιεί όλες τις δυνατότητες που προσφέρουν οι μέθοδοι αναζήτησης Active Record. Χάρη σε αυτές, είμαστε σε θέση να φιλτράρουμε και να αθροίζουμε δεδομένα σε επίπεδο βάσης δεδομένων χωρίς να χρησιμοποιούμε απευθείας την ακατέργαστη SQL στο κωδικός. Η λειτουργία σε επίπεδο db αυξάνει επίσης την αποδοτικότητά μας.

Στο παραπάνω παράδειγμα, μπορούμε να χρησιμοποιήσουμε τη μέθοδο group αντί της ομάδας της Rubyμε τη μέθοδο. Θα εφαρμόσει την ΟΜΑΔΑBY στο ερώτημα tSQL. Επιπλέον, η μέθοδος αντιστοίχισης και μεγέθους μπορεί να αντικατασταθεί με μια συνάρτηση συνάθροισης αριθμού. Στο τέλος, μας μένει ένα ερώτημα που μοιάζει ως εξής:

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

Φαίνεται ακόμα πιο απλό!

Άλλα χρήσιμα παραδείγματα

Παρακάτω θα βρείτε μερικούς άλλους τρόπους χρήσης των μεθόδων αναζήτησης που θεωρώ ότι αξίζει να γνωρίζετε.

Πρόσκληση για ανενεργούς χρήστες

ΕΡΓΑΣΙΑ: Φιλτράρετε τους χρήστες που δεν έχουν δανειστεί ποτέ ένα βιβλίο ή το έκαναν πριν από περισσότερο από ένα χρόνο.

Θα μπορούσαμε να αντλήσουμε όλους τους χρήστες συμπεριλαμβάνοντας τα σχετικά ενοίκια και στη συνέχεια να τους φιλτράρουμε χρησιμοποιώντας τη μέθοδο select.

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

Αλλά, φυσικά, δεν είναι ανάγκη να τα μαζέψετε όλα. Χρησιμοποιώντας τις μεθόδους ερωτημάτων, μπορούμε να τα φιλτράρουμε σε επίπεδο db. Αρχικά, ας επιλέξουμε τους χρήστες που έχουν δανειστεί κάποια βιβλία τον τελευταίο χρόνο και στη συνέχεια ας τους αποκλείσουμε από την τελική επιλογή.

Έτσι θα μοιάζει το υποερώτημα:

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

Και τώρα, ας τα βάλουμε όλα μαζί:

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

Υποεκπροσωπούμενοι συγγραφείς

ΕΡΓΑΣΙΑ: Βρείτε συγγραφείς με ένα ή μηδέν δανεισμένα βιβλία

Το να το κάνετε με τη μέθοδο select είναι εξαιρετικά απλό, αλλά και πάλι - δεν υπάρχει ανάγκη να λειτουργήσετε σε ένα τόσο μεγάλο σύνολο δεδομένων, καθώς η db μπορεί να το φιλτράρει για εμάς:

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

Στη συνέχεια, το φιλτράρισμα συγγραφέων με μηδενικά βιβλία είναι γρήγορο και εύκολο:

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

Είναι σημαντικό να θυμάστε ένα πράγμα κατά τη χρήση των left_joins (και των outer joins γενικά). Εάν υπάρχουν εγγραφές στον αριστερό πίνακα (εδώ: συγγραφείς) που δεν έχουν αντίστοιχες εγγραφές στον δεξιό πίνακα (εδώ: βιβλία), τότε ως αποτέλεσμα οι στήλες του δεξιού πίνακα θα συμπληρωθούν με μηδενικές τιμές.

Καθώς χρειαζόμαστε επίσης συγγραφείς με ένα βιβλίο που έχει εκχωρηθεί στο σύστημα, υπάρχουν μερικές ακόμη λειτουργίες που πρέπει να γίνουν. Θα πρέπει να κάνουμε την ομαδοποίηση, την καταμέτρηση και την προσθήκη μιας συνθήκης. Ακολουθεί ο τρόπος με τον οποίο θα τα βάλουμε όλα μαζί:

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

Η συνθήκη έρχεται μετά τη συνάρτηση συνάθροισης, οπότε πρέπει να χρησιμοποιήσουμε τη ρήτρα HAVING αντί της ρήτρας WHERE για να την καθορίσουμε.

Οι μέθοδοι ερωτημάτων Active Record αξίζει να ελεγχθούν όταν σκέφτεστε την απόδοση της εφαρμογής. Μπορούν να απλοποιήσουν τον κώδικά σας και να τον κάνουν να λειτουργεί ταχύτερα. Ελπίζω ότι τα κοινά παραδείγματα θα σας βοηθήσουν να εξερευνήσετε τις δυνατότητες που προσφέρουν οι μέθοδοι ερωτημάτων.

Διαβάστε περισσότερα:

– Ώρα για μια νέα πραγματικότητα. Η εποχή της εξ αποστάσεως εργασίας ξεκίνησε πριν από ένα μήνα

– Πρέπει να χρησιμοποιήσετε τα κοινά πλαίσια JS στην εφαρμογή Rails; Το Stimulus.js μπορεί να είναι μια εναλλακτική λύση

– Ανάπτυξη εφαρμογών ιστού: Γιατί αξίζει να επιλέξετε την τεχνολογία Ruby on Rails;

Σχετικά άρθρα

Ανάπτυξη λογισμικού

Κατασκευάστε μελλοντικά ασφαλείς εφαρμογές Web: γνώσεις από την ομάδα εμπειρογνωμόνων του The Codest

Ανακαλύψτε πώς η The Codest υπερέχει στη δημιουργία κλιμακούμενων, διαδραστικών εφαρμογών ιστού με τεχνολογίες αιχμής, παρέχοντας απρόσκοπτη εμπειρία χρήστη σε όλες τις πλατφόρμες. Μάθετε πώς η τεχνογνωσία μας οδηγεί στον ψηφιακό μετασχηματισμό και την επιχειρηματική...

THECODEST
Ανάπτυξη λογισμικού

Top 10 εταιρείες ανάπτυξης λογισμικού με έδρα τη Λετονία

Μάθετε για τις κορυφαίες εταιρείες ανάπτυξης λογισμικού της Λετονίας και τις καινοτόμες λύσεις τους στο τελευταίο μας άρθρο. Ανακαλύψτε πώς αυτοί οι τεχνολογικοί ηγέτες μπορούν να βοηθήσουν στην ανύψωση της επιχείρησής σας.

thecodest
Λύσεις Enterprise & Scaleups

Βασικά στοιχεία ανάπτυξης λογισμικού Java: Α Guide to Outsourcing Successfully (Οδηγός για την επιτυχή εξωτερική ανάθεση)

Εξερευνήστε αυτόν τον βασικό οδηγό για την επιτυχή ανάπτυξη λογισμικού outsourcing Java για να αυξήσετε την αποδοτικότητα, να αποκτήσετε πρόσβαση στην τεχνογνωσία και να οδηγήσετε την επιτυχία των έργων με The Codest.

thecodest
Ανάπτυξη λογισμικού

Ο απόλυτος οδηγός για το Outsourcing στην Πολωνία

Η έξαρση της outsourcing στην Πολωνία οφείλεται στις οικονομικές, εκπαιδευτικές και τεχνολογικές εξελίξεις, που ευνοούν την ανάπτυξη της πληροφορικής και το φιλικό προς τις επιχειρήσεις κλίμα.

TheCodest
Λύσεις Enterprise & Scaleups

Ο πλήρης οδηγός εργαλείων και τεχνικών ελέγχου πληροφορικής

Οι έλεγχοι ΤΠ διασφαλίζουν ασφαλή, αποτελεσματικά και συμβατά συστήματα. Μάθετε περισσότερα για τη σημασία τους διαβάζοντας ολόκληρο το άρθρο.

The Codest
Jakub Jakubowicz CTO & Συνιδρυτής

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

    elGreek
    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 etEstonian elGreek