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

Was ist der Unterschied zwischen Postgresql und MySQL?

青灯夜游
青灯夜游Original
2022-04-12 14:43:5830890Durchsuche

Unterschiede: 1. MySQL startet eine Instanz durch die Ausführung eines Befehls, während PG durch die Ausführung eines Prozesses gestartet wird. 2. PG unterstützt materialisierte Ansichten, MySQL jedoch nicht. 3. MySQL unterstützt keine Skalierbarkeit hoch skalierbar 4. Die funktionale Unterstützung gespeicherter PG-Prozeduren ist besser als die von MySQL und es besteht die Möglichkeit, Ausführungspläne lokal zwischenzuspeichern.

Was ist der Unterschied zwischen Postgresql und MySQL?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

MySQL

MySQL ist relativ jung und erschien erstmals 1994. Sie behauptet, die beliebteste Open-Source-Datenbank zu sein. MySQL ist das M in LAMP (ein Softwarepaket für die Webentwicklung, einschließlich Linux, Apache und Perl/PHP/Python). Die meisten auf dem LAMP-Stack aufgebauten Anwendungen verwenden MySQL, darunter bekannte Anwendungen wie WordPress, Drupal, Zend und phpBB.

MySQL war von Anfang an als schnelles Webserver-Backend konzipiert, das die schnelle Index Sequential Access Method (ISAM) nutzt und ACID nicht unterstützt. Nach einer schnellen frühen Entwicklung begann MySQL, mehr Speicher-Engines zu unterstützen und implementierte ACID über die InnoDB-Engine. MySQL unterstützt auch andere Speicher-Engines, bietet temporäre Tabellenfunktionen (unter Verwendung der MEMORY-Speicher-Engine) und implementiert Hochgeschwindigkeits-Lesedatenbanken über die MyISAM-Engine. Darüber hinaus gibt es andere Kernspeicher-Engines und Engines von Drittanbietern.

MySQL verfügt über eine sehr umfangreiche Dokumentation, darunter viele hochwertige kostenlose Referenzhandbücher, Bücher und Online-Dokumente sowie Schulungen und Support von Oracle und Drittanbietern.

MySQL hat in den letzten Jahren Eigentümerwechsel und einige ziemlich dramatische Ereignisse erlebt. Es wurde ursprünglich von MySQL AB entwickelt und dann 2008 für 1 Milliarde US-Dollar an Sun verkauft. Sun wurde 2010 von Oracle übernommen. Oracle unterstützt mehrere Versionen von MySQL: Standard, Enterprise, Classic, Cluster, Embedded und Community. Einige davon können kostenlos heruntergeladen werden, während andere kostenpflichtig sind. Sein Kerncode basiert auf der GPL-Lizenz. Für Entwickler und Hersteller, die die GPL-Lizenz nicht nutzen möchten, stehen kommerzielle Lizenzen zur Verfügung.

Jetzt stehen viel mehr Datenbanken zur Auswahl, die auf dem ursprünglichen MySQL-Code basieren, da mehrere wichtige MySQL-Entwickler MySQL-Forks veröffentlicht haben. Einer der ursprünglichen MySQL-Entwickler, Michael „Monty“ Widenius, schien den Verkauf von MySQL an Sun zu bereuen, also entwickelte er seinen eigenen MySQL-Fork, MariaDB, der kostenlos ist und unter der GPL lizenziert ist. Drizzle, ein Fork des bekannten MySQL-Entwicklers Brian Aker, wurde umfassend neu geschrieben und insbesondere für Multi-CPU-, Cloud- und Netzwerkanwendungen sowie hohe Parallelität optimiert.

PostgreSQL

PostgreSQL (kurz PG) bezeichnet sich selbst als die fortschrittlichste Open-Source-Datenbank der Welt. Einige Fans von PostgreSQL sagen, es sei mit Oracle vergleichbar, allerdings ohne den hohen Preis und den arroganten Kundenservice. Sie hat eine lange Geschichte und wurde ursprünglich 1985 an der University of California, Berkeley, als Nachfolger der Ingres-Datenbank entwickelt.

PostgreSQL ist ein vollständig von der Community betriebenes Open-Source-Projekt, das von mehr als 1.000 Mitwirkenden auf der ganzen Welt gepflegt wird. Es bietet eine einzige voll funktionsfähige Version, im Gegensatz zu MySQL, das mehrere verschiedene Community-Editionen, kommerzielle Editionen und Enterprise-Editionen bereitstellt. PostgreSQL ist unter der liberalen BSD/MIT-Lizenz lizenziert und Organisationen können den Code verwenden, kopieren, ändern und weiterverbreiten, sofern sie einen Urheberrechtshinweis angeben.

Zuverlässigkeit hat für PostgreSQL höchste Priorität. Es ist bekannt für seine solide Qualität und solide Technik und unterstützt geschäftskritische Anwendungen mit hoher Transaktionsfrequenz. Die Dokumentation von PostgreSQL ist sehr gut, mit einer großen Anzahl kostenloser Online-Handbücher und archivierten Referenzhandbüchern für ältere Versionen. Der Community-Support von PostgreSQL ist ausgezeichnet, ebenso wie der kommerzielle Support von unabhängigen Anbietern.

Datenkonsistenz und -integrität sind ebenfalls wichtige Funktionen von PostgreSQL. PostgreSQL unterstützt ACID-Funktionen vollständig, bietet starke Sicherheitsgarantien für den Datenbankzugriff und nutzt Unternehmenssicherheitstools wie Kerberos und OpenSSL in vollem Umfang. Sie können Ihre eigenen Prüfungen definieren, um die Datenqualität basierend auf Ihren eigenen Geschäftsregeln sicherzustellen.

Unter den vielen Verwaltungsfunktionen ist die Point-in-Time-Wiederherstellung (PITR) eine großartige Funktion. Dabei handelt es sich um eine flexible Hochverfügbarkeitsfunktion, die die Möglichkeit bietet, Hot-Backups und Snapshots sowie Wiederherstellungen für fehlgeschlagene Wiederherstellungen zu erstellen. Aber das ist nicht alles von PostgreSQL. Das Projekt bietet auch mehrere Methoden zur Verwaltung von PostgreSQL, um Hochverfügbarkeit, Lastausgleich, Replikation usw. zu erreichen, sodass Sie die Funktionen verwenden können, die Ihren spezifischen Anforderungen entsprechen.

Der Unterschied zwischen Postgresql und MySQL

Funktionen MySQL PostgreSQL
Instanz Starten Sie die Instanz, indem Sie den MySQL-Befehl (mysqld) ausführen. Eine Instanz kann eine oder mehrere Datenbanken verwalten. Ein Server kann mehrere mysqld-Instanzen ausführen. Ein Instanzmanager kann einzelne Instanzen von mysqld überwachen.
Starten Sie die Instanz, indem Sie den Postmaster-Prozess (pg_ctl) ausführen. Eine Instanz kann eine oder mehrere Datenbanken verwalten, die einen Cluster bilden. Ein Cluster ist ein Bereich auf der Festplatte, der während der Installation initialisiert wird und aus einem Verzeichnis besteht, in dem alle Daten gespeichert werden. Verwenden Sie initdb, um die erste Datenbank zu erstellen. Auf einer Maschine können mehrere Instanzen gestartet werden.
Datenbank Eine Datenbank ist eine benannte Sammlung von Objekten, die eine von anderen Datenbanken in der Instanz getrennte Einheit darstellt. Alle Datenbanken in einer MySQL-Instanz nutzen denselben Systemkatalog. Eine Datenbank ist eine benannte Sammlung von Objekten, und jede Datenbank ist eine von anderen Datenbanken getrennte Einheit. Jede Datenbank verfügt über einen eigenen Systemkatalog, aber alle Datenbanken nutzen pg_databases gemeinsam.
Datenpuffer Stellen Sie den Datenpuffer über den Konfigurationsparameter innodb_buffer_pool_size ein. Dieser Parameter ist die Anzahl der Bytes im Speicherpuffer, die InnoDB zum Zwischenspeichern von Tabellendaten und Indizes verwendet. Auf einem dedizierten Datenbankserver kann dieser Parameter auf bis zu 80 % des physischen Speichers der Maschine eingestellt werden. Shared_buffers Cache. Standardmäßig sind 64 Puffer zugewiesen. Die Standardblockgröße beträgt 8 KB. Der Puffercache kann durch Festlegen des Parameters shared_buffers in der Datei postgresql.conf aktualisiert werden.
Datenbankverbindung Der Client verwendet die CONNECT- oder USE-Anweisung, um eine Verbindung zur Datenbank herzustellen. Zu diesem Zeitpunkt muss der Datenbankname angegeben werden. Außerdem können die Benutzer-ID und das Kennwort angegeben werden. Verwenden Sie Rollen, um Benutzer und Benutzergruppen in der Datenbank zu verwalten. Der Client verwendet die Connect-Anweisung, um eine Verbindung zur Datenbank herzustellen. Zu diesem Zeitpunkt muss der Datenbankname angegeben werden. Außerdem können die Benutzer-ID und das Kennwort angegeben werden. Verwenden Sie Rollen, um Benutzer und Benutzergruppen in der Datenbank zu verwalten.
Authentifizierung MySQL verwaltet die Authentifizierung auf Datenbankebene. Grundsätzlich wird nur die Passwortauthentifizierung unterstützt. PostgreSQL unterstützt eine Vielzahl von Authentifizierungsmethoden: Vertrauensauthentifizierung, Passwortauthentifizierung, Kerberos-Authentifizierung, identbasierte Authentifizierung, LDAP-Authentifizierung, PAM-Authentifizierung
Verschlüsselung Sie können am Tisch ein Passwort festlegen Ebene zur Authentifizierung von Daten. Verschlüsseln. Sie können auch die Funktionen AES_ENCRYPT und AES_DECRYPT verwenden, um Spaltendaten zu verschlüsseln und zu entschlüsseln. Die Netzwerkverschlüsselung kann über SSL-Verbindungen erreicht werden. Spalten können mithilfe von Funktionen in der pgcrypto-Bibliothek verschlüsselt/entschlüsselt werden. Die Netzwerkverschlüsselung kann über SSL-Verbindungen erreicht werden.
Audit kann das Abfrageprotokoll durchsuchen. Sie können PL/pgSQL-Trigger für Tabellen zur Überwachung verwenden.
Sicherung, Wiederherstellung und Protokollierung InnoDB verwendet die Write-Ahead-Protokollierung. Unterstützt Online- und Offline-Vollsicherung sowie Absturz- und Transaktionswiederherstellung. Zur Unterstützung von Hot-Backups ist Software von Drittanbietern erforderlich. Führen Sie ein Write-Ahead-Protokoll in einem Unterverzeichnis des Datenverzeichnisses. Unterstützt Online- und Offline-Vollsicherungen sowie Absturz-, Point-in-Time- und Transaktionswiederherstellung. Kann Hot-Backup unterstützen.
Einschränkungen unterstützt Primärschlüssel-, Fremdschlüssel-, eindeutige und Nicht-Null-Einschränkungen. Prüfeinschränkungen werden aufgelöst, aber nicht erzwungen. Unterstützt Primärschlüssel, Fremdschlüssel, eindeutige, Nicht-Null- und Prüfeinschränkungen.
Gespeicherte Prozeduren und benutzerdefinierte Funktionen unterstützen CREATE PROCEDURE- und CREATE FUNCTION-Anweisungen. Gespeicherte Prozeduren können in SQL und C++ geschrieben werden. Benutzerdefinierte Funktionen können in SQL, C und C++ geschrieben werden. Es gibt keine separate gespeicherte Prozedur, alles wird durch Funktionen implementiert. Benutzerdefinierte Funktionen können in PL/pgSQL (einer speziellen prozeduralen Sprache), PL/Tcl, PL/Perl, PL/Python, SQL und C geschrieben werden.
Trigger unterstützt Pre-Row-Trigger, Post-Row-Trigger und Statement-Trigger, die in prozeduralen zusammengesetzten Anweisungen geschrieben werden. Unterstützt Pre-Row-Trigger, Post-Row-Trigger und Statement-Trigger. Der Triggerprozess ist in C geschrieben.
Systemkonfigurationsdatei my.conf Postgresql.conf
Datenbankkonfiguration my.conf Postgresql.conf
Client-Verbindungsdatei my.conf pg_hba.conf
XML-Unterstützung Eingeschränkte XML-Unterstützung. Eingeschränkte XML-Unterstützung.
Datenzugriffs- und Verwaltungsserver TABELLE OPTIMIEREN - Gewinnen Sie ungenutzten Speicherplatz zurück und beseitigen Sie die Fragmentierung von Datendateien
myisamchk -analyze - Aktualisieren Sie die vom Abfrageoptimierer (MyISAM-Speicher-Engine) verwendeten Statistiken
MySQL – Befehlszeilentool
MySQL-Administrator – Client-GUI-Tool
Vacuum – Freigeben von ungenutztem Speicherplatz
Analysieren – Aktualisieren des verwendeten Abfrageoptimierers Statistiken von
psql – Befehlszeilentool
pgAdmin – Client-GUI-Tool
Parallelitätskontrolle unterstützt Sperren auf Tabellen- und Zeilenebene. Die InnoDB-Speicher-Engine unterstützt READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ und SERIALIZABLE. Legen Sie die Isolationsstufe auf Transaktionsebene mit der Anweisung SET TRANSACTION ISOLATION LEVEL fest. Unterstützt Sperren auf Tabellen- und Zeilenebene. Die unterstützten ANSI-Isolationsstufen sind Read Committed (Standard – Sie können einen Snapshot der Datenbank sehen, wenn die Abfrage gestartet wird) und Serialization (ähnlich zu Repeatable Read – Sie können nur die Ergebnisse sehen, die vor dem Start der Transaktion festgeschrieben wurden). Verwenden Sie die SET TRANSACTION-Anweisung, um die Isolationsstufe auf Transaktionsebene festzulegen. Auf Sitzungsebene mit SET SESSION festlegen.
Unterstützte Plattform Unterstützung für ProgrammiersprachenMaterialisierte Ansichten Skalierbarkeit ZugriffsmethodenCommunity-SupportSicherheit

Vorteile von PostgreSQL gegenüber MySQL

  • Die Standardimplementierung von SQL ist besser als MySQL und die Funktionsimplementierung ist strenger;

  • Die funktionale Unterstützung gespeicherter Prozeduren ist besser als bei MySQL und es verfügt über einen lokalen Cache Ausführungsplanfähigkeit;

  • Umfassende Unterstützung für Tabellenverbindungen, vollständige Optimierungsfunktionen, viele unterstützte Indextypen und starke komplexe Abfragefunktionen;

  • PG-Haupttabelle wird in einer Heap-Tabelle gespeichert, und MySQL verwendet Indizes, um Tabellen zu organisieren . Kann größere Datenmengen als MySQL unterstützen.

  • PGs primäre und sekundäre Replikation ist eine physische Replikation. Im Vergleich zur Binlog-basierten logischen Replikation ist die Datenkonsistenz zuverlässiger, die Replikationsleistung ist höher und sie hat weniger Auswirkungen auf die Hostleistung.

  • Der Plug-In-Mechanismus der Speicher-Engine von MySQL weist das Problem auf, dass komplexe Sperrmechanismen die Parallelität beeinträchtigen, PG existiert jedoch nicht.

Vorteile von MySQL gegenüber PG:

  • Der auf Rollback-Segmenten basierende MVCC-Mechanismus von Innodb ist dem XID-basierten MVCC-Mechanismus überlegen, bei dem neue und alte Daten zusammen in PG gespeichert werden. Neue und alte Daten werden zusammen gespeichert, und VACUUM muss regelmäßig ausgelöst werden, was zu einem redundanten E/A- und Datenbankobjekt-Sperraufwand führt und dazu führt, dass die allgemeine Parallelitätsfähigkeit der Datenbank abnimmt. Wenn VACUUM nicht rechtzeitig bereinigt wird, kann es außerdem zu einer Datenerweiterung kommen.

  • Diese Speichermethode eignet sich sehr gut für Abfragen und Löschvorgänge, die auf dem Primärschlüsselabgleich basieren das Design der Tabellenstruktur;

  • Der MySQL-Optimierer ist relativ einfach und die Implementierung von Systemtabellen, Operatoren und Datentypen ist sehr rationalisiert, was sich sehr gut für einfache Abfragevorgänge eignet.

  • Die Implementierung der MySQL-Partitionstabelle ist vor allem besser als die Partitionsimplementierung von PG, die auf Vererbungstabellen basiert. Dies spiegelt sich in dem großen Unterschied in der Verarbeitungsleistung wider, wenn die Anzahl der Partitionen Zehntausende erreicht.

  • Der Speicher-Engine-Plug-in-Mechanismus von MySQL macht seine Anwendungsszenarien umfangreicher. Beispielsweise eignet sich innodb nicht nur für Transaktionsverarbeitungsszenarien, sondern auch für statische Datenabfrageszenarien.

【Verwandte Empfehlungen: MySQL-Video-Tutorial

VS PostgreSQL MySQL
Open Source PostgreSQL ist ein kostenloses Open-Source-System, das der PostgreSQL-Lizenz (Free Open Source License) unterliegt. MySQL ist ein Produkt von Oracle und stellt Benutzern mehrere kostenpflichtige Versionen zur Verfügung.
Management PostgreSQL ist ein Produkt, das von Benutzern auf der ganzen Welt entwickelt wurde. MySQL ist ein Produkt unter der GNU General Public License und verschiedenen proprietären Vereinbarungen Begriffe
Leistung PostgreSQL eignet sich für den Einsatz in großen Systemen, die hohe Lese- und Schreibgeschwindigkeiten erfordern. MySQL wird hauptsächlich für Webanwendungen verwendet, die nur eine Datenbank für Datentransaktionen benötigen.
ACID folgen PostgreSQL befolgt die ACID-Prinzipien von Anfang bis Ende und stellt sicher, dass die Anforderungen erfüllt werden. MySQL ist nur ACID-kompatibel, wenn die Cluster-Speicher-Engines InnoDB und NDB verwendet werden.
SQL-Kompatibilität „Aus der Dokumentation geht hervor, dass PostgreSQL mit den meisten SQL:2011-Funktionen kompatibel ist. Darüber hinaus ist PostgreSQL mit mindestens 160 kompatibel sind eine Reihe unterstützter optionaler Funktionen. „Aus der Dokumentation geht hervor, dass MySQL teilweise mit SQL kompatibel ist. Eines unserer Hauptziele für dieses Produkt ist es, weiterhin hart daran zu arbeiten, die Anforderungen des SQL-Standards zu erfüllen. Aber ohne Einbußen bei Geschwindigkeit oder Zuverlässigkeit.“ Wir könnten SQL-Erweiterungen oder Unterstützung für Nicht-SQL-Funktionen hinzufügen, wenn dies die Verfügbarkeit des MySQL-Servers für einen großen Teil unserer Benutzerbasis erheblich verbessern würde.
Es kann unter Linux, Windows (Win2000 SP4 und höher) ausgeführt werden ), FreeBSD, OpenBSD, NetBSD, Mac OS MySQL kann auf Oracle Solaris, Microsoft Windows und Linux Mac OS X ausgeführt werden. MySQL erweitert die Unterstützung für das Open-Source-Betriebssystem FreeBSD
PostgreSQL ist in der Sprache C geschrieben und unterstützt mehrere Programmiersprachen, die bekanntesten C/C++, Delphi, JavaScript, Java, Python, R, Tcl, Go , Lisp, Erlang und .Net. PostgreSQL ist in C und C++ geschrieben und unterstützt C/C++, Erlang, PHP, Lisp und Go, Perl, Java, Delphi, R und Node.js
PostgreSQL unterstützt materialisierte Ansichten. MySQL unterstützt keine materialisierten Ansichten Master-Standby-Replikation, bei der jeder Knoten der Masterknoten ist und das Recht hat, Daten zu aktualisieren
PostgreSQL ist hoch skalierbar, Sie können Datentypen, Operatoren, Indextypen und Funktionssprachen hinzufügen und besitzen. MySQL unterstützt keine Skalierbarkeit.
PostgreSQL unterstützt alle Standards. MySQL unterstützt alle Standards.
PostgreSQL verfügt über einen aktiven Community-Support, der zur Verbesserung bestehender Funktionen beiträgt, und seine kreativen Committer arbeiten hart daran, sicherzustellen, dass die Datenbank mit den neuesten Funktionen und maximaler Datenbanksicherheit auf dem neuesten Stand bleibt. MySQL hat auch eine große Follower-Community, und diese Community-Mitwirkenden konzentrieren sich, insbesondere nach der Übernahme durch Oracle, hauptsächlich auf einige gelegentliche neue Funktionen und pflegen bestehende Funktionen.
PostgreSQL bietet native SSL-Unterstützung für Verbindungen zur Verschlüsselung der Client/Server-Kommunikation. PSQL verfügt außerdem über Sicherheit auf Zeilenebene. MySQL ist äußerst sicher und umfasst mehrere Sicherheitsfunktionen.

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