Χρησιμοποιείτε δικό σας database layer?

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από korgr » 22 Ιούλ 2011 20:05

Με αφορμή την φήμη που κυκλοφόρησε σχετικά με την μελλοντική κατάργηση του mysql php extension, θεωρώ πως όλοι πλέον πρέπει σιγά σιγά να εγκαταλείπουμε την χρήση του από εδώ και πέρα.
Είχα την τύχη να δομήσω το model του Odyssey σε δικό του database layer οπότε με ένα απλό refactoring της $db class έλυσα το πρόβλημα και πλέον χρησιμοποιώ PDO.

Έτσι με ένα απλό overwrite έκανα εύκολα Update όλα τα sites μου που στηρίζονται στο Odyssey. Όλα τα υπόλοιπα αρχεία έμειναν όπως ήταν αφού για παράδειγμα για να κάνω ένα mysql record update χρησιμοποιούσα την $db->updateRecord() και συνεχίζω να την χρησιμοποιώ και με τα νέα δεδομένα.

Εσείς στις custom εφαρμογές σας χρησιμοποιείτε δικό σας database layer?

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από gvre » 22 Ιούλ 2011 20:22

Ναι. Παλιότερα χρησιμοποιούσα το adodb. Κάποια στιγμή έφτιαξα ένα δικό μου το οποίο δουλεύει όπως ακριβώς θέλω και είναι περίπου 4 φορές πιο γρήγορο από το adodb (σύμφωνα με μετρήσεις που είχα κάνει πριν 2-3 χρόνια).
Δε χρησιμοποιώ pdo αλλά το pgsql extension της php.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από pimpogio » 22 Ιούλ 2011 23:27

+1
για το PDO τα ελεγα οτι οι mysql_* functions ειναι παναρχαιες και δεν πρεπει να χρησιμοποιουνται
με λιγες δυνατοτητες και ειναι εκει μονο για τον προς τα πισω συμβατοτητα και οχι για νεους κωδικες..

+1
Οσο τωρα για την mysql μετα την εξαγορα απο την oracle δεν περιμενω προκοπη...
Η postgresql ειναι μπροστα σε λειτουργιες σε σημειο να ανταγωνιζετε λυσεις τυπου oracle.
εχει υλοποιημενα σχεδον ολα τα standards...

οποτε για τωρα ως καλυτερη λυση βλεπω τη χρηση postgresql + PDO

ενημερωτικα το debian 6 στην default εγκατασταση πλεον db server βαζει την postgresql και οχι την mysql.

Επισης γενικα οι σχεσιακες βασεις σε μεγαλο μερος web εφαρμογων ολο και αποδυναμώνονται λογω δυσκολιας χρησης και ερχονται καλυτερες λυσεις τοσο σε ευχρηστία οσο και σε αποδοση.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από korgr » 23 Ιούλ 2011 09:28

pimpogio είσαι εκτός θέματος.
Το θέμα μας είναι αν -ανεξάρτητα από τι βάση χρησιμοποιείς- κάνεις τις κλήσεις μέσω δικού σου layer

Άβαταρ μέλους
kostasxx
Δημοσιεύσεις: 56
Εγγραφή: 08 Δεκ 2010 21:56
Τοποθεσία: Αθήνα
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από kostasxx » 23 Ιούλ 2011 10:38

Πιο παλιά χρησιμοποιούσα δικό μου layer (υπήρχε η ανάγκη για χρήση της ίδιας εφαρμογής σε MySQL και MSSQL).

Τώρα χρησιμοποιώ Yii και κατ' επέκταση το δικό του layer.

Η ερώτηση είναι στατιστικού χαρακτήρα ?? :)
Αν δε κοιτάς εκέι που θες να πας... Θα πας εκεί που κοιτάς. Όταν μου το έλεγαν εγώ κοίταγα το ντουβάρι.
Web Design
http://www.stockatzidiko.gr / http://www.islandzakynthos.com/bookit

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από Apostolis_38 » 23 Ιούλ 2011 11:09

korgr, τι ακριβώς εννοείς λέγοντας δικό μας layer;
Είτε χρησιμοποιείς την mysql_connect, είτε την mysqli_connect, είτε pdo, είτε οτιδήποτε άλλο δεν "πατάς" στα "εργαλεία" που σου παρέχει η php;

Με έχεις μπερδέψει λιγάκι.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από korgr » 23 Ιούλ 2011 12:22

kostasxx έγραψε: Η ερώτηση είναι στατιστικού χαρακτήρα ?? :)
yeap :D


Αποστόλη είναι πολύ απλό.
Αν χρησιμοποιείς native τις εντολές των extensions, τότε όποιο αρχείο σου τις περιέχει, θα είναι δύσκολο να γίνει update αν κάποια στιγμή το extension καταργηθεί ή θελήσεις να αλλάξεις το database engine σου (πχ απο mySQL σε postgreSQL).

Αντίθετα αν χρησιμοποιείς ένα δικό σου layer μέσα από το οποίο τα αρχεία σου κάνουν κλήσεις στην εκάστοτε βάση, μπορείς πολύ εύκολα να κάνεις upgrade ή να αλλάξεις τύπο βάσης δεδομένων.

Ας υποθέσουμε σε ένα υπεραπλουστευμένο παράδειγμα πως δημιουργείς την δική σου class $db όπου μία μέθοδος από τις πολλές, είναι η $db->query($queryString)

Η μέθοδος αυτή θα μπορούσε να είναι με χρήση mysql extension:

Κώδικας: Επιλογή όλων

class db{
	function query($query){
		$result = mysql_query($query, $this->conn) or die("MYSQL ERROR: ".mysql_error()." - Error in Line ".__LINE__);
		return $result;	
	}
}
Ή αντίστοιχα για χρήση PDO θα μπορούσε να είναι:

Κώδικας: Επιλογή όλων

class db{
	function query($query){
		try {  
			$result = $this->conn->query($query);  
		}  
		catch(PDOException $e) {  
			$messages = new messages();
			$messages->addError("A Database error has been recorded");
			$messages->printErrorMessages();		
			file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);  
		}
		return $result;	
	}
}
Αντίστοιχα και για mysqli κλπ...

Τι κερδίζεις;
Και στις δύο περιπτώσεις όταν τα αρχεία σου εκτελούν ένα ερώτημα θα αναφέρονται πάντα με

Κώδικας: Επιλογή όλων

$db->query("select field from table where condition")
και με ένα απλό refactoring της $db class έχεις κάνει το transition σε άλλη βιβλιοθήκη db χωρίς να πειράξεις ούτε μια γραμμή κώδικα από τα υπόλοιπα php αρχεία σου :wink:

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από Apostolis_38 » 23 Ιούλ 2011 12:50

Ναι, ok.
Εγώ άλλο είχα καταλάβει με τη λέξη "δικό μας".

Πάντως νομίζω πως τις native εντολές, όπως λες, δύσκολα τις αποφεύγεις.
Οπότε εγώ είμαι μάλλον κάπου στη μέση.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από dva_dev » 23 Ιούλ 2011 13:17

http://dev.mysql.com/downloads/connecto ... /[quote]We have no plans to remove libmysql support from ext/mysql, ext/mysqli or PDO_MYSQL, which would break existing applications. We just add a new, superior alternative to our PHP offerings.[/quote]

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από korgr » 23 Ιούλ 2011 13:32

Apostolis_38 έγραψε:Ναι, ok.
Εγώ άλλο είχα καταλάβει με τη λέξη "δικό μας".

Πάντως νομίζω πως τις native εντολές, όπως λες, δύσκολα τις αποφεύγεις.
Οπότε εγώ είμαι μάλλον κάπου στη μέση.
Δεν σε κατάλαβα...
Τι εννοείς δεν τις αποφεύγεις?
Εγώ λέω να χρησιμοποιούνται μέσα στη δική μας class και όχι σε κάθε php αρχείο που έχει σχέση με την βάση δεδομένων.
Κάπου σε έχασα μάλλον :roll:

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από Rapid-eraser » 23 Ιούλ 2011 13:45

Δεν νομίζω ότι πρέπει να μας απασχολεί και ιδιαίτερα...
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από Apostolis_38 » 23 Ιούλ 2011 14:03

korgr, αν το δικό μας layer περιορίζεται στο mysql_query άντε και κανένα set names, τότε εντάξει, τα βάζεις όλα σε μια class και καθάρισες.
Πολλές φορές όμως χρειάζεσαι και ένα mysql_num_rows, last_insert_id κ.λ.π. κ.λ.π.
Το "κακό" είναι οτι δεν τα χρειάζεσαι πάντα και παντού.
Οπότε τι κάνεις; ή τα βάζεις στην class που λές ή τα ενσωματώνεις στον κώδικά σου όπου καί όταν χρειαστεί.
Δεν ξέρω ποιός από τους δύο τρόπους είναι πιο καλός μιας και με τον πρώτο επιβαρύνεται η κλάσση σου με κώδικα που περιμένει κάπου κάπως κάποτε να εκτελεστεί ενώ με τον δεύτερο υπάρχει όντως θέμα συντήρησης αν η εφαρμογή τείνει να είναι μεγάλη.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από Rapid-eraser » 23 Ιούλ 2011 14:12

Apostolis_38 υπάρχει στην php όσον αφορά το ΟΟ η αρχιτεκτονική για auto-load / lazy-load δυνατότητα, δεν είναι αυτό το πρόβλημα πιστεύω :)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από Apostolis_38 » 23 Ιούλ 2011 14:22

Μάλλον ακόμα δεν έχω καταλάβει τι εννοείτε λέγοντας δικό μας database layer.
Οτι μαζεύουμε όλες τις εντολές που χρησιμοποιούμε σε ένα φάκελο/class/function, ή ότι άλλο, και τις χρησιμοποιούμε απλώς καλώντας τες με τον ανάλογο τρόπο;
Η οτι καλούμε μια-δύο-τρείς συγκεκριμένες εντολές με μια class και από εκεί και πέρα συνεχίζουμε με τον "αναλόγως την περίσταση" τρόπο, είτε procedural είτε OO;

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Χρησιμοποιείτε δικό σας database layer?

Δημοσίευση από gvre » 23 Ιούλ 2011 14:28

Apostolis_38 έγραψε:Μάλλον ακόμα δεν έχω καταλάβει τι εννοείτε λέγοντας δικό μας database layer.
Κάτι σαν το adodb.
Προφανώς όταν μπεις σε αυτή τη διαδικασία φτιάχνεις κάτι ολοκληρωμένο και επεκτάσιμο έτσι ώστε αν αλλάξεις βάση δεδομένων να μη χρειαστεί να κάνεις refactoring στην db class.

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης