Heim  >  Artikel  >  Datenbank  >  Was ist der Unterschied zwischen Postgresql und MySQL?

Was ist der Unterschied zwischen Postgresql und MySQL?

青灯夜游
青灯夜游Original
2021-12-01 15:59:2526250Durchsuche

Unterschiede: 1. PGSQL hat keine Begrenzung für die Anzahl der CPU-Kerne, während MySQL eine Begrenzung hat. 2. PGSQL hat insgesamt 255 Konfigurationsdateiparameter, während MySQL insgesamt 707 Parameter hat Statistische Informationen mit mehreren Feldern, MySQL jedoch nicht. 4. PGSQL unterstützt die Echtzeitkompilierung von Ausführungsplänen, MySQL jedoch nicht.

Was ist der Unterschied zwischen Postgresql und MySQL?

Die Betriebsumgebung dieses Tutorials: Windows7-System, PostgreSQL 11 und MySQL 5.7-Version, Dell G3-Computer.

PostgreSQL ist ein kostenloses objektrelationales Datenbankverwaltungssystem (ORDBMS) mit sehr umfassenden Funktionen.

Was ist der Unterschied zwischen Postgresql und MySQL?

PostgreSQL unterstützt die meisten SQL-Standards und bietet viele weitere moderne Funktionen, wie komplexe Abfragen, Fremdschlüssel, Trigger, Ansichten, Transaktionsintegrität, Parallelitätskontrolle für mehrere Versionen usw. Ebenso kann PostgreSQL auf vielfältige Weise erweitert werden, beispielsweise durch das Hinzufügen neuer Datentypen, Funktionen, Operatoren, Aggregatfunktionen, Indexmethoden, prozeduraler Sprachen usw. Darüber hinaus kann aufgrund der flexiblen Lizenz jeder PostgreSQL für jeden Zweck kostenlos nutzen, ändern und verteilen.

Vergleich der Unterschiede zwischen PostgreSQL und MySQL

Vergleichsversion: PostgreSQL 11 VS MySQL5.7 (Innodb-Engine) Copyright-Situation der offiziellen Oracle-Community-Edition: PostgreSQL 11 (kostenlose Open Source), MySQL5.7 Oracle-Beamter Community Edition (kostenlos und Open Source)

1. CPU-Limit

Bei PGSQL gibt es keine Begrenzung für die Anzahl der CPU-Kerne. Sie können so viele CPU-Kerne verwenden, wie Sie haben.

MySQL kann 128-Kern-CPU verwenden Es können nicht mehr als 128 Kerne verwendet werden

2. Konfigurationsdateiparameter

PGSQL verfügt über insgesamt 255 Parameter, von denen etwa 80 relativ stabil sind. Sie können auch die aktuelle große Versionsdatenbank verwenden Die Konfigurationsdatei der vorherigen großen Version hat insgesamt 707 Parameter, von denen etwa 180 verwendet werden. Die Parameter nehmen ständig zu, selbst kleine Versionen erhöhen die Parameter und einige Parameter sind zwischen großen Versionen nicht kompatibel

3. Abhängigkeit von Drittanbieter-Tools

PGSQL benötigt nur Hochverfügbarkeitscluster, um sich auf Middleware von Drittanbietern zu verlassen, zum Beispiel: patroni+etcd, repmgrDie meisten Vorgänge von MySQL basieren auf Tools von Drittanbietern (percona-toolkit , XtraBackup) von Percona. Es gibt zu viele Tool-Befehle und hohe Lernkosten. Der offizielle MGR-Cluster ist noch nicht ausgereift. Slave-Replikation

Die physische Stream-Replikation von PGSQL ist eine physische Replikation, genau wie die SQL Server-Spiegelung/AlwaysOn. Sie ist streng konsistent und kann keine Inkonsistenz, Leistung und Zuverlässigkeit verursachen. In Bezug auf die Leistung übertrifft die physische Replikation die logische Replikation und ist einfach Die MySQL-Master-Slave-Replikation gehört zur logischen Replikation. (Falsche Parametereinstellungen wie sql_log_bin und binlog_format führen zu Master-Slave-Inkonsistenz.) Bei wichtigen Unternehmen ist die Parallelreplikation ineffizient -table-checksum- und pt-table-sync-Tools von percona-toolkit vergleichen und reparieren regelmäßig die Master-Slave-Konsistenz. Wenn schwerwiegende Master-Slave-Replikationsfehler auftreten, ist es notwendig, die logische Master-Slave-Replikation von MySQL wiederherzustellen verhindert nicht, dass zwei inkonsistente Datenbanken eine Replikationsbeziehung herstellen ist einfach

Die MySQL-Slave-Datenbank muss den Parameter super_read_only=on manuell setzen, um die Slave-Datenbank auf schreibgeschützt zu setzen. Es gibt einen Fehler im super_read_only-Parameter, Link: https://baijiahao.baidu.com/s?id =1636644783594388753&wfr=spider&for=pc

6. Versionszweig

PGSQL hat nur die Community-Version, es gibt keine andere Zweigversion, PGSQL ist offiziell einheitliche Entwicklung, einheitliche Wartung, die Community-Version verfügt über alle Funktionen, im Gegensatz zu SQL Server und MySQL ist in Standardversion, Unternehmensversion, klassische Version, Community-Version, Entwicklungsversion und Webversion unterteilt. Es gibt auch einige Datenbanken im In- und Ausland, die auf PGSQL für die Sekundärentwicklung basieren Datenbank usw. Natürlich sind dies nur sekundäre Entwicklungen und gelten aus historischen Gründen nicht als unabhängige Zweige. MySQL ist in drei Zweigversionen unterteilt: MariaDB-Zweig, Percona-Zweig und offizieller Oracle-Zweig Die Zweige sind grundsätzlich nicht miteinander kompatibel. Die offiziellen Zweige von Oracle sind ebenfalls in Standardversion, Unternehmensversion, klassische Version und Community-Version unterteilt.

Unterstützung für SQL-Funktionen 94 Typen, SQL Die umfassendste Syntaxunterstützung, zum Beispiel: unterstützt allgemeine Tabellenausdrücke (MIT Abfrage) Die MySQL SQL-Funktionsunterstützung unterstützt 36 Typen, die SQL-Syntaxunterstützung ist relativ schwach, zum Beispiel: allgemeine Tabellenausdrücke (MIT Abfrage) nicht Unterstützte Informationen zur SQL-Funktionsunterstützung. Zum Vergleich können Sie sich auf http://www.sql-workbench.net/dbms_comparison.html beziehen.

8 anwenden), hohe Sicherheit, kein Datenverlust synchrone Stream-Replikation von PGSQL: Alle Slave-Datenbanken sind ausgefallen, die Master-Datenbank streikt und die Master-Datenbank kann nicht automatisch zur asynchronen Stream-Replikation (asynchroner Modus) wechseln, was durch gelöst werden muss Erhöhung der Anzahl der Slave-Datenbanken.

Im Allgemeinen verfügt die Produktionsumgebung über mindestens zwei Slave-Bibliotheken: Ändern Sie den Parameter synchronous_standby_names ='' in der PG-Hauptbibliothek und führen Sie den Befehl aus: pgctl reload Die Daten sind vollständig konsistent. Dies ist der erste Schritt des Hochverfügbarkeitswechsels.

Daher ist es verständlich, dass PGSQL die Master-Datenbank zum Streiken auswählt.

Die verbesserte Semisynchronisierung der MySQL5.7-Version kann sicherstellen, dass während der Master-Slave-Replikation keine Daten verloren gehen. Parameter für die synchrone Replikation: Parameter rpl_semi_sync_master_wait_for_slave_count gibt an, auf wie viele Slave-Datenbanken mindestens gewartet werden soll. Nach dem Empfang des Binlogs sendet die Hauptbibliothek die Transaktion im Allgemeinen auf 1. Der Parameter rpl_semi_sync_master_timeout mit der höchsten Leistung gibt an, wie viele Millisekunden die Slave-Bibliothek warten soll Automatisch in den asynchronen Modus wechseln, wenn keine Antwort erfolgt. Im Allgemeinen auf „Unendlich“ eingestellt, um zu verhindern, dass die Hauptbibliothek automatisch in den asynchronen Modus wechselt Slave-Datenbank. Manuelle Lösung: Ändern Sie den Parameter rpl_semi_sync_master_wait_for_slave_count=0 in der MySQL-Master-Datenbank

9. PGSQL unterstützt mehrere Feldstatistiken. MySQL unterstützt keine Mehrfeldstatistiken. Indextyp

PGSQL mehrere Indextypen (Btree, Hash, Gin, Gist, SP-Gist, Brin, Bloom, Rum, Zombodb, Bitmap, Teilindex, Ausdrucksindex)

MySQLBtree-Index, Volltextindex (ineffizient) , Ausdrucksindex (muss eine virtuelle Spalte erstellen), Hash-Index nur in der Speichertabelle

11. Physischer Tabellenverbindungsalgorithmus

PGSQL unterstützt Nested-Loop-Join, Hash-Join, Merge-Join

MySQL unterstützt nur Nested-Loop Join

12. Unterabfrage- und Ansichtsleistung

PGSQL-Unterabfrage, Ansichtsoptimierung, relativ hohe Leistung

MySQL-Ansichtsprädikatbedingungs-Pushdown hat viele Einschränkungen, es gibt viele Unterabfrage-Pullup-Einschränkungen

13. Zeitkompilierung von Ausführungsplänen

PGSQL unterstützt die Just-in-Time-Kompilierung von JIT-Ausführungsplänen mit dem LLVM-Compiler

MySQL unterstützt keine Just-in-Time-Kompilierung von Ausführungsplänen

14. Parallele Abfragen

PGSQL Parallele Abfrage (eine Vielzahl paralleler Abfrageoptimierungsmethoden). Parallele Abfragen werden im Allgemeinen in kommerziellen Datenbanken verwendet. Es handelt sich um eine Schwergewichtsfunktion. MySQL ist begrenzt und unterstützt nur parallele Primärschlüsselabfragen. 15 Materialisierte Ansichten materialisierte Ansicht

MySQL unterstützt keine materialisierten Ansichten

16. Plug-in-Funktion

PGSQL unterstützt Plug-in-Funktionen, die die Funktionen von PGSQL, GIS-Geographie-Plug-in, Zeitreihen-Datenbank-Plug-in, bereichern können. vektorisierte Ausführungs-Plug-Ins usw.

MySQL unterstützt keine Plug-In-Funktionen

17. Prüfeinschränkungen

PGSQL unterstützt Prüfeinschränkungen

MySQL unterstützt keine Prüfeinschränkungen, aber den Speicher Die Engine ignoriert ihren Effekt, sodass die Prüfeinschränkungen nicht funktionieren (mariadb unterstützt). Geschwindigkeit von SQL

19. Datentypen

PGSQL verfügt über umfangreiche Datentypen wie ltree, hstore, array type, ip type, text type, varchar ist nicht mehr erforderlich Felder sind 1 GB groß. MySQL-Datentypen sind nicht umfangreich genug. Datenbankübergreifende Abfragen unterstützen keine datenbankübergreifenden Abfragen

21. Die Sicherung und Wiederherstellung von PGSQL ist noch einfacher als die vollständige Sicherung + Wal-Archivierung (inkrementell). Master-Slave-Cluster, Sie können auf jedem Knoten eine vollständige Sicherung und eine Wal-Archivsicherung durchführen. MySQL-Sicherung und -Wiederherstellung ist relativ schwierig. Vollsicherung + Binlog-Sicherung (inkrementell). Für die vollständige Sicherung ist das XtraBackup-Tool von Percona für die physische Sicherung erforderlich, MySQL selbst für die physische Sicherung Point-in-Time-Wiederherstellungsvorgänge werden nicht unterstützt. Die Schritte sind umständlich und kompliziert. Warteereignisse, Systemstatistiken usw. Der Nachteil besteht darin, dass für die Installation des Plug-Ins ein Neustart der Datenbank erforderlich ist und die Datenbank, die Leistungsinformationen sammeln muss, einen Befehl ausführen muss: Befehl „Erweiterung pg_stat_statements erstellen“, andernfalls werden keine Leistungsinformationen erfasst , was problematischer ist

MySQL wird mit der PS-Bibliothek geliefert, viele Funktionen sind standardmäßig nicht aktiviert und PS ist aktiviert. Die Leistungsansichtsfunktion der Bibliothek wirkt sich auf die Leistung aus (z. B. Speichernutzung führt zu OOM-Fehlern).

23. Installationsmethode

PGSQL verfügt über RPM-Pakete, Deb-Pakete usw. Im Vergleich zu MySQL werden zum Kompilieren und Installieren keine Binärpakete verwendet und es müssen mehr Befehle ausgeführt werden.

MySQL verfügt über RPM-Pakete, Deb-Pakete usw. für die Kompilierung und Installation von Quellcodes und die Installation von Binärpaketen. Dies ist praktisch und schnell 24. DDL-Operationen

PGSQL fügt Felder hinzu und ändert die Länge von Feldtypen variabler Länge, ohne die Tabelle zu sperren. Für alle DDL-Operationen sind keine Tools von Drittanbietern erforderlich, und wie bei kommerziellen Datenbanken können DDL-Operationen zurückgesetzt werden , Sicherstellung der Transaktionskonsistenz

MySQL Da die meisten DDL-Vorgänge die Tabelle sperren, z. B. das Hinzufügen von Feldern und das Ändern der Länge von Feldtypen variabler Länge, müssen Sie zum Abschluss das Tool pt-online-schema-change im Percona-Toolkit verwenden Den Vorgang reduzieren und die Auswirkungen auf ein Minimum reduzieren, insbesondere bei DDL-Vorgängen für große Tabellen.

25

PGSQLPGSQL veröffentlicht jedes Jahr eine Hauptversion. Sie kann im zweiten Jahr nach Veröffentlichung der Hauptversion veröffentlicht werden. Die Versionsiterationsgeschwindigkeit ist sehr hoch. Die offizielle Version von PGSQL 10 wurde 2017 veröffentlicht. Die offizielle Version von PGSQL 11 wurde 2017 veröffentlicht. : 2018 PGSQL 12 offizielle Versionsstartzeit: 2019

MySQL Normalerweise dauert es 2 bis 3 Jahre, bis eine Hauptversion von MySQL veröffentlicht wird , die Produktionsumgebung kann erst im zweiten Jahr nach Veröffentlichung einer Hauptversion veröffentlicht werden, um Fallstricke zu vermeiden. Veröffentlichungsgeschwindigkeiten im Vergleich: Langsame offizielle Version von MySQL 5.5 wurde veröffentlicht: 2010 wurde die offizielle Version von MySQL 5.6 veröffentlicht: 2013 wurde die offizielle Version von MySQL 5.7 veröffentlicht. 2015 wurde die offizielle Version von MySQL 8.0 veröffentlicht: 2018

26. Rückgabesyntax

PGSQL unterstützt die Rückgabesyntax, die Rückgabeklausel unterstützt die DML-Rückgabe-Ergebnismenge, wodurch eine Client- <-> DB-Server-Interaktion reduziert wird.

MySQL unterstützt keine Rückgabesyntax

27. Interne Architektur

Bei der PGSQL-Mehrprozessarchitektur kann die Anzahl der gleichzeitigen Verbindungen nicht zu hoch sein. Da es sich um dasselbe wie bei Oracle handelt, sind auch viele Optimierungsmethoden gleich Aufgrund der Parallelität des Systems gibt es eine offizielle Begrenzung der Anzahl der Verbindungen Die Verarbeitungsfähigkeit nimmt ab. Mit zunehmender Anzahl von Verbindungen nimmt die Leistung ab. Im Allgemeinen können nur 200 bis 300 Datenbankverbindungen gleichzeitig verarbeitet werden.

PGSQL unterstützt keinen Clustered-Index durch den MVCC-Implementierungsmechanismus von PGSQL selbst. MySQL unterstützt Clustered-Index , PGSQL wird diese Art von Sitzungstransaktion automatisch überprüfen und beenden.

MySQL unterstützt die Funktion zum Beenden von Leerlauftransaktionen nicht Das MVCC-Designproblem von PGSQL selbst ist für die Garbage Collection erforderlich. Wir können uns nur auf eine Optimierung in späteren Hauptversionen freuen. MySQL kann mit extrem großen Datenmengen und Problemen mit der MySQL-eigenen Architektur nicht umgehen PGSQLHTAP-Datenbank: CockroachDB, Tencent Tbase-Sharding-Cluster: Postgres-XC, Postgres – Verstehen Sie auf Betriebssystemebene (wenn die Datenbank gestoppt ist) die Dateinamen und Benennungsregeln der Datenbank, die Anzahl der Dateien und die Größe klar Sobald das Betriebssystem einen Dateiverlust oder einen Festplattenschaden erleidet, ist eine Wiederherstellung sehr schwierig, da die PGSQL-Tabellendaten nicht einmal einen Namen haben. Die Benennungs-/Speicherregel für physische Dateien lautet: unter einem Tabellenbereich, wenn Es wird kein Tabellenbereich erstellt, es wird standardmäßig der Standardtabellenbereich verwendet, der der Basisordner ist, zum Beispiel: /data/base/16454/3599base: der physische Speicherort, an dem sich der Standardtabellenbereich pg_default befindet. Ordner 16454: oid3599 des Datenbank, in der sich die Tabelle befindet: ist die OID des Tabellenobjekts. Wenn die Größe einer Tabelle 1 GB überschreitet, werden natürlich mehrere physische Dateien sowie die FSM-Datei und die VM-Datei der Tabelle generiert Die Tabelle verfügt tatsächlich über mehrere physische Dateien. Da PGSQL zu viele Datendatei-Layoutinhalte hat, können Sie die relevanten Informationen natürlich nicht ausschließlich auf PGSQL zurückführen. Als DBA ist es der richtige Weg, immer eine Datenbanksicherung durchzuführen Die Wiederherstellung von Datenträgern ist im Allgemeinen der letzte Ausweg.

Der MySQL-Datenbankname ist der Ordnername, und unter dem Datenbankordner befinden sich die Tabellendatendateien Das Speichern von Metadaten und Tabellen-/Indexdaten ist sehr praktisch

PGSQLPGSQL ist in Bezug auf das Berechtigungsdesign ziemlich schwierig. Abgesehen von Instanzberechtigungen und Tabellenbereichsberechtigungen ähnelt die Berechtigungsebene von PGSQL ein wenig der von SQL Server Verwenden Sie hier Oracle als Analogie. Vor ORACLE 12C waren Instanz und Datenbank eins zu eins, was bedeutet, dass eine Instanz im Gegensatz zu MySQL und SQL Server mehrere Datenbanken haben kann. Datenbankabfragen können nach Belieben durchgeführt werden. Der Grund dafür ist derselbe. Analog zu ORACLE gibt es mehrere Instanzen und Datenbanken -one). Da PGSQL mehrere Instanzen zulässt, wird eine Instanz nicht als Instanz bezeichnet. Sie können sich auf die relevanten Informationen von PGSQL beziehen Das Schema unter einer Instanz/Datenbank in PGSQL entspricht einer Datenbank, daher entspricht das Konzept dieses Schemas der Datenbank von MySQL. Hinweis: Da eine Datenbank einer Instanz entspricht, sind die Datenbanken logisch Das Problem besteht darin, dass Vorgänge nicht für alle Datenbanken unter einem PGSQL-Cluster gleichzeitig ausgeführt werden können und nacheinander ausgeführt werden müssen. Installieren Sie zum Beispiel das oben erwähnte Plug-in pg_stat_statements Um die Leistungserfassung für alle Datenbanken im PGSQL-Cluster durchzuführen, müssen Sie den Ladebefehl einzeln ausführen. Für eine datenbankübergreifende Abfrage ist beispielsweise das dblink-Plug-in oder das fdw-Plug-in erforderlich. Die Abfrage zwischen Datenbanken entspricht der Abfrage Da es sich um übergreifende Instanzen handelt, ist ein Dblink-Plugin oder ein FDW-Plugin erforderlich. Daher ist das Prinzip sehr einfach. Berechtigungsoperationen werden auch auf Datenbankbasis ausgeführt ist wie SQL. Die Berechtigungshierarchie von Server ist db=》schema=》object, aber sie ist tatsächlich komplizierter als SQL Server. Darüber hinaus müssen die Rollen und Benutzer in PGSQL separat autorisiert werden ist für unerfahrene Benutzer hilfreich. Manchmal kann ich den Unterschied nicht erkennen und ich weiß nicht, wie man Rollen verwendet, daher ist PGSQL in Bezug auf das Berechtigungsdesign wirklich schwierig.

MySQL verwendet die 5 Berechtigungstabellen unter der MySQL-Bibliothek Führen Sie eine Berechtigungszuordnung durch, die einfach und klar ist. Das einzige Problem besteht darin, dass die Berechtigungsrolle Benutzertabelle Datenbanktabelle Hosttabelle Tabellen_Privattabelle Spalten_Privattabelle

34 Entwicklungsgeschichte

PGSQL Im Jahr 1995 fügten die Entwickler Andrew Yu und Jolly Chen hinzu ein SQL-Übersetzungsprogramm (Structured Query Language, Structured Query Language) zu Postgres), diese Version heißt Postgres95 und wird in der Open-Source-Community veröffentlicht. Im Jahr 1996 wurden erneut große Änderungen an Postgres95 vorgenommen und der Name PostgresSQL wurde 1995 endgültig festgelegt.

MySQL 1996 wurde MySQL 1.0 veröffentlicht. es steht nur einem kleinen Personenkreis zur Verfügung, was einer internen Freigabe gleichkommt. Im Oktober 1996 wurde MySQL 3.11.1 veröffentlicht (MySQL verfügte zunächst nicht über eine Binärversion unter dem Betriebssystem Solaris). Einen Monat später erschien die Linux-Version. Es hat eine Geschichte von etwa 23 Jahren.

【Verwandte Empfehlung: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Postgresql und MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn