mike-intosh Δημοσ. 28 Μαρτίου 2009 Δημοσ. 28 Μαρτίου 2009 Καλησπέρα. Είναι γνωστό ότι με τις stored procedures εξοικονομείται χρόνος καθώς οι τελευταίες είναι compiled. Η ερώτησή μου είναι: Είναι αποδοτικότερη η χρήση των stored procedures με παραμέτρους από ότι η εκτέλεση SQL κώδικα και γιατί. (για κάθε παράμετρο δημιουργείται compiled κώδικας κατα την πρώτη εκτέλεση ; ) Ευχαριστώ προκαταβολικά.
alex2005 Δημοσ. 28 Μαρτίου 2009 Δημοσ. 28 Μαρτίου 2009 Υπόψιν ότι και οι stored procedures sql κώδικας είναι. Πάντως ναι είναι πολύ αποδοτικότερη η χρήση τους. Πρώτον γιατί είναι compiled,όπως ανέφερες, και δεύτερον γιατί τυπικά θα έχεις και κάποιο logic στην stored procedure. Οπότε είναι μία εναλλακτική από το να έχεις την λογική στην server side γλώσσα σου και να έχεις πολλές επικοινωνίες με την βάση. Αναφέρω ένα τυπικό παράδειγμα. Σκέψου πως μπορεί να θέλεις να διαγράψεις μία γραμμή από έναν πίνακα. Όμως αυτός ο πίνακας είναι συνδεδεμένος με άλλους πίνακες επίσης, και κατά συνέπεια πρέπει να διαγράψεις τα συνδεδεμένα δεδομένα με την αρχική γραμμή στους άλλους πίνακες επίσης. Τυπικά αυτό μπορείς να το κάνεις από τον php,asp.net,java (ή ότι χρησιμοποιείς τέλος πάντων) και να διαγράφεις τα δεδομένα από τους πίνακες. Αυτό απαιτεί πολλά query στην βάση δεδομένων που έρχονται με το απαραίτητο overhead. (χρόνος σύνδεσης, ερώτησης - απάντησης κτλ). Όταν λοιπόν αυτή η διαδικασία γίνει με stored proc γίνεται σαφώς πιο γρήγορα καθώς όλη η διαδικασία εκτελείται στην βάση δεδομένων και μάλιστα είναι και compiled. Υπόψιν πως η stored proc γίνεται compile όταν την φορτώνεις στην ΒΔ και όχι όταν εκτελείται για πρώτη φορά.
Maniakos Δημοσ. 28 Μαρτίου 2009 Δημοσ. 28 Μαρτίου 2009 Σε γενικές γραμμές θα συμφωνήσω ότι είναι αποδοτικότερες επειδή είναι κώδικας που βρίσκεται μέσα στην ίδια την βάση οπότε γλιτώνεις πράγματα όπως το network latency. Παρ' όλα αυτά υπάρχουνε αρκετά αρνητικά και περιπτώσεις που δεν πρέπει να χρησιμοποιούνται και καλό θα ήταν να είναι για πιο απλά πράγματα και όχι για πολύ πολύπλοκα queries. Αναφέρω μερικά σημαντικά αρνητικά: Δεν υπάρχουνε αξιόλογα debugging tools για stored code. Η SQL language για stored code είναι primitive σε σχέση με αυτή που παρέχουνε οι διάφορες server side γλώσσες. Σε περίπτωση αλλαγής του schema της βάσης, εκτός από το application θα πρέπει να αλλαχτεί και ο stored code κάτι το οποίο κάνει την ζωή μας πιο δύσκολη. Ποτέ μην έχετε stored code το οποίο αφορά encryption/decryption. Είναι security risk. Με το να υπάρχει αρκετός stored code όλο το load μεταφέρετε στην βάση κάτι το οποίο προκαλεί προβλήματα στο scaling της εφαρμογής και στο τέλος δημιουργεί μεγάλο κόστος όσον αφορά τα resources ενώ θα ήταν πολύ μικρότερο το κόστος αυτό για το application και τον web server. Κάποιο λάθος σε stored code μπορεί να ρίξει όλο τον server αφού η MySQL δεν σου δίνει τρόπο στο να ελέγχεις τα resources που γίνονται allocate από stored code. Κάθε σύνδεση στην βάση έχει το δικό της stored code plan cache. Τι σημαίνει αυτό; Ότι άμα πολλές συνδέσεις καλέσουν τον ίδιο stored code την ίδια στιγμή, αρκετά resources θα σπαταληθούν για να κάνουνε cache το ίδιο πράγμα πολλές φορές. Με stored code, το query profiling είναι πολύ πιο δύσκολο. Να βρίσκουμε δηλαδή πια queries προκαλούν bottleneck στην βάση για να τα βελτιώσουμε. Έχοντας λοιπόν υπόψιν και τα παραπάνω, θα ήμουν αρκετά προσεκτικός για το πόσα stored procedures θα επέλεγα να έχω και το πόσο πολύπλοκα θα ήταν. Δεν θέλω να φοβίσω, απλά, προσωπικά, μου αρέσει να έχω σχετικά απλά πράγματα μέσα στην βάση (όταν έχω) και όχι ολόκληρο το business logic του application μου, κάτι το οποίο θα πρέπει να αναρωτηθείς και εσύ για το που θες να βρίσκεται. Στην βάση ή στο κώδικα σου; Καμία τεχνική δεν είναι λάθος, το όλο θέμα αφορά καθαρά το πόσο βαραίνεις τον MySQL server οπότε ανάλογα με το τι site σκοπεύεις να φτιάξεις και πόσο traffic περιμένεις να έχει, κρίνε ανάλογα. Eπίσης, μιας και μιλάμε για stored routines, το παρακάτω link θα σας φανεί χρήσιμο: http://mysql-sr-lib.sourceforge.net/ Είναι μια συλλογή από general purpose MySQL 5.x stored routines που μπορείτε να χρησιμοποιήσετε.
StavrosD Δημοσ. 30 Μαρτίου 2009 Δημοσ. 30 Μαρτίου 2009 Αν έχεις όρεξη να ασχοληθείς και να το ψάξεις, τα stored procedures είναι σίγουρα πιο γρήγορα. Ιδιαίτερα στον MS SQL 2008, που υποστηρίζει CLR και με την βοήθεια του Visual Studio 2008 που υποστηρίζει και SQL debugging, μπορείς να κάνεις παπάδες.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.