Σύγκριση MySQL και PostgreSQL. Σύγκριση MySQL και PostgreSQL Σύγκριση MySQL και PostgreSQL: ομοιότητες και διαφορές

Λόγω της ταχείας υποτίμησης του ρουβλίου, η αγορά ενός Microsoft SQL DBMS έχει γίνει πολύ ακριβή και για ορισμένες εταιρείες το κόστος αυτών των αδειών έχει καταστεί εντελώς δυσβάσταχτο. Επί του παρόντος, για να αναπτύξετε έναν διακομιστή Microsoft SQL για 20 χρήστες, πρέπει να αγοράσετε τις ακόλουθες άδειες χρήσης:

    1 άδεια λειτουργικού συστήματος (WinSvrStd 2012R2)

    20 άδειες για σύνδεση με τον διακομιστή (WinSvrCAL 2012)

    1 άδεια για διακομιστή DBMS (SQLSvrStd 2014)

    20 άδειες για σύνδεση στο DBMS (SQLCAL 2014)

Εκτιμώμενο κόστος ενός τέτοιου πακέτου 275.000 τρίψιμο,που είναι αρκετά ακριβό για μια εταιρεία με μόνο 20 άτομα. Αυτά τα κόστη μπορούν να αποφευχθούν εάν δημιουργήσετε έναν διακομιστή DBMS χρησιμοποιώντας δωρεάν λογισμικό. Εγκαταστήστε ένα λειτουργικό σύστημα Linux και μια δωρεάν έκδοση του DBMS - PostgreSQL. Σε έναν τέτοιο διακομιστή, μπορείτε εύκολα να αναπτύξετε έναν εταιρικό διακομιστή 1C, καθώς και άλλους ρόλους που μπορούν ενδεχομένως να συνδυαστούν με το ρόλο των βάσεων δεδομένων, για παράδειγμα διακομιστή Web ή αποθήκευση αρχείων.

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

Δοκιμή απόδοσης 1C:

Για να πραγματοποιήσουμε τη δοκιμή, χρησιμοποιήσαμε τον εξοπλισμό και το λογισμικό που αναφέρονται στον Πίνακα 1. Ο φυσικός διακομιστής και για τις δύο βάσεις ήταν ο ίδιος, μόνο το λογισμικό άλλαξε. Οι ρυθμίσεις και των δύο DBMS χρησιμοποιήθηκαν από προεπιλογή και δεν τις περιγράφουμε λεπτομερώς στο άρθρο. Το κιτ διανομής PostGreSQL με τις αντίστοιχες ενημερώσεις κώδικα ελήφθη από τον ιστότοπο της εταιρείας 1C, η έκδοση είναι η πιο πρόσφατη διαθέσιμη σε αυτόν τον ιστότοπο.

Πίνακας 1. Πάγκοι δοκιμής

Χαρακτηριστικά

Περίπτερο Νο. 1

Περίπτερο Νο 2

λειτουργικό σύστημα

CentOS 6

Windows Server 2012R2

PostgreSQL 9.3.3

Microsoft SQL Server 2012R2

ΕΠΕΞΕΡΓΑΣΤΗΣ

Intel Core i 5 3330 (3,0 Ghz)

ΕΜΒΟΛΟ

24 GB DDD 3 1333 Ghz

HDD

SSD 240 GB Intel


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

Δείτε τα αποτελέσματα παρακάτω, η διαφορά στις τιμές είναι μόνο 3%.

Για πληροφορίες:Το "Gilev test" είναι ένα δημοφιλές συνθετικό τεστ 1C που εκτελεί έναν αριθμό τυπικών λειτουργιών - όσο πιο γρήγορα εκτελείται η δοκιμή, τόσο υψηλότερη είναι η βαθμολογία. Η αξιολόγηση πραγματοποιείται σε συμβατικές μονάδες. Η βαθμολογία που προκύπτει μπορεί να συγκριθεί με την κλίμακα που επισυνάπτεται στο τεστ, η οποία θα δείξει πόσο υψηλή είναι η απόδοση του τρέχοντος συστήματος.

Εικόνα 1. Αποτέλεσμα δοκιμής Gilev. Βάση Νο. 2 DBMSΚυρία SQL


Εικόνα 2. Αποτέλεσμα δοκιμής Gilev. Σταντ Νο. 1 DBMSPostgreSQL


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

Για να γίνει αυτό, πήραμε μια πραγματική βάση εργασίας μιας από τις πιο βαριές διαμορφώσεις 1C, τα χαρακτηριστικά της βάσης υποδεικνύονται στον πίνακα Νο. 2.

Πίνακας 2. Χαρακτηριστικά βάσης δοκιμής


Μετρήθηκε ο χρόνος εκτέλεσης 7 τυπικών λειτουργιών με αντικείμενα στη βάση δεδομένων. Κάθε δοκιμή πραγματοποιήθηκε 10 φορές και ελήφθη ο μέσος όρος. Οι μετρήσεις πραγματοποιήθηκαν χρησιμοποιώντας έναν παχύ πελάτη μέσω τοπικού δικτύου. Το πρόγραμμα-πελάτης εγκαταστάθηκε σε έναν σταθμό εργασίας με Windows 7. Προσπαθήσαμε επίσης να εκτελέσουμε δοκιμές από έναν υπολογιστή-πελάτη εγκατεστημένο στο Ubuntu Linux, αλλά δεν λειτούργησε σταθερά και αποφασίστηκε να εκτελεστούν όλες οι δοκιμές μόνο από τον πελάτη στα Windows.

Πίνακας 3. ΑποτελέσματαAPDEX

Λειτουργία με κλειδί

Χρόνος εκτέλεσης σε δευτερόλεπτα

Απόκλιση

Περίπτερο Νο. 2 (MSSQL )

Περίπτερο Νο. 1

(Ελεύθερο λογισμικό)

Άνοιγμα εγγράφου

Παραγγελία πελάτη

Εκτέλεση εγγράφων

Παραγγελία πελάτη

Δημοσίευση νέου εγγράφου

Αντικείμενο εγγράφου: Παραγγελία πελάτη

Δημιουργήθηκε αναφορά

Ανάλυση Εσόδων Εξόδων

Δημιουργήθηκε αναφορά

Κατάσταση αποστολών εμπορευμάτων

Δημιουργήθηκε αναφορά

Κατάλογος εμπορευμάτων σε αποθήκες

Δημιουργήθηκε αναφορά

Διακανονισμοί με πελάτες


Κατά μέσο όρο, η πραγματική βάση δεδομένων μας όταν χρησιμοποιούσαμε το MSSQL λειτούργησε 45% πιο γρήγορα από ό,τι σε έναν πάγκο με δωρεάν λογισμικό. Σε ορισμένες δοκιμές το χάσμα ήταν πολύ σημαντικό, αλλά σε άλλες, για παράδειγμα, για τη διεξαγωγή ενός νέου εγγράφου ήταν μόνο 11%.

Συμπέρασμα:

    1Cστο MSSQL DBMS λειτουργεί περίπου 1,5 φορές πιο γρήγορα από ό,τι στο PostgreSQL. Αντίστοιχα, εάν είναι δυνατή η αγορά ή η ενοικίαση αδειών χρήσης MSSQL, είναι καλύτερο να το χρησιμοποιήσετε για υψηλότερη απόδοση. Για μικρές και ελαφριές βάσεις δεδομένων, μπορείτε να δοκιμάσετε να χρησιμοποιήσετε την έκδοση MSSQL Express. Δεν έχουμε πραγματοποιήσει δοκιμές με αυτό, επομένως μπορεί να εμφανιστεί ως προς την απόδοση είτε καλύτερη είτε χειρότερη από την PostgreSQL. Αυτή η έκδοση περιορίζεται στη χρήση 1 επεξεργαστή και 1 GB μνήμης RAM και επίσης δεν λειτουργεί με βάσεις δεδομένων μεγαλύτερες από 10 GB. Εάν η βάση δεδομένων μεγαλώσει σε αυτό το μέγεθος, τότε θα σταματήσει να λειτουργεί εντελώς, αλλά όπως δείχνει η πρακτική, εάν υπάρχουν 15-20 χρήστες στη βάση δεδομένων, τότε μπορείτε να εργαστείτε άνετα με μέγεθος βάσης δεδομένων 4-5 GB, τότε η βάση δεδομένων αρχίζει να επιβραδύνετε πολύ.

    Η αξιολόγηση του τεστ Gilev δείχνει μια εξαιρετικά ελαφριά υπεροχή του MSSQL, η οποία μας επιτρέπει να κάνουμε την υπόθεση ότι άλλες βάσεις δεδομένων 1C μπορούν να λειτουργήσουν τόσο στο PostgreSQL όσο και στο MSSQL, και πιθανώς πιο γρήγορα. Πριν επιλέξετε ένα DBMS, συνιστούμε να εκτελέσετε δοκιμές στη συγκεκριμένη βάση δεδομένων σας και να συγκρίνετε τα αποτελέσματα.

    Η χρήση του PostgreSQL DBMS για την ανάπτυξη 1C σε αυτό είναι μια αποδεκτή λύση σε συνθήκες περιορισμένου προϋπολογισμού. Η βάση δεδομένων δεν θα λειτουργεί τόσο γρήγορα όσο στο MSSQL, αλλά δεν χρειάζεται να πληρώσετε για άδειες.

Στα τέλη του 2017, πραγματοποιήσαμε νέες δοκιμές και τις δημοσιεύσαμε σε άλλο άρθρο.

Ένας άλλος τρόπος για να εξοικονομήσετε χρήματα όταν χρησιμοποιείτε το 1C είναι να νοικιάσετε έναν διακομιστή 1C.

Ολοκληρωση συστήματος. Συμβουλευτική

Απαιτείται ένα κλειδί στον διακομιστή για την εκκίνηση του 1C Server (ας τον ονομάσουμε 1C App).
Απαιτείται ένας διακομιστής 1C, ώστε η βάση δεδομένων να μην βασίζεται σε αρχεία, αλλά σε τρία επίπεδα.
Το Three-tier, γνωστό και ως three-level, είναι ένα μοντέλο αλληλεπίδρασης 1C Client<->Εφαρμογή 1C<->DBMS (MS SQL, DB2, Oracle, PostgreSQL)
Εκείνοι. Ο πελάτης, στην πραγματικότητα, δεν επικοινωνεί με τον διακομιστή DBMS, επικοινωνεί με τον διακομιστή 1C και αυτός, με τη σειρά του, επικοινωνεί με το DBMS.
Έτσι, μπορείτε να έχετε 2,3,5-25-125 διακομιστές DBMS και μόνο έναν διακομιστή 1C. Μόνο για κάθε βάση δεδομένων διακομιστή 1C θα πρέπει να υποδείξετε σε ποιο διακομιστή είναι εγκατεστημένη η συγκεκριμένη βάση δεδομένων και τι είδους διακομιστής είναι (τύπος DBMS).

Ένα κλειδί σε έναν διακομιστή 1C κοστίζει ~ 42 χιλιάδες ρούβλια. για την έκδοση 32-bit και ~74 tr. για 64-bit. Ταυτόχρονα, το κλειδί για την έκδοση 64 bit μπορεί να χρησιμοποιηθεί για διακομιστή 32 bit (το αντίστροφο, φυσικά, δεν είναι δυνατό).
Ως κλειδί για τον διακομιστή, θεωρώ πιο λογικό να χρησιμοποιώ κλειδί υλικού.

Παρεμπιπτόντως, σχετικά με την αδειοδότηση:

- φθηνό σχολείο
Ναι, υπάρχει μια έκδοση παράδοσης 1C με ήδη περιλαμβανόμενη άδεια για MS SQL. Αλλά:
ΕΝΑ.Για να λάβετε μια τέτοια παράδοση πρέπει να αγοράσετε ένα σετ: διακομιστής 1C + MS SQL + τουλάχιστον 5 άδειες πελάτη (διορθώστε με αν κάνω λάθος, είναι πιθανό να χρειαστεί να αγοράσετε τουλάχιστον 10 πελάτες)
το οποίο, στην περίπτωση ήδη αγορασμένων κλειδιών 1C, μειώνει σημαντικά την κερδοφορία μιας τέτοιας απόκτησης.
σι.Σύμφωνα με τους όρους της άδειας, αυτό το κλαψούρισμα μπορεί να χρησιμοποιηθεί ΜΟΝΟ για 1 Σκι.
Εκείνοι. Φαίνεται ότι μπορείτε να αναπτύξετε μια άλλη βάση δεδομένων σε αυτήν, αλλά αυτό θα μετατρέψει αμέσως την άδεια MS SQL σε μη αδειοδοτημένη.

- σωστή αδειοδότηση -
Σύμφωνα με τους κανόνες, η αδειοδότηση MS SQL θα πρέπει να πραγματοποιείται ως άδεια διακομιστή + άδειες για συνδέσεις πελατών.
Όπου ένας "πελάτης" θεωρείται ότι δεν είναι η εφαρμογή 1C με τη μία σύνδεσή της (μπορεί να υπάρχουν περισσότερες συνδέσεις - ανάλογα με το πόσες διεργασίες ρυθμίζετε στον διακομιστή), αλλά κάθε χρήστης 1C + 1 άδεια για την εφαρμογή 1C

Ή αδειοδότηση βάσει επεξεργαστών διακομιστών.
Επιπλέον, μπορεί να κάνω λάθος, αλλά στην περίπτωση του MS SQL 2005 - 2008, πρέπει να αδειοδοτήσετε την υποδοχή (δηλαδή, τον φυσικό επεξεργαστή, εάν ο αριθμός των πυρήνων δεν υπερβαίνει τους 4), τότε στην περίπτωση του 2012, Η άδεια χρήσης πηγαίνει στους πυρήνες του επεξεργαστή σε τιμή = τιμή άδειας * αριθμός πυρήνων/4.
Επιπλέον, η ORACLE χρησιμοποιεί αυτό το σύστημα αδειοδότησης για μεγάλο χρονικό διάστημα (υπάρχει πίνακας συντελεστών ανάλογα με τον συνολικό αριθμό των πυρήνων διακομιστή),
επειδή Τα σύγχρονα εργαλεία εικονικοποίησης επιτρέπουν σε τουλάχιστον 4, τουλάχιστον 64 φυσικούς επεξεργαστές 4-6-8 πυρήνων να παρουσιάζονται σε μια εικονική μηχανή ως 1 φυσικός με +100500 πυρήνες (που ορισμένοι έχουν χρησιμοποιήσει με επιτυχία)

- ευρεία αδειοδότηση -
Πολύ συχνά, αγοράζεται μόνο μια άδεια διακομιστή (~28.000 ρούβλια) και δαπανάται πλήρως για την αδειοδότηση συνδέσεων πελατών.
Σε ορισμένες περιπτώσεις, για παράδειγμα στην περίπτωση του Επιχειρηματική Συμφωνία, αυτό είναι αποδεκτό (καθώς μια άδεια χρήσης για λειτουργικό σύστημα πελάτη εντός της άδειας παρέχει αυτόματα άδεια χρήσης για σύνδεση διακομιστή).
Αλλά στις περισσότερες περιπτώσεις παραβιάζει την αδειοδότηση. Αν και γκρινιάζει και δεν βρίζει.

  • PostgreSQL
  • Εν αναμονή της έκθεσής μου στο συνέδριο PGCONF.RUSSIA 2015, θα μοιραστώ κάποιες παρατηρήσεις σχετικά με τις σημαντικές διαφορές μεταξύ του MySQL και του PostgreSQL DBMS. Αυτό το υλικό θα είναι χρήσιμο σε όλους όσους δεν είναι πλέον ικανοποιημένοι με τις δυνατότητες και τις δυνατότητες της MySQL, καθώς και σε όσους κάνουν τα πρώτα τους βήματα στο Postgres. Φυσικά, αυτή η ανάρτηση δεν πρέπει να θεωρηθεί ως μια εξαντλητική λίστα διαφορών, αλλά θα είναι αρκετά επαρκής για να ληφθεί μια απόφαση υπέρ του ενός ή του άλλου DBMS.

    Αντιγραφή

    Το θέμα της έκθεσής μου είναι «Ασύγχρονη αναπαραγωγή χωρίς λογοκρισία ή γιατί η PostgreSQL θα κατακτήσει τον κόσμο» και η αναπαραγωγή είναι ένα από τα πιο επώδυνα θέματα για πολυάσχολα έργα που χρησιμοποιούν MySQL. Υπάρχουν πολλά προβλήματα - σωστή λειτουργία, σταθερότητα, απόδοση - και με την πρώτη ματιά φαίνονται άσχετα μεταξύ τους. Αν κοιτάξουμε το ιστορικό πλαίσιο, βγάζουμε ένα ενδιαφέρον συμπέρασμα: η αναπαραγωγή της MySQL έχει τόσα προβλήματα επειδή δεν είχε μελετηθεί, και το σημείο χωρίς επιστροφή ήταν η υποστήριξη για τη μηχανή αποθήκευσης (μηχανές plug-in) χωρίς απαντήσεις στις ερωτήσεις «Τι να κάνω με το κούτσουρο;» και «πώς διαφορετικοί κινητήρες αποθήκευσης μπορούν να συμμετέχουν στην αναπαραγωγή». Το 2004, στη λίστα αλληλογραφίας PostgreSQL, ένας χρήστης προσπάθησε να «βρει» τη μηχανή αποθήκευσης στον πηγαίο κώδικα της PostgreSQL και εξεπλάγη πολύ που δεν ήταν εκεί. Κατά τη διάρκεια της συζήτησης, κάποιος πρότεινε την προσθήκη αυτής της δυνατότητας στην PostgreSQL και ένας από τους προγραμματιστές απάντησε: «Παιδιά, αν το κάνουμε αυτό, θα έχουμε προβλήματα με την αναπαραγωγή και τις συναλλαγές μεταξύ των μηχανών».
    Το πρόβλημα είναι ότι πολλά συστήματα διαχείρισης αποθήκευσης... συχνά κάνουν τα δικά τους WAL και PITR. Μερικοί κάνουν τη δική τους διαχείριση buffer, κλείδωμα και διαχείριση αναπαραγωγής/φόρτωσης. Έτσι, όπως λέτε, είναι δύσκολο να πούμε πού πρέπει να είναι μια διεπαφή
    αφηρημένος.
    σύνδεσμο προς αυτήν την επιστολή στη λίστα αλληλογραφίας postgresql

    Έχουν περάσει περισσότερα από 10 χρόνια και τι βλέπουμε; Η MySQL έχει ενοχλητικά προβλήματα με τις συναλλαγές μεταξύ πινάκων σε διαφορετικές μηχανές αποθήκευσης και η MySQL έχει προβλήματα με την αναπαραγωγή. Μέσα σε αυτά τα δέκα χρόνια, η PostgreSQL έχει προσθέσει τύπους δεδομένων και ευρετήρια plug-in, και έχει επίσης αναπαραγωγή - δηλαδή, το πλεονέκτημα της MySQL έχει ισοπεδωθεί, ενώ τα αρχιτεκτονικά προβλήματα της MySQL παραμένουν και παρεμβαίνουν στη ζωή. Η MySQL 5.7 προσπάθησε να λύσει το πρόβλημα απόδοσης αναπαραγωγής παραλληλίζοντάς το. Δεδομένου ότι το έργο στην εργασία είναι πολύ ευαίσθητο στην απόδοση αναπαραγωγής λόγω της κλίμακας του, προσπάθησα να δοκιμάσω αν έγινε καλύτερο. Βρήκα ότι η παράλληλη αναπαραγωγή στο 5.7 είναι πιο αργή από την αναπαραγωγή με ένα σπείρωμα στο 5.5, και μόνο σε ορισμένες περιπτώσεις - περίπου το ίδιο. Εάν χρησιμοποιείτε αυτήν τη στιγμή την MySQL 5.5 και θέλετε να κάνετε αναβάθμιση σε πιο πρόσφατη έκδοση, σημειώστε ότι η μετεγκατάσταση δεν είναι δυνατή για έργα με υψηλή φόρτωση, καθώς η αναπαραγωγή απλώς δεν θα συνεχιστεί.

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

    Οι ακριβείς λόγοι για αυτήν την παλινδρόμηση απόδοσης είναι άγνωστοι. Υπήρχαν πολλές υποθέσεις - για παράδειγμα, ο Christian Nelsen, ένας από τους προγραμματιστές της MariaDB, έγραψε στο blog του ότι μπορεί να υπάρχουν προβλήματα με το σχήμα απόδοσης και το συγχρονισμό νημάτων. Εξαιτίας αυτού, υπάρχει μια παλινδρόμηση 40%, η οποία είναι ορατή σε τακτικές δοκιμές. Οι προγραμματιστές της Oracle το διαψεύδουν, και μάλιστα με έπεισαν ότι προφανώς δεν υπάρχει, βλέπω κάποιο άλλο πρόβλημα (και πόσα από αυτά υπάρχουν;).

    Στην αναπαραγωγή MySQL, τα προβλήματα με τη μηχανή αποθήκευσης επιδεινώνονται από το επιλεγμένο επίπεδο αναπαραγωγής - είναι λογικά, ενώ στην PostgreSQL είναι φυσικά. Κατ 'αρχήν, η λογική αναπαραγωγή έχει τα πλεονεκτήματά της, σας επιτρέπει να κάνετε πιο ενδιαφέροντα πράγματα, θα το αναφέρω επίσης στην έκθεση. Αλλά η PostgreSQL, ακόμη και στο πλαίσιο της φυσικής της αναπαραγωγής, μειώνει ήδη όλα αυτά τα πλεονεκτήματα σε τίποτα. Με άλλα λόγια, σχεδόν όλα όσα υπάρχουν στη MySQL μπορούν ήδη να γίνουν στην PostgreSQL (ή θα είναι δυνατά στο εγγύς μέλλον).

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

    Στην MySQL η κατάσταση είναι διαφορετική. Έχουμε ένα ξεχωριστό αρχείο καταγραφής InnoDB και ένα αρχείο καταγραφής αναπαραγωγής και πρέπει να δεσμευτούμε και τα δύο. Και αυτή είναι μια δέσμευση δύο φάσεων μεταξύ περιοδικών, η οποία εξ ορισμού είναι αργή. Δηλαδή, δεν μπορούμε απλά να πούμε ότι επαναλαμβάνουμε μια συναλλαγή από το αρχείο καταγραφής του InnoDB - πρέπει να καταλάβουμε τι είδους αίτημα είναι και να το εκτελέσουμε ξανά. Ακόμα κι αν αυτό είναι λογική αναπαραγωγή, σε επίπεδο γραμμής, τότε αυτές οι γραμμές πρέπει να αναζητηθούν στο ευρετήριο. Και όχι μόνο πρέπει να κάνετε πολλή δουλειά για να εκτελέσετε το ερώτημα, αλλά θα γραφτεί ξανά στο αρχείο καταγραφής του InnoDB στο αντίγραφο, το οποίο σαφώς δεν είναι καλό για απόδοση.

    Στην PostgreSQL, με αυτή την έννοια, η αρχιτεκτονική είναι πολύ πιο προσεκτική και υλοποιείται καλύτερα. Πρόσφατα ανακοίνωσε μια δυνατότητα που ονομάζεται Λογική Αποκωδικοποίηση - η οποία σας επιτρέπει να κάνετε κάθε είδους ενδιαφέροντα πράγματα που είναι πολύ δύσκολο να κάνετε εντός των ορίων ενός φυσικού περιοδικού. Στην PostgreSQL, αυτό είναι ένα πρόσθετο στην κορυφή, η λογική αποκωδικοποίηση σάς επιτρέπει να εργάζεστε με ένα φυσικό αρχείο καταγραφής σαν να ήταν λογικό. Είναι αυτή η λειτουργικότητα που σύντομα θα αφαιρέσει όλα τα πλεονεκτήματα της αναπαραγωγής MySQL, εκτός ίσως από το μέγεθος καταγραφής - η αναπαραγωγή MySQL που βασίζεται σε δηλώσεις θα κερδίσει - αλλά η αναπαραγωγή MySQL που βασίζεται σε δηλώσεις έχει εντελώς άγρια ​​προβλήματα στα πιο απροσδόκητα μέρη και δεν θα έπρεπε θεωρείται καλή λύση (για όλα αυτά θα μιλήσω και στην έκθεση).

    Επιπλέον, υπάρχει αναπαραγωγή σκανδάλης για το PostgreSQL - αυτό είναι το Tungsten, το οποίο σας επιτρέπει να κάνετε το ίδιο πράγμα. Η αναπαραγωγή της σκανδάλης λειτουργεί ως εξής: ορίζονται οι κανόνες ενεργοποίησης, γεμίζουν πίνακες ή γράφουν αρχεία, το αποτέλεσμα αποστέλλεται στο αντίγραφο και εφαρμόζεται εκεί. Μέσω Tungsten, απ' όσο ξέρω, μεταναστεύουν από τη MySQL στην PostgreSQL και αντίστροφα. Στη MySQL, η λογική αναπαραγωγή λειτουργεί απευθείας σε επίπεδο κινητήρα και δεν είναι πλέον δυνατό να γίνει με άλλο τρόπο.

    Τεκμηρίωση

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

    Για παράδειγμα, η εταιρεία Percona απογειώθηκε: έτρεξε το MySQL Performance Blog και σε αυτό το blog υπήρχαν πολλά άρθρα που συζητούσαν ορισμένες πτυχές της χρήσης της MySQL. Αυτό έφερε τεράστια δημοτικότητα, έφερε πελάτες σε συμβουλευτικές υπηρεσίες και μας επέτρεψε να προσελκύσουμε πόρους για να ξεκινήσουμε την ανάπτυξη του δικού μας πιρουνιού Percona-Server. Η ύπαρξη και η δημοτικότητα του MySQL Performance Blog αποδεικνύει ότι η επίσημη τεκμηρίωση απλά δεν αρκεί.

    Η PostgreSQL έχει στην πραγματικότητα όλες τις απαντήσεις στην τεκμηρίωσή της. Από την άλλη πλευρά, έχω ακούσει πολλές επικρίσεις όταν συγκρίνω την τεκμηρίωση της PostgreSQL με την «ενηλικιωμένη» Oracle. Αλλά αυτός είναι στην πραγματικότητα ένας πολύ σημαντικός δείκτης. Κανείς δεν προσπαθεί να συγκρίνει τη MySQL με την Oracle για ενήλικες - αυτό θα ήταν αστείο και παράλογο - αλλά η PostgreSQL έχει ήδη αρχίσει να συγκρίνεται αρκετά σοβαρά, η κοινότητα PostgreSQL ακούει αυτήν την κριτική και εργάζεται για τη βελτίωση του προϊόντος. Αυτό υποδηλώνει ότι στις δυνατότητες και τις επιδόσεις του αρχίζει να ανταγωνίζεται ένα τόσο ισχυρό σύστημα όπως το Oracle, το οποίο χρησιμοποιείται από παρόχους κινητής τηλεφωνίας και τράπεζες, ενώ η MySQL παραμένει στη θέση των ιστοσελίδων. Και γιγαντιαία έργα που έχουν εξελιχθεί σε μεγάλο όγκο δεδομένων και χρήστες κατακρεουργούν τη MySQL με ένα μεγάλο κουτάλι, αντιμετωπίζοντας συνεχώς τους περιορισμούς και τα αρχιτεκτονικά της προβλήματα που δεν μπορούν να διορθωθούν ξοδεύοντας εύλογη ποσότητα προσπάθειας και χρόνου.

    Ένα παράδειγμα τέτοιων μεγάλων έργων στο PostgreSQL είναι το 1C: Το PostgreSQL έρχεται ως επιλογή αντί του Microsoft SQL και το Microsoft SQL είναι πραγματικά ένα φανταστικό DBMS, ένα από τα πιο ισχυρά. Η PostgreSQL μπορεί να αντικαταστήσει το MS SQL και προσπαθώντας να το αντικαταστήσει με MySQL... ας χαμηλώσουμε την αυλαία του οίκτου σε αυτή τη σκηνή, όπως έγραψε ο Mark Twain.

    Πρότυπα

    Το PostgreSQL συμμορφώνεται με τα SQL-92, SQL-98, SQL-2003 (όλα τα εύλογα μέρη του έχουν υλοποιηθεί) και ήδη εργάζεται σε SQL-2011. Αυτό είναι πολύ δροσερό. Συγκριτικά, η MySQL δεν υποστηρίζει καν SQL-92. Κάποιοι θα πουν ότι στη MySQL ένας τέτοιος στόχος απλώς δεν τέθηκε από τους προγραμματιστές. Αλλά πρέπει να καταλάβετε ότι η διαφορά μεταξύ των εκδόσεων του προτύπου δεν είναι μικρές αλλαγές - αυτές είναι νέες λειτουργίες. Δηλαδή, τη στιγμή που η MySQL είπε: «Δεν θα ακολουθήσουμε το πρότυπο», όχι μόνο εισήγαγαν κάποιες μικρές διαφορές που έκαναν δύσκολη την υποστήριξη της MySQL, αλλά έκλειναν και την πόρτα στην υλοποίηση πολλών απαραίτητων και σημαντικών λειτουργιών. Δεν υπάρχει ακόμα σωστός βελτιστοποιητής. Αυτό που ονομάζεται βελτιστοποίηση εκεί ονομάζεται "parser" συν κανονικοποίηση στην PostgreSQL. Στη MySQL, αυτό είναι απλώς ένα σχέδιο εκτέλεσης ερωτημάτων, χωρίς διαχωρισμό. Και η MySQL δεν θα έρθει να υποστηρίξει πρότυπα πολύ σύντομα, αφού το βάρος της συμβατότητας προς τα πίσω τα βαραίνει. Ναι, το θέλουν, αλλά σε πέντε χρόνια, ίσως έχουν κάτι. Η PostgreSQL έχει ήδη τα πάντα.

    Απόδοση και διοικητική πολυπλοκότητα

    Από άποψη εσύ απλάΗ σύγκριση διαχείρισης δεν είναι υπέρ της PostgreSQL. Η διαχείριση της MySQL είναι πολύ πιο εύκολη. Και όχι επειδή από αυτή την άποψη είναι καλύτερα μελετημένο, αλλά απλά ξέρει πώς να κάνει πολύ λιγότερα. Κατά συνέπεια, είναι ευκολότερο να το διαμορφώσετε.

    Η MySQL έχει πρόβλημα με πολύπλοκα ερωτήματα. Για παράδειγμα, η MySQL δεν ξέρει πώς να χαμηλώσει μια ομάδα σε ξεχωριστά τμήματα της ένωσης όλων. Η διαφορά μεταξύ των δύο ερωτημάτων - στο παράδειγμά μας, η ομαδοποίηση κατά μεμονωμένους πίνακες και η ένωση όλων στην κορυφή λειτούργησε 15 φορές πιο γρήγορα από την ένωση όλων και στη συνέχεια την ομαδοποίηση, αν και το εργαλείο βελτιστοποίησης πρέπει να φέρει και τα δύο ερωτήματα στο ίδιο, αποτελεσματικό σχέδιο εκτέλεσης ερωτημάτων. Θα πρέπει να δημιουργήσουμε τέτοια αιτήματα με μη αυτόματο τρόπο - δηλαδή, να σπαταλήσουμε τον χρόνο των προγραμματιστών για το τι πρέπει να κάνει η βάση δεδομένων.

    Η «απλότητα» της MySQL προκύπτει, όπως φαίνεται παραπάνω, από εξαιρετικά φτωχές δυνατότητες - η MySQL απλώς λειτουργεί χειρότερα και απαιτεί περισσότερο χρόνο και προσπάθεια κατά την ανάπτυξη. Αντίθετα, η PostrgreSQL έχει ιστογράμματα και έναν κανονικό βελτιστοποιητή και θα εκτελεί τέτοια ερωτήματα αποτελεσματικά. Αλλά αν υπάρχουν ιστογράμματα, τότε υπάρχουν οι ρυθμίσεις τους - τουλάχιστον μέγεθος κάδου. Πρέπει να γνωρίζετε τις ρυθμίσεις και να τις αλλάξετε σε ορισμένες περιπτώσεις - επομένως, πρέπει να καταλάβετε τι είναι αυτή η ρύθμιση, σε τι είναι υπεύθυνη, να μπορείτε να αναγνωρίσετε τέτοιες καταστάσεις και να δείτε πώς να επιλέξετε τις βέλτιστες παραμέτρους.

    Περιστασιακά συμβαίνει ότι η ικανότητα του PostrgreSQL μπορεί να εμποδίσει αντί να βοηθήσει. Το 95% των φορών όλα λειτουργούν καλά - καλύτερα από τη MySQL - αλλά ένα ανόητο ερώτημα εκτελείται πολύ πιο αργά. Ή όλα λειτουργούν καλά και, στη συνέχεια, ξαφνικά (από τη σκοπιά του χρήστη) καθώς το έργο μεγαλώνει, ορισμένα ερωτήματα άρχισαν να λειτουργούν άσχημα (υπήρχαν περισσότερα δεδομένα, άρχισε να επιλέγεται ένα διαφορετικό σχέδιο εκτέλεσης ερωτημάτων). Πιθανότατα, για να το διορθώσετε, απλώς εκτελέστε ανάλυση ή τροποποιήστε λίγο τις ρυθμίσεις. Αλλά πρέπει να ξέρετε τι να κάνετε και πώς να το κάνετε. Τουλάχιστον, πρέπει να διαβάσετε την τεκμηρίωση της PostgreSQL για αυτό το θέμα, αλλά για κάποιο λόγο δεν τους αρέσει να διαβάζουν τεκμηρίωση. Ίσως επειδή βοηθάει ελάχιστα στη MySQL; :)

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

    Τι πρέπει λοιπόν να επιλέξετε;

    Για να αποφασίσετε μεταξύ MySQL και PostgreSQL για ένα συγκεκριμένο έργο, πρέπει πρώτα να απαντήσετε σε άλλες ερωτήσεις.

    Πρώτον, τι εμπειρία έχει η ομάδα; Εάν ολόκληρη η ομάδα έχει 10 χρόνια εμπειρίας στην εργασία με τη MySQL και χρειάζεται να ξεκινήσει να λειτουργεί όσο το δυνατόν γρηγορότερα, τότε δεν είναι γεγονός ότι αξίζει να αλλάξετε ένα οικείο εργαλείο σε ένα άγνωστο. Αλλά αν οι προθεσμίες δεν είναι κρίσιμες, τότε αξίζει να δοκιμάσετε το PostgreSQL.

    Δεύτερον, δεν πρέπει να ξεχνάμε τα λειτουργικά προβλήματα. Εάν δεν έχετε ένα έργο με υψηλή φόρτωση, τότε από άποψη απόδοσης δεν υπάρχει διαφορά μεταξύ αυτών των δύο DBMS. Αλλά η PostgreSQL έχει ένα άλλο σημαντικό πλεονέκτημα: είναι πιο αυστηρή, κάνει περισσότερους ελέγχους για εσάς, σας δίνει λιγότερες ευκαιρίες να κάνετε λάθη και αυτό είναι ένα τεράστιο πλεονέκτημα μακροπρόθεσμα. Για παράδειγμα, στη MySQL πρέπει να γράψετε τα δικά σας εργαλεία για να επαληθεύσετε τη συνήθη αναφορική ακεραιότητα της βάσης δεδομένων. Και ακόμη και με αυτό μπορεί να υπάρχουν προβλήματα. Υπό αυτή την έννοια, το PostgreSQL είναι ένα πιο ισχυρό, πιο ευέλικτο εργαλείο και είναι πιο ευχάριστο να αναπτύσσεται σε αυτό. Αλλά αυτό εξαρτάται σε μεγάλο βαθμό από την εμπειρία του προγραμματιστή.

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

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

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

    Οι βάσεις δεδομένων έχουν σχεδιαστεί για δομημένη αποθήκευση και γρήγορη πρόσβαση σε διάφορα δεδομένα. Κάθε βάση δεδομένων, εκτός από τα ίδια τα δεδομένα, πρέπει να έχει συγκεκριμένο μοντέλο λειτουργίας σύμφωνα με το οποίο θα γίνεται η επεξεργασία των δεδομένων. Για τη διαχείριση βάσεων δεδομένων, χρησιμοποιούνται DBMS ή συστήματα διαχείρισης βάσεων δεδομένων, όπως τα προγράμματα MySQL και Postgresql.

    Τα σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων επιτρέπουν την τοποθέτηση δεδομένων σε πίνακες συνδέοντας σειρές από διαφορετικούς πίνακες και έτσι συνδέοντας διαφορετικά, λογικά συνδυασμένα δεδομένα. Για να μπορέσετε να αποθηκεύσετε δεδομένα, πρέπει να δημιουργήσετε πίνακες συγκεκριμένου μεγέθους και να καθορίσετε έναν τύπο δεδομένων για κάθε στήλη. Οι στήλες αντιπροσωπεύουν πεδία δεδομένων και τα ίδια τα δεδομένα τοποθετούνται σε σειρές. Και τα δύο συστήματα διαχείρισης βάσεων δεδομένων, MySQL έναντι Postgresql, είναι σχεσιακά. Στη συνέχεια θα εξετάσουμε με περισσότερες λεπτομέρειες πώς διαφέρουν και τα δύο προγράμματα. Τώρα ας προχωρήσουμε σε μια πιο λεπτομερή εξέταση.

    Διήγημα

    MySQL

    Η ανάπτυξη της MySQL ξεκίνησε τη δεκαετία του '90. Η πρώτη εσωτερική έκδοση της βάσης δεδομένων πραγματοποιήθηκε το 1995. Κατά τη διάρκεια αυτής της περιόδου, πολλές εταιρείες ανέπτυξαν το πρόγραμμα. Η ανάπτυξη ξεκίνησε από τη σουηδική εταιρεία MySQL AB, η οποία εξαγοράστηκε από τη Sun Microsystems, η οποία περιήλθε η ίδια στην ιδιοκτησία της Oracle. Αυτή τη στιγμή, από το 2010, η Oracle το αναπτύσσει.

    Postgresql

    Η ανάπτυξη του Postrgresql ξεκίνησε το 1986 στο Πανεπιστήμιο της Καλιφόρνια στο Μπέρκλεϋ. Η ανάπτυξη διήρκεσε σχεδόν οκτώ χρόνια, στη συνέχεια το έργο χωρίστηκε σε δύο μέρη: την εμπορική βάση δεδομένων IIlustra και το εντελώς δωρεάν έργο Postrgesql, το οποίο αναπτύσσεται από ενθουσιώδεις.

    Αποθήκευση δεδομένων

    MySQL

    Η MySQL είναι μια σχεσιακή βάση δεδομένων που χρησιμοποιούνται για την αποθήκευση δεδομένων σε πίνακες, αλλά η εργασία με τους κινητήρες είναι κρυμμένη στο ίδιο το σύστημα. Ο κινητήρας δεν επηρεάζει τη σύνταξη των αιτημάτων και την εκτέλεσή τους. Οι κύριοι κινητήρες που υποστηρίζονται είναι οι MyISAM, InnoDB, MEMORY, Berkeley DB. Διαφέρουν στον τρόπο εγγραφής των δεδομένων στο δίσκο, καθώς και στις μεθόδους ανάγνωσής τους.

    Postgresql

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

    Πρότυπο SQL

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

    MySQL

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

    Postgresql

    Το Postgresql είναι ένα έργο ανοιχτού κώδικα, αναπτύσσεται από μια ομάδα ενθουσιωδών και οι προγραμματιστές προσπαθούν να συμμορφωθούν με το πρότυπο SQL όσο το δυνατόν περισσότερο και να εφαρμόσουν όλα τα πιο πρόσφατα πρότυπα. Όλα αυτά όμως έρχονται σε βάρος της απλότητας. Το Postgresql είναι πολύ περίπλοκο και γι' αυτό δεν είναι τόσο δημοφιλές όσο η MySQL.

    Δυνατότητες επεξεργασίας

    Άλλες διαφορές μεταξύ postgresql και mysql προκύπτουν από την προηγούμενη παράγραφο: δυνατότητες και περιορισμοί επεξεργασίας δεδομένων. Φυσικά, η συμμόρφωση με νεότερα πρότυπα φέρνει νεότερες δυνατότητες.

    MySQL

    Κατά την εκτέλεση ενός αιτήματος, η MySQL φορτώνει ολόκληρη την απόκριση διακομιστή στη μνήμη του πελάτη για μεγάλες ποσότητες δεδομένων, αυτό μπορεί να μην είναι πολύ βολικό. Βασικά, το Postgresql είναι ανώτερο από το Mysql όσον αφορά τις λειτουργίες, θα δούμε ποιες θα ακολουθήσουν.

    Postgresql

    Το Postgresql υποστηρίζει τη χρήση δρομέων για πλοήγηση στα δεδομένα που λαμβάνονται. Λαμβάνετε μόνο έναν δείκτη, ολόκληρη η απάντηση αποθηκεύεται στη μνήμη του διακομιστή βάσης δεδομένων. Αυτός ο δείκτης μπορεί να αποθηκευτεί μεταξύ των συνεδριών. Υποστηρίζει κτίρια ευρετηρίων για πολλές στήλες πίνακα ταυτόχρονα. Επιπλέον, τα ευρετήρια μπορούν να είναι διαφόρων τύπων εκτός από κατακερματισμό και b-tree, τα GiST και SP-GiST είναι διαθέσιμα για εργασία με πόλεις, GIN για αναζήτηση κειμένου, BRIN και Bloom.

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

    Εκτέλεση

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

    MySQL

    Στις περισσότερες περιπτώσεις, ένας πίνακας InnoDB χρησιμοποιείται για την οργάνωση της εργασίας με μια βάση δεδομένων στη MySQL, αυτός ο πίνακας είναι ένα δέντρο B με ευρετήρια. Τα ευρετήρια σάς επιτρέπουν να ανακτάτε δεδομένα από το δίσκο πολύ γρήγορα και απαιτούν λιγότερες λειτουργίες δίσκου. Αλλά η σάρωση ενός δέντρου απαιτεί την εύρεση δύο ευρετηρίων, και αυτό είναι ήδη αργό. Όλα αυτά σημαίνουν ότι η MySQL θα είναι ταχύτερη από την Postgresql μόνο όταν χρησιμοποιείται πρωτεύον κλειδί.

    Postgresql

    Όλες οι πληροφορίες κεφαλίδας των πινάκων Postgresql βρίσκονται στη μνήμη RAM. Δεν μπορείτε να δημιουργήσετε έναν πίνακα που δεν έχει μνήμη. Οι εγγραφές στον πίνακα ταξινομούνται κατά ευρετήριο, ώστε να μπορείτε να τις ανακτήσετε πολύ γρήγορα. Για μεγαλύτερη ευκολία, μπορείτε να εφαρμόσετε πολλαπλά ευρετήρια σε έναν πίνακα.

    Γενικά, η PostgreSQL είναι ταχύτερη, με εξαίρεση τη χρήση πρωτευόντων κλειδιών. Ας δούμε μερικά τεστ με διαφορετικές λειτουργίες:


    Τύποι δεδομένων

    Ένα από τα σημαντικότερα σημεία και των δύο βάσεων δεδομένων είναι οι υποστηριζόμενοι τύποι δεδομένων που μπορείτε να χρησιμοποιήσετε. Δεδομένου ότι και οι δύο λύσεις προσπαθούν να ταιριάζουν με τη σύνταξη SQL, έχουν παρόμοια σύνολα, αλλά εξακολουθούν να διαφέρουν κατά κάποιο τρόπο.

    MySQL

    Η MySQL υποστηρίζει τους ακόλουθους τύπους δεδομένων:

    • TINYINT: πολύ μικρός ακέραιος.;
    • ΜΙΚΡΟ:μικρό σύνολο?
    • MEDIUMINT:μεσαίου μεγέθους ολόκληρο?
    • INT:το σύνολο είναι κανονικό μέγεθος?
    • ΜΕΓΑΛΟ:μεγάλο σύνολο?
    • ΦΛΟΤΕΡ:Υπογεγραμμένος αριθμός κινητής υποδιαστολής απλής ακρίβειας.
    • ΔΙΠΛΗ, ΔΙΠΛΗ ΑΚΡΙΒΕΙΑ, ΠΡΑΓΜΑΤΙΚΟ:υπογεγραμμένος αριθμός κινητής υποδιαστολής διπλής ακρίβειας
    • ΔΕΚΑΔΙΚΟ, ΑΡΙΘΜΗΤΙΚΟ:υπογεγραμμένος αριθμός κινητής υποδιαστολής·
    • ΗΜΕΡΟΜΗΝΙΑ:ημερομηνία της?
      ΗΜΕΡΟΜΗΝΙΑ ΩΡΑ:συνδυασμός ημερομηνίας και ώρας·
    • TIMESTAMP:χρονική σήμανση?
    • ΧΡΟΝΟΣ:χρόνος;
      ΕΤΟΣ:έτος σε μορφή ΕΕΕ ή ΕΕΕΕ·
    • ΑΠΑΝΘΡΑΚΩΝΩ: συμβολοσειρά σταθερού μεγέθους, με δεξιά επένδυση με κενά στο μέγιστο μήκος.
    • ΒΑΡΧΑΡ:συμβολοσειρά μεταβλητού μήκους.
    • TINYBLOB, TINYTEXT:δυαδικά δεδομένα ή δεδομένα κειμένου με μέγιστο μήκος 255 χαρακτήρες.
    • BLOB, ΚΕΙΜΕΝΟ: δυαδικά δεδομένα ή δεδομένα κειμένου με μέγιστο μήκος 65535 χαρακτήρες.
    • MEDIUMBLOB, MEDUIUMTEXT:κείμενο ή δυαδικά δεδομένα·
    • LONGBLOB, LONGTEXT:κείμενο ή δυαδικά δεδομένα μέγιστο μήκος 4294967295 χαρακτήρων.
    • ΑΡΙΘΜΟΣ:απαρίθμηση;
    • ΣΕΙΡΑ:πλήθη.

    Postgresql

    Οι τύποι πεδίων που υποστηρίζονται στο Postgresql είναι αρκετά διαφορετικοί, αλλά σας επιτρέπουν να καταγράψετε ακριβώς τα ίδια δεδομένα:

    • bigint:Υπογεγραμμένος ακέραιος αριθμός 8 byte.
    • μεγάλη σειρά: ακέραιος αριθμός 8 byte που αυξάνεται αυτόματα.
    • κομμάτι:δυαδική συμβολοσειρά σταθερού μήκους.
    • λίγο ποικίλλει:δυαδική συμβολοσειρά μεταβλητού μήκους.
    • boolean:σημαία;
    • κουτί:ορθογώνιο σε ένα επίπεδο?
    • ψηφιόλεξη: δυαδικά δεδομένα;
    • χαρακτήρας που ποικίλλει:συμβολοσειρά χαρακτήρων σταθερού μήκους.
    • χαρακτήρας:
    • cidr:Διεύθυνση δικτύου IPv4 ή IPv6.
    • κύκλος:κύκλος σε ένα αεροπλάνο.
    • ημερομηνία: ημερολογιακή ημερομηνία;
    • διπλή ακρίβεια:αριθμός κινητής υποδιαστολής διπλής ακρίβειας.
    • inet:Διεύθυνση Διαδικτύου IPv4 ή IPv6.
    • ακέραιος αριθμός: υπογεγραμμένος ακέραιος αριθμός 4 byte.
    • διάστημα:περίοδος;
    • γραμμή:μια άπειρη ευθεία σε ένα επίπεδο.
    • lseg:ένα τμήμα σε ένα επίπεδο?
    • macaddr:Διεύθυνση MAC;
    • χρήματα:νομισματική αξία;
    • μονοπάτι:γεωμετρική διαδρομή σε ένα επίπεδο?
    • σημείο:γεωμετρικό σημείο σε ένα επίπεδο.
    • πολύγωνο:πολύγωνο σε ένα επίπεδο?
    • πραγματικός:Ενιαίος αριθμός κινητής υποδιαστολής ακριβείας.
    • μικρός:ακέραιος αριθμός δύο byte.
    • κατα συρροη:αυτόματα αυξημένος ακέραιος αριθμός τεσσάρων bit.
    • κείμενο:συμβολοσειρά χαρακτήρων μεταβλητού μήκους.
    • χρόνος: Times of Day?
    • χρονική σήμανση:ημερομηνία και ώρα;
    • tsquery: ερώτημα αναζήτησης κειμένου;
    • tsvector:έγγραφο αναζήτησης κειμένου.
    • uuid: μοναδικό αναγνωριστικό;
    • xml:Δεδομένα XML.

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

    Ανάπτυξη

    Και τα δύο έργα είναι ανοιχτού κώδικα, αλλά αναπτύσσονται διαφορετικά. Δεν αρέσει σε όλους η ανάπτυξη της MySQL. Και εδώ είναι που μια σύγκριση mysql και postgresql δίνει πολλές διαφορές.

    MySQL

    Η βάση δεδομένων MySQL αναπτύσσεται από την Oracle και υπάρχουν φήμες ότι η εταιρεία σκοπεύει να επιβραδύνει την ανάπτυξη του κινητήρα. Δημιουργήθηκαν πολλά forks του έργου, συμπεριλαμβανομένου ενός πιρουνιού MariaDB από τον προγραμματιστή της αρχικής MySQL. Ωστόσο, η ανάπτυξη παραμένει αργή.

    Postgresql

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

    συμπεράσματα

    Σε αυτό το άρθρο, συγκρίναμε το mysql και το postgresql, εξετάσαμε τις κύριες διαφορές μεταξύ των δύο συστημάτων διαχείρισης βάσεων δεδομένων και προσπαθήσαμε να καταλάβουμε ποιο είναι καλύτερο, το postgresql ή το mysql. Γενικά το Postgresql είναι το καλύτερο από άποψη δυνατοτήτων, αλλά είναι πολύπλοκο και δεν μπορεί να χρησιμοποιηθεί παντού. Η MySQL είναι απλούστερη, αλλά δεν υποστηρίζει κάποιες ενδιαφέρουσες λειτουργίες. Ποια βάση δεδομένων θα επιλέξετε για το έργο σας; Γιατί αυτή; Γράψτε στα σχόλια!

    Για να ολοκληρώσετε το βίντεο που περιγράφει τις δυνατότητες και τις προοπτικές της Postgresql:

    Σειρά περιεχομένου:

    1. Ιστορικό ανάπτυξης της MySQL και της PostgreSQL

    Η ιστορία της MySQL ξεκινά το 1979, στις απαρχές της υπήρχε μια μικρή εταιρεία με επικεφαλής τον Monty Widenius. Το 1996 εμφανίστηκε η πρώτη κυκλοφορία του 3.11 για το Solaris με δημόσια άδεια. Στη συνέχεια, η MySQL μεταφέρθηκε σε άλλα λειτουργικά συστήματα και εμφανίστηκε μια ειδική εμπορική άδεια. Το 2000, μετά την προσθήκη μιας διεπαφής παρόμοιας με το Berkeley DB, η βάση δεδομένων έγινε συναλλακτική. Η αναπαραγωγή προστέθηκε περίπου την ίδια περίοδο. Το 2001, η έκδοση 4.0 πρόσθεσε τη μηχανή InnoDB στο υπάρχον MyISAM, με αποτέλεσμα την προσωρινή αποθήκευση και αυξημένη απόδοση. Το 2004 κυκλοφόρησε η έκδοση 4.1, η οποία εισήγαγε υποερωτήματα, μερική ευρετηρίαση για το MyISAM και το Unicode. Στην έκδοση 5.0 του 2005, εμφανίστηκαν αποθηκευμένες διαδικασίες, δρομείς, ενεργοποιητές και προβολές. Η MySQL αναπτύσσει εμπορικές τάσεις: το 2009, η MySQL έγινε σήμα κατατεθέν της Oracle.

    Η ιστορία της Postgres ξεκίνησε το 1977 με τη βάση δεδομένων Ingress.

    Το 1986, μετονομάστηκε σε PostgreSQL στο Πανεπιστήμιο του Μπέρκλεϋ της Καλιφόρνια.

    Το 1995, η Postgres έγινε μια ανοιχτή βάση δεδομένων. Εμφανίστηκε διαδραστικό psql.

    Το 1996, το Postgres95 μετονομάστηκε σε PostgreSQL έκδοση 6.0.

    Η Postgres έχει αρκετές εκατοντάδες προγραμματιστές σε όλο τον κόσμο.

    2. Αρχιτεκτονική MySQL και PostgreSQL

    PostgreSQL– ένας ενοποιημένος διακομιστής βάσης δεδομένων με έναν ενιαίο κινητήρα – μηχανή αποθήκευσης. Η Postgres χρησιμοποιεί ένα μοντέλο πελάτη-διακομιστή.

    Για κάθε πελάτη, δημιουργείται μια νέα διεργασία (όχι ένα νήμα!) στον διακομιστή. Για να εργαστεί με τέτοιες διαδικασίες πελάτη, ο διακομιστής χρησιμοποιεί σηματοφόρους.

    Το αίτημα πελάτη περνά από τα ακόλουθα στάδια.

    1. Συνδέω-συωδεομαι.
    2. Ανάλυση: ελέγχεται η ορθότητα του αιτήματος και δημιουργείται ένα δέντρο ερωτημάτων. Ο αναλυτής βασίζεται στα βασικά βοηθητικά προγράμματα του Unix yacc και lex.
    3. Επανεγγραφή: λαμβάνεται ένα δέντρο ερωτήματος και ελέγχεται η παρουσία κανόνων σε αυτό, οι οποίοι βρίσκονται στους καταλόγους του συστήματος. Κάθε φορά που το ερώτημα χρήστη ξαναγράφεται σε ένα ερώτημα που έχει πρόσβαση στους πίνακες της βάσης δεδομένων.
    4. Optimizer: για κάθε αίτημα δημιουργείται ένα σχέδιο ερωτήματος, το οποίο μεταβιβάζεται στον εκτελεστή. Το θέμα του σχεδίου είναι ότι περνά από όλες τις πιθανές επιλογές για την απόκτηση του αποτελέσματος (είτε χρήση ευρετηρίων, συμμετεχόντων κ.λπ.) και επιλέγει την ταχύτερη επιλογή.
    5. Εκτέλεση ερωτήματος: ο εκτελεστής διασχίζει αναδρομικά το δέντρο και λαμβάνει το αποτέλεσμα, χρησιμοποιώντας ταξινόμηση, ενώσεις κ.λπ., και επιστρέφει σειρές. Το Postgres είναι μια αντικειμενοσχεσιακή βάση δεδομένων, κάθε πίνακας σε αυτήν αντιπροσωπεύει μια κλάση και η κληρονομικότητα υλοποιείται μεταξύ πινάκων. Εφαρμόστηκαν τα πρότυπα SQL92 και SQL99.

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

    MySQLέχει δύο επίπεδα - ένα εξωτερικό στρώμα sql και ένα εσωτερικό σύνολο κινητήρων, εκ των οποίων ο κινητήρας InnoDb χρησιμοποιείται συχνότερα, καθώς υποστηρίζει πλήρως το ACID.

    Εφαρμοσμένο πρότυπο SQL92.

    Από αρθρωτή άποψη, ο κώδικας MySQL μπορεί να χωριστεί στις ακόλουθες ενότητες.

    1. Αρχικοποίηση διακομιστή.
    2. Διαχειριστής σύνδεσης.
    3. Διαχειριστής ροής.
    4. Χειριστής εντολών.
    5. Αυθεντικοποίηση.
    6. Αναλυτής.
    7. Βελτιστοποιητής.
    8. Υπεύθυνος τραπεζιού.
    9. Κινητήρες (MyISAM, InnoDB, MEMORY, Berkeley DB).
    10. Ξύλευση.
    11. Αντιγραφή.
    12. API δικτύου.
    13. Kernel API.

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

    Όταν ένας πελάτης συνδέεται στη βάση δεδομένων, ο έλεγχος μεταφέρεται στον διαχειριστή νημάτων, ο οποίος δημιουργεί ένα νήμα (όχι μια διαδικασία!) για τον υπολογιστή-πελάτη και ελέγχεται η αυθεντικότητά του.

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

    Ο πιο σημαντικός κώδικας βρίσκεται στο αρχείο sql/mysqld.cc. Περιέχει βασικές λειτουργίες που δεν έχουν αλλάξει από την έκδοση 3.22: init_common_variables () init_thread_environment () init_server_components () grant_init () // sql/sql_acl.cc init_slave () // sql/slave.cc get_options handle_one_connection() check_connection() acl_check_host() // sql/sql_acl.cc create_random_string() // sql/password.cc check_user() // sql/sql_parse.cc mysql_parse. ::store_query() // sql/sql_cache.cc JOIN::optimize() // sql/sql_select.cc open_table() // sql/sql_base.cc mysql_update() // sql/sql_sqtlable(//cc) sql/sql_table.cc

    Η κεφαλίδα sql/sql_class.h ορίζει τις βασικές κλάσεις: Query_arena, Statement, Security_context, Open_tables_state classes, THD. Ένα αντικείμενο της κλάσης THD είναι ένας περιγραφέας νήματος και αποτελεί όρισμα σε μεγάλο αριθμό συναρτήσεων.

    3. Σύγκριση MySQL και PostgreSQL: ομοιότητες και διαφορές

    Πρότυπο ACID

    Το πρότυπο ACID βασίζεται στην ατομικότητα, την ακεραιότητα, την απομόνωση και την αξιοπιστία. Αυτό το μοντέλο χρησιμοποιείται για την εγγύηση της ακεραιότητας των δεδομένων. Αυτό υλοποιείται με βάση τις συναλλαγές. Η PostgreSQL είναι πλήρως συμβατή με ACID. Για να υποστηρίξετε πλήρως το ACID στη MySQL, πρέπει να ορίσετε default-storage-engine=innodb στη διαμόρφωση.

    Εκτέλεση

    Οι βάσεις δεδομένων συχνά βελτιστοποιούνται με βάση το περιβάλλον στο οποίο λειτουργούν. Και οι δύο βάσεις έχουν διαφορετικές τεχνολογίες για τη βελτίωση της απόδοσης. Ιστορικά, η MySQL αναπτύχθηκε με γνώμονα την ταχύτητα, ενώ η PostgreSQL σχεδιάστηκε από την αρχή για να είναι εξαιρετικά προσαρμόσιμη και συμβατή με τα πρότυπα. Η PostgreSQL έχει μια σειρά από ρυθμίσεις που αυξάνουν την ταχύτητα πρόσβασης:

    • μερικοί δείκτες.
    • συμπίεση δεδομένων?
    • εκχώρηση μνήμης?
    • βελτιωμένη κρυφή μνήμη.

    Η MySQL έχει μερική υποστήριξη για μερικούς ευρετήρια στο InnoDB. Αν πάρετε τη μηχανή MySQL ISAM, αποδεικνύεται ότι είναι πιο γρήγορο σε επίπεδες ερωτήσεις, ενώ δεν υπάρχουν αποκλεισμοί σε ένθετα, υποστήριξη συναλλαγών, ξένα κλειδιά.

    Συμπίεση

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

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

    Όσον αφορά την απόδοση πολλών επεξεργαστών, η PostgreSQL έχει ένα πλεονέκτημα έναντι της MySQL. Ακόμη και οι ίδιοι οι προγραμματιστές της MySQL παραδέχονται ότι ο κινητήρας τους δεν είναι τόσο καλός από αυτή την άποψη.

    Τύποι δεδομένων

    MySQL: χρησιμοποιεί τύπους TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB για την αποθήκευση δυαδικών δεδομένων, τα οποία διαφέρουν σε μέγεθος (έως 4 GB).

    Χαρακτήρας: τέσσερις τύποι - TINYTEXT, TEXT, MEDIEUMTEXT, LONGTEXT.

    PostgreSQL: Υποστηρίζει τη μηχανή δεδομένων χρήστη με εντολή CREATE TYPE, τύπου BOOLEAN, γεωμετρικούς τύπους.

    Χαρακτήρας: TEXT (περιορισμός – μέγιστο μέγεθος σειράς).

    Για την αποθήκευση δυαδικών δεδομένων, υπάρχει ένας τύπος BLOB που αποθηκεύεται στο σύστημα αρχείων. Οι στήλες πίνακα μπορούν να οριστούν ως ένας πολυδιάστατος πίνακας μεταβλητού μήκους. Αντικειμενική-σχεσιακή επέκταση: Η δομή ενός πίνακα μπορεί να κληρονομηθεί από έναν άλλο πίνακα.

    Αποθηκευμένες διαδικασίες

    Τόσο η PostgreSQL όσο και η MySQL υποστηρίζουν αποθηκευμένες διαδικασίες. Η PostgreSQL ακολουθεί το πρότυπο Oracle PL/SQL, η MySQL ακολουθεί το πρότυπο IBM DB2. Η MySQL υποστηρίζει επέκταση SQL για εγγραφή συναρτήσεων σε C/C++ από την έκδοση 5.1. PostgreSQL: PL/PGSQL, PL/TCL, PL/Perl, SQL, C για εγγραφή αποθηκευμένων διαδικασιών.

    Κλειδιά

    Τόσο η PostgreSQL όσο και η MySQL υποστηρίζουν μοναδικό πρωτεύον κλειδί και ξένο κλειδί. Η MySQL δεν υποστηρίζει περιορισμούς ελέγχου, καθώς και τα δευτερεύοντα κλειδιά υλοποιούνται εν μέρει. PostgreSQL: πλήρης υλοποίηση και υποστήριξη για ON DELETE CASCADE και ON UPDATE CASCADE.

    Πυροδοτήσεις

    MySQL: στοιχειώδης υποστήριξη. PostgreSQL: δηλωτικοί κανόνες ενεργοποίησης: SELECT, INSERT, DELETE, UPDATE, ΑΝΤΙ ΓΙΑ. διαδικαστικοί παράγοντες ενεργοποίησης: CONSTRAINT TRIGGER. Συμβάντα: ΠΡΙΝ ή ΜΕΤΑ στο INSERT, DELETE, UPDATE.

    Αυτόματη αύξηση

    MySQL: Μπορεί να υπάρχει μόνο μία τέτοια στήλη σε έναν πίνακα, η οποία πρέπει να ευρετηριαστεί. PostgreSQL: ΣΕΙΡΙΚΟΣ τύπος δεδομένων.

    Αντιγραφές

    Υποστηρίζεται τόσο σε MySQL όσο και σε PostgreSQL. Η PostgreSQL έχει αρθρωτή αρχιτεκτονική και η αναπαραγωγή περιλαμβάνεται σε ξεχωριστές ενότητες:

    • Το Slony-I είναι ο κύριος μηχανισμός αναπαραγωγής στο Postgres, η απόδοση μειώνεται ως τετραγωνική συνάρτηση του αριθμού των διακομιστών.

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

    Στη MySQL, η αναπαραγωγή περιλαμβάνεται στον πυρήνα και έχει δύο γεύσεις, ξεκινώντας από την έκδοση 5.1:

    • SBR – αντιγραφή βάσει δηλώσεων.
    • RBR – αναπαραγωγή βάσει σειράς.

    Ο πρώτος τύπος βασίζεται στην καταγραφή εγγραφών σε ένα δυαδικό αρχείο καταγραφής, ο δεύτερος βασίζεται σε αλλαγές καταγραφής. Ξεκινώντας από την έκδοση 5.5, η MySQL υποστηρίζει τη λεγόμενη ημισύγχρονη αναπαραγωγή, στην οποία ο κύριος διακομιστής (κύριος) επαναφέρει τα δεδομένα σε άλλο διακομιστή (slave) με κάθε δέσμευση. Ο κινητήρας NDB κάνει πλήρη σύγχρονη αντιγραφή δύο φάσεων.

    Συναλλαγές

    MySQL: Μόνο InnoDB. Υποστήριξη SAVEPOINT, ROLLBACK TO SAVEPOINT. Επίπεδα κλειδώματος: επίπεδο τραπεζιού (MyISAM). PostgreSQL: υποστηριζόμενα επίπεδα ανάγνωσης και δέσμευσης και απομόνωσης. Υποστήριξη ROLLBACK, ROLLBACK TO SAVEPOINT. Επίπεδα κλειδώματος: επίπεδο σειράς, επίπεδο τραπεζιού.

    Επίπεδα προνομίων

    PostgreSQL: Τα δικαιώματα μπορούν να εκχωρηθούν σε έναν χρήστη ή ομάδα χρηστών.

    Δεδομένα εξαγωγών-εισαγωγών

    MySQL: ένα σύνολο βοηθητικών προγραμμάτων εξαγωγής: mysqldump, mysqlhotcopy, mysqlsnapshot. Εισαγωγή από αρχεία κειμένου, html, dbf. PostgreSQL: εξαγωγή - βοηθητικό πρόγραμμα pg_dump. Εισαγωγή μεταξύ βάσεων δεδομένων και συστήματος αρχείων.

    Ένθετα ερωτήματα

    Διατίθεται τόσο σε MySQL όσο και σε PostgreSQL, αλλά ενδέχεται να μην λειτουργεί αποτελεσματικά στη MySQL.

    Ευρετηρίαση

    Κατακερματισμός ευρετηρίου: μερικός στη MySQL, πλήρης στη PostgreSQL. Αναζήτηση πλήρους κειμένου: μερική σε MySQL, πλήρης σε PostgreSQL. Μερικά ευρετήρια: δεν υποστηρίζονται στη MySQL, υποστηρίζονται στην PostgreSQL. Ευρετήρια πολλαπλών στηλών: στη MySQL το όριο είναι 16 στήλες, στη PostgreSQL – 32. Ευρετήρια έκφρασης: στη MySQL – εξομοίωση, στη PostgreSQL – πλήρης. Ευρετήριο δημιουργίας χωρίς αποκλεισμό: σε MySQL - μερική, σε PostgreSQL - πλήρης.

    Διαμέριση

    Η MySQL υποστηρίζει οριζόντια κατάτμηση: εύρος, λίστα, κατακερματισμός, κλειδί, σύνθετη κατάτμηση. Η PostgreSQL υποστηρίζει RANGE και LIST. Αυτόματη κατάτμηση για πίνακες και ευρετήρια.

    Αυτόματη ανάκτηση από βλάβες

    MySQL: μερική για το InnoDB - πρέπει να δημιουργήσετε μη αυτόματα αντίγραφο ασφαλείας. PostgreSQL: Εγγραφή εκ των προτέρων (WAL).

    Μηχανές αποθήκευσης δεδομένων

    Η PostgreSQL υποστηρίζει έναν κινητήρα – Σύστημα αποθήκευσης Postgres. Υπάρχουν πολλά από αυτά στο MySQL 5.1:

    • MyISAM – χρησιμοποιείται για την αποθήκευση πινάκων συστήματος.
    • InnoDB – μέγιστη συμμόρφωση ACID, αποθηκεύει δεδομένα με πρωτεύοντα κλειδιά, ένθετα κρυφής μνήμης, υποστηρίζει συμπίεση ξεκινώντας από την έκδοση 5.1 – δείτε το χαρακτηριστικό ROW_FORMAT=COMPRESSED.
    • NDB Cluster – μηχανή προσανατολισμένη στη μνήμη, αρχιτεκτονική συμπλέγματος που χρησιμοποιεί σύγχρονη αναπαραγωγή.
    • ΑΡΧΕΙΟ – υποστηρίζει συμπίεση, δεν χρησιμοποιεί ευρετήρια.
    • και επίσης: MERGE, MEMORY (HEAP), CSV.

    Το InnoDB αναπτύσσεται από την InnoBase, θυγατρική της Oracle. Στην έκδοση 6, θα πρέπει να εμφανιστούν δύο κινητήρες - η Maria και ο Falcon. Το Falcon είναι ένας κινητήρας που βασίζεται σε συναλλαγές ACID.

    Αδειοδότηση

    PostgreSQL: BSD (Berkeley Software Distribution) ανοιχτού κώδικα. MySQL: GPL (Gnu General Public License) ή Εμπορική. Η MySQL είναι ένα προϊόν ανοιχτού κώδικα. Το Postgres είναι ένα έργο ανοιχτού κώδικα.

    συμπέρασμα

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

    Θα συζητήσουμε θέματα ρύθμισης παραμέτρων για MySQL και PostgreSQL.

    Πόροι για λήψη

    static.content.url=http://www.site/developerworks/js/artrating/

    Zone=Ανοιχτού κώδικα, Linux

    ID άρθρου=779830

    ArticleTitle=MySQL & PostgreSQL: Μέρος 1. Συγκριτική Ανάλυση



     

    Ίσως είναι χρήσιμο να διαβάσετε: