hdonoblepsias Δημοσ. 14 Δεκεμβρίου 2021 Δημοσ. 14 Δεκεμβρίου 2021 (επεξεργασμένο) Καλησπέρα. Επειδή είμαι λίγο ανίδεος ακόμα με πόρους και βελτιστοποίηση. i) Ήθελα να βάλω στο site μου (php/codeigniter), στην σελίδα settings που έχω φτιάξει, κάποιες παραμέτρους που θέλω (πχ. πόσες καταχωρήσεις να εμφανίζονται ανα σελίδα). Και μετά στο model που στέλνει τα δεδομένα να μπαίνει ένα limit από αυτό που έχω δηλώσει αντί να δηλώνω καρφωτά ένα νούμερο μέσα στο model. Δηλαδή θα φτιάξω μία function πχ article_numbers() που θα κάνει ένα select από την βάση και θα επιστρέφει την τιμή των αριθμών των άρθρων. Με λίγα λόγια δείτε τι εννοώ στους παρακάτω κώδικες. Εννοείται είναι πιο "πλούσιοι", με joins, where κλπ, απλά να καταλάβετε τι εννοώ το κάνω τόσο απλό. α) Το function που θα επιστρέφει την τιμή των αριθμών άρθρων ανα σελίδα (πολύ χονδρικά) function article_numbers(){ $ci =& get_instance(); $ci->load->database(); $ci->db->select('*'); $settings = $ci->db->get('settings'); $settingsresult = $settings->result(); return $settingsresult[0]->number_of_articles; } β) Το model που θα επιστρέφει τις καταχωρήσεις function listings(){ $this->db->select('*'); $this->db->limit(article_numbers()); $listings = $this->db->get('listings'); $listingsresult = $listings->result(); return listingsresult; } Ερωτήσεις: 1) Αυτό το function article_numbers() που λογικά θα τρέχει και κάθε φορά που τραβάει ένας χρήστης τα listings, καταναλώνει πολλούς πόρους ή είναι αμελλητέα η επιβάρυνση? 2) Αν αντί για select('*') βάζω αυτό που θέλω μόνο να τραβήξω στο συγκεκριμένο function πχ select('number_of_articles'), κερδίζω κάτι σε ταχύτητα ή δεν παίζει ρόλο? 3) Είναι πολύ προτιμότερο να φτιάξω ένα php που όλα αυτά που θέλω θα τα έχω σαν σταθερές και θα τα τραβάει από εκεί? Αλλά θα πρέπει να μπαίνω σε editor για να αλλάξω κάτι. --------------------- ii) Για μην ανοίγω νέο νήμα, με παρόμοιο τρόπο χρησιμοποιώ και σε άλλα σημεία τέτοιου είδους functions. Πχ σε μια λίστα με users θέλω να εμφανίσω δίπλα από το όνομα του μέλους, πόσες καταχωρήσεις έχει. Οπότε έχω φτιαξει μια function count_members_listings($userid) που μετράει τα listings κάθε μέλους. Ομως αυτό τρέχει σε κάθε λούπα του foreach. <?php foreach($users as $user){ echo 'name: '.$user->name.' listings: '.count_members_listings($user->id); }?> Επιβαρύνει πολύ κάτι τέτοιο το site? Επεξ/σία 14 Δεκεμβρίου 2021 από hdonoblepsias
t(o.ot) Δημοσ. 15 Δεκεμβρίου 2021 Δημοσ. 15 Δεκεμβρίου 2021 (επεξεργασμένο) 1. Γενικά τα db queries θεωρούνται βαριά και προσπαθούμε να τα κρατάμε στο ελάχιστο δυνατό. 2. Παίζει ρόλο το τί βάζεις στο σελέκτ, ειδικά σε βαριά records και αν είναι δυνατόν το ορίζουμε στα απολύτως απαραίτητα 3. Εφόσον δεν είναι τιμή που θα αλλάζει ανάλογα με τις τιμές κάποιου άλλου record (πχ με το χρήστη που κάνει το request), είναι πάντα προτιμώτερο να τα φορτώνεις από κάποιο αρχείο ii. Ναι επιβαρύνει γιατί χτυπάς τη βάση πολλαπλές φορές. Γράψ'το με ένα join στο query που φέρνει τους χρήστες καλύτερα. Επεξ/σία 15 Δεκεμβρίου 2021 από t(o.ot)
masteripper Δημοσ. 15 Δεκεμβρίου 2021 Δημοσ. 15 Δεκεμβρίου 2021 Συνήθως κανά 2 κιλά είναι αλλά εν τέλει στην σχάρα χάνεις πολύ..... Πέρα απο την πλάκα εξέτασε πόσο συχνά θα χρειαστείς αυτού του τύπου τις αλλαγές. Επειδή ανέφερες joins και υποθέτω subqueries κ.ο.κ υπάρχει περίπτωση να έχεις καθυστέρηση εξαιτίας του οπότε δες αν μπορείς να το τρέχεις σε τακτά χρονικά διαστήματα ώστε να ετοιμάζεις 1 προσωρινό πίνακα και να διαβάζεις αυτόν τον προσωρινό πίνακα..(αυτό θα είναι λογικά πιο γρήγορο)
k33theod Δημοσ. 15 Δεκεμβρίου 2021 Δημοσ. 15 Δεκεμβρίου 2021 Κοίτα αν θες λίγο τα έτοιμα που υπάρχουν μήπως σου κάνουν. Η λειτουργία που θες λέγεται pagination. Για codeigniter βρήκα αυτό. https://codeigniter.com/userguide3/libraries/pagination.html Ο τρόπος που χρησιμοποιείς είναι περίπλοκος οπότε μάλλον "λάθος". Για το ii που το κατάλαβα νομίζω καλύτερα 😃 ότι είπε ο @t(o.ot) . Ένα ερώτημα στη βάση.
WebDevGr Δημοσ. 15 Δεκεμβρίου 2021 Δημοσ. 15 Δεκεμβρίου 2021 Στο κομμάτι των settings αν τα δεδομένα τα αλλάζεις εσύ και όχι κάποιος χρήστης τότε καλύτερα να παίξεις με config file κι όχι με πίνακα στην βάση. https://codeigniter.com/userguide3/libraries/config.html Αν πάλι θέλεις να έχεις πίνακα για να αλλάζουν τα δεδομένα του τότε δες για query cache https://codeigniter.com/userguide3/database/caching.html
Papakaliati Δημοσ. 16 Δεκεμβρίου 2021 Δημοσ. 16 Δεκεμβρίου 2021 Οι databases απο μονες τους δεν ειναι αργες, και εχουνε απειρα features με σκοπο την μεγιστοποιηση των επιδοσεων τους. Επίσης δεν υπάρχει "είναι ένα sql query αργο"; Για ποια database μιλαμε; Εχουμε postgresql και cosmodb με εκατομμυρια entries και ειμαστε σε < 10-20ms στα queries μας. Προφανως ομως πρεπει να σκεφτεσαι τι κανεις. Και 3 tables με 100 rows το καθενα να εχεις, μπορεις να καταφερεις να φτιαξεις αργο query. Ειναι ολα τοσο γενικα...
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα