SQLite vs MySQL vs PostgreSQL: Ein Vergleich von relationalen Datenbankmanagementsystemen

Einführung

Das relationale Datenmodell, das Daten in Tabellen von Zeilen und Spalten organisiert, dominiert in Datenbankverwaltungstools. Heutzutage gibt es andere Datenmodelle, darunter NoSQL und NewSQL, aber relationale Datenbankverwaltungssysteme (RDBMSs) bleiben weltweit dominant, um Daten zu speichern und zu verwalten.

In diesem Artikel werden drei der am weitesten verbreiteten Open-Source-RDBMSs verglichen und kontrastiert: SQLite, MySQL und PostgreSQL. Es wird insbesondere die Datenarten untersuchen, die jedes RDBMS verwendet, ihre Vor- und Nachteile sowie Situationen, in denen sie am besten optimiert sind.

A Bit About Database Management Systems

Datenbanken sind logisch modellierte Cluster von Informationen oder Daten. Ein Datenbankverwaltungssystem (DBMS) ist andererseits ein Computerprogramm, das mit einer Datenbank interagiert. Ein DBMS ermöglicht es Ihnen, den Zugriff auf eine Datenbank zu steuern, Daten zu schreiben, Abfragen auszuführen und alle anderen Aufgaben im Zusammenhang mit der Datenbankverwaltung durchzuführen.

Obwohl Datenbankverwaltungssysteme oft als „Datenbanken“ bezeichnet werden, sind die beiden Begriffe nicht austauschbar. Eine Datenbank kann jede Sammlung von Daten sein, nicht nur eine, die auf einem Computer gespeichert ist. Im Gegensatz dazu bezieht sich ein DBMS speziell auf die Software, die es Ihnen ermöglicht, mit einer Datenbank zu interagieren.

Alle Datenbankverwaltungssysteme haben ein zugrunde liegendes Modell, das festlegt, wie Daten gespeichert und abgerufen werden. Ein relationales Datenbankverwaltungssystem ist ein DBMS, das das relationale Datenmodell verwendet. In diesem relationalen Modell sind Daten in Tabellen organisiert. Tabellen werden im Kontext von RDBMSs formell als Relationen bezeichnet. Eine Relation ist eine Menge von Tupeln, die die Zeilen in einer Tabelle sind, und jedes Tupel teilt eine Reihe von Attributen, die die Spalten in einer Tabelle sind:

Die meisten relationalen Datenbanken verwenden Structured Query Language (SQL) zum Verwalten und Abfragen von Daten. Viele RDBMSs verwenden jedoch ihren eigenen speziellen Dialekt von SQL, der bestimmte Einschränkungen oder Erweiterungen haben kann. Diese Erweiterungen umfassen in der Regel zusätzliche Funktionen, die es Benutzern ermöglichen, komplexere Operationen durchzuführen als sie es sonst mit Standard-SQL könnten.

Hinweis: Der Begriff „Standard-SQL“ kommt mehrmals in diesem Leitfaden vor. SQL-Standards werden gemeinsam von der American National Standards Institute (ANSI), der International Organization for Standardization (ISO) und der International Electrotechnical Commission (IEC) gepflegt. Immer wenn in diesem Artikel von „Standard-SQL“ oder „dem SQL-Standard“ die Rede ist, bezieht er sich auf die aktuelle Version des von diesen Gremien veröffentlichten SQL-Standards.

Es sollte beachtet werden, dass der vollständige SQL-Standard groß und komplex ist: Die volle Kernkompatibilität von SQL:2011 erfordert 179 Funktionen. Aus diesem Grund unterstützen die meisten RDBMSs nicht den gesamten Standard, obwohl einige näher an der vollständigen Einhaltung sind als andere.

Datentypen und Einschränkungen

Jede Spalte wird einem Datentyp zugewiesen, der bestimmt, welche Arten von Einträgen in dieser Spalte erlaubt sind. Unterschiedliche RDBMSs implementieren unterschiedliche Datentypen, die nicht immer direkt austauschbar sind. Einige häufige Datentypen sind Datumsangaben, Zeichenfolgen, Ganzzahlen und Booleans.

Das Speichern von Ganzzahlen in einer Datenbank ist nuancierter als das Eintragen von Zahlen in eine Tabelle. Numerische Datentypen können entweder signiert sein, was bedeutet, dass sie sowohl positive als auch negative Zahlen darstellen können, oder unsigned, was bedeutet, dass sie nur positive Zahlen darstellen können. Zum Beispiel kann der Datentyp tinyint von MySQL 8 Bits an Daten halten, was 256 möglichen Werten entspricht. Der signierte Bereich dieses Datentyps reicht von -128 bis 127, während der ungesicherte Bereich von 0 bis 255 reicht.

Die Kontrolle darüber, welche Daten in eine Datenbank eingetragen werden dürfen, ist wichtig. Manchmal wird ein Einschränkung durch einen Datenbankadministrator auf eine Tabelle auferlegt, um zu begrenzen, welche Werte in sie eingetragen werden können. Eine Einschränkung gilt typischerweise für eine bestimmte Spalte, aber einige Einschränkungen können sich auch auf eine ganze Tabelle beziehen. Hier sind einige Einschränkungen, die in SQL üblicherweise verwendet werden:

  • EINDEUTIG: Durch die Anwendung dieser Einschränkung auf eine Spalte wird sichergestellt, dass keine zwei Einträge in dieser Spalte identisch sind.
  • NICHT NULL: Diese Einschränkung stellt sicher, dass eine Spalte keine NULL-Einträge hat.
  • PRIMÄRSCHLÜSSEL: Eine Kombination aus EINDEUTIG und NICHT NULL. Der PRIMÄRSCHLÜSSEL-Constraint stellt sicher, dass kein Eintrag in der Spalte NULL ist und dass jeder Eintrag eindeutig ist.
  • EXTERNER SCHLÜSSEL: Ein EXTERNER SCHLÜSSEL ist eine Spalte in einer Tabelle, die auf den PRIMÄRSCHLÜSSEL einer anderen Tabelle verweist. Diese Einschränkung wird verwendet, um zwei Tabellen miteinander zu verknüpfen. Einträge in der EXTERNER SCHLÜSSEL-Spalte müssen bereits in der übergeordneten PRIMÄRSCHLÜSSEL-Spalte vorhanden sein, damit der Schreibvorgang erfolgreich ist.
  • ÜBERPRÜFUNG: Diese Einschränkung begrenzt den Wertebereich, der in eine Spalte eingegeben werden kann. Wenn beispielsweise Ihre Anwendung nur für Bewohner von Alaska gedacht ist, könnten Sie eine ÜBERPRÜFUNG-Einschränkung für eine Postleitzahlspalte hinzufügen, um nur Einträge zwischen 99501 und 99950 zuzulassen.

Wenn Sie mehr über Datenbankmanagementsysteme erfahren möchten, lesen Sie unseren Artikel über Einen Vergleich von NoSQL-Datenbankmanagementsystemen und -Modellen.

Nachdem wir relationalen Datenbankmanagementsysteme im Allgemeinen behandelt haben, gehen wir zum ersten der drei Open-Source relationalen Datenbanken über, die in diesem Artikel behandelt werden: SQLite.

SQLite

SQLite ist ein eigenständiges, dateibasiertes und vollständig quelloffenes relationales Datenbankmanagementsystem, das für seine Portabilität, Zuverlässigkeit und starke Leistung auch in Umgebungen mit wenig Speicherplatz bekannt ist. Seine Transaktionen sind selbst bei Systemabstürzen oder Stromausfällen ACID-konform.

Die Website des SQLite-Projekts beschreibt es als „serverlose“ Datenbank. Die meisten relationalen Datenbank-Engines werden als Serverprozess implementiert, bei dem Programme über eine Interprozesskommunikation mit dem Host-Server kommunizieren, die Anfragen weiterleitet. Im Gegensatz dazu ermöglicht SQLite jedem Prozess, der auf die Datenbank zugreift, direkt auf die Datenbankdiskettendatei zu lesen und zu schreiben. Dies vereinfacht den Einrichtungsprozess von SQLite, da kein Bedarf besteht, einen Serverprozess zu konfigurieren. Ebenso ist keine Konfiguration für Programme erforderlich, die die SQLite-Datenbank verwenden werden: Alles, was sie benötigen, ist Zugriff auf die Festplatte.

SQLite ist kostenlos und quelloffen, und es ist keine spezielle Lizenz erforderlich, um es zu verwenden. Das Projekt bietet jedoch mehrere Erweiterungen an – jeweils gegen eine einmalige Gebühr -, die bei Kompression und Verschlüsselung helfen. Darüber hinaus bietet das Projekt verschiedene kommerzielle Supportpakete an, jeweils gegen eine jährliche Gebühr.

Unterstützte Datenarten von SQLite

SQLite erlaubt eine Vielzahl von Datenarten, die in die folgenden Speicherklassen organisiert sind:

Data Type Explanation
null Includes any NULL values.
integer Signed integers, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
real Real numbers, or floating point values, stored as 8-byte floating point numbers.
text Text strings stored using the database encoding, which can either be UTF-8, UTF-16BE or UTF-16LE.
blob Any blob of data, with every blob stored exactly as it was input.

In SQLite werden die Begriffe „Speicherklasse“ und „Datentyp“ als austauschbar betrachtet. Wenn Sie mehr über die Datenarten von SQLite und die Typenaffinität von SQLite erfahren möchten, lesen Sie die offizielle Dokumentation zu diesem Thema.

Vorteile von SQLite

  • Kleiner Platzbedarf: Wie der Name schon sagt, ist die SQLite-Bibliothek sehr leichtgewichtig. Obwohl der Speicherplatz je nach System, auf dem sie installiert ist, variieren kann, kann sie weniger als 600 KiB Platz beanspruchen. Außerdem ist sie vollständig eigenständig, was bedeutet, dass Sie keine externen Abhängigkeiten installieren müssen, damit SQLite funktioniert.
  • Benutzerfreundlich: SQLite wird manchmal als eine „zero-configuration“ Datenbank beschrieben, die sofort einsatzbereit ist. SQLite läuft nicht als Serverprozess, was bedeutet, dass er nie gestoppt, gestartet oder neu gestartet werden muss und keine Konfigurationsdateien enthält, die verwaltet werden müssen. Diese Funktionen helfen, den Weg von der Installation von SQLite bis zur Integration in eine Anwendung zu optimieren.
  • Portabel: Im Gegensatz zu anderen Datenbankmanagementsystemen, die Daten normalerweise als eine große Menge separater Dateien speichern, wird eine gesamte SQLite-Datenbank in einer einzigen Datei gespeichert. Diese Datei kann sich überall in einer Verzeichnishierarchie befinden und kann über Wechselmedien oder das Dateiübertragungsprotokoll freigegeben werden.

Nachteile von SQLite

  • Begrenzte Nebenläufigkeit: Obwohl mehrere Prozesse gleichzeitig auf eine SQLite-Datenbank zugreifen und Abfragen ausführen können, kann nur ein Prozess gleichzeitig Änderungen an der Datenbank vornehmen. Dies bedeutet, dass SQLite zwar eine größere Nebenläufigkeit als die meisten anderen eingebetteten Datenbankmanagementsysteme unterstützt, jedoch nicht so viel wie Client/Server-RDBMS wie MySQL oder PostgreSQL unterstützen kann.
  • Kein Benutzermanagement: Datenbanksysteme bieten oft Unterstützung für Benutzer oder verwaltete Verbindungen mit vordefinierten Zugriffsrechten auf die Datenbank und Tabellen. Da SQLite direkt in eine normale Datei auf der Festplatte liest und schreibt, gelten die üblichen Zugriffsberechtigungen des zugrunde liegenden Betriebssystems. Dies macht SQLite zu einer schlechten Wahl für Anwendungen, die mehrere Benutzer mit speziellen Zugriffsrechten erfordern.
  • Sicherheit: Eine Datenbank-Engine, die einen Server verwendet, kann in einigen Fällen besseren Schutz vor Fehlern in der Client-Anwendung bieten als eine serverlose Datenbank wie SQLite. Beispielsweise können Streupointer in einem Client nicht den Speicher auf dem Server beschädigen. Außerdem kann eine Client-Server-Datenbank aufgrund eines einzigen persistierenden Prozesses den Datenzugriff genauer steuern als eine serverlose Datenbank. Dies ermöglicht eine feinere Granularität der Sperrung und eine bessere Nebenläufigkeit.

Wann Sie SQLite verwenden sollten

  • Embedded-Anwendungen: SQLite ist eine gute Wahl für Datenbanken in Anwendungen, die Portabilität benötigen und keine zukünftige Erweiterung erfordern. Beispiele hierfür sind Einzelbenutzeranwendungen, lokale Anwendungen für Mobilgeräte oder Spiele.
  • Ersatz für den Festplattenzugriff: In Fällen, in denen eine Anwendung direkt Dateien auf die Festplatte lesen und schreiben muss, kann es vorteilhaft sein, SQLite für die zusätzliche Funktionalität und Einfachheit zu verwenden, die die Verwendung von SQL mit sich bringt.
  • Testen: Für viele Anwendungen kann es übertrieben sein, ihre Funktionalität mit einem DBMS zu testen, das einen zusätzlichen Serverprozess verwendet. SQLite verfügt über einen In-Memory-Modus, der verwendet werden kann, um Tests schnell ohne den Overhead tatsächlicher Datenbankoperationen auszuführen, was es zu einer idealen Wahl für Tests macht.

Wann man SQLite nicht verwenden sollte

  • Arbeiten mit großen Datenmengen: SQLite kann technisch gesehen eine Datenbank von bis zu 140 TB Größe unterstützen, solange Laufwerk und Dateisystem auch die Größenanforderungen der Datenbank unterstützen. Die SQLite-Website empfiehlt jedoch, dass jede Datenbank, die sich 1 TB nähert, in einer zentralisierten Client-Server-Datenbank untergebracht werden sollte, da eine SQLite-Datenbank dieser Größe oder größer schwer zu verwalten wäre.
  • Hohe Schreibvolumen: SQLite erlaubt nur eine Schreiboperation gleichzeitig, was seine Durchsatzleistung erheblich einschränkt. Wenn Ihre Anwendung viele Schreiboperationen oder mehrere gleichzeitige Schreiber erfordert, ist SQLite möglicherweise nicht ausreichend für Ihre Anforderungen.
  • Netzwerkzugriff erforderlich: Da SQLite eine serverlose Datenbank ist, bietet sie keinen direkten Netzwerkzugriff auf ihre Daten. Dieser Zugriff ist in die Anwendung integriert. Wenn sich die Daten in SQLite auf einer separaten Maschine von der Anwendung befinden, erfordert dies eine Hochgeschwindigkeitsverbindung zwischen dem Motor und der Festplatte über das Netzwerk. Dies ist eine teure, ineffiziente Lösung, und in solchen Fällen kann ein Client-Server-DBMS eine bessere Wahl sein.

MySQL

Laut dem DB-Engines Ranking ist MySQL seit Beginn der Erfassung der Datenbankpopularität auf der Website im Jahr 2012 das beliebteste Open-Source-RDBMS. Es ist ein funktionsreiches Produkt, das viele der größten Websites und Anwendungen der Welt antreibt, darunter Twitter, Facebook, Netflix und Spotify. Der Einstieg in MySQL ist relativ unkompliziert, nicht zuletzt dank seiner umfangreichen Dokumentation und der großen Gemeinschaft von Entwicklern, sowie der Vielzahl von online verfügbaren MySQL-bezogenen Ressourcen.

MySQL wurde für Geschwindigkeit und Zuverlässigkeit entwickelt, auf Kosten der vollständigen Einhaltung des Standard-SQL. Die MySQL-Entwickler arbeiten kontinuierlich an einer näheren Einhaltung des Standard-SQL, aber es hinkt immer noch anderen SQL-Implementierungen hinterher. Es wird jedoch mit verschiedenen SQL-Modi und Erweiterungen geliefert, die es näher an die Compliance heranführen.

Im Gegensatz zu Anwendungen, die SQLite verwenden, greifen Anwendungen, die eine MySQL-Datenbank verwenden, über einen separaten Daemon-Prozess darauf zu. Da der Serverprozess zwischen der Datenbank und anderen Anwendungen steht, ermöglicht er eine größere Kontrolle darüber, wer Zugriff auf die Datenbank hat.

MySQL hat eine Vielzahl von Third-Party-Anwendungen, Tools und integrierten Bibliotheken inspiriert, die ihre Funktionalität erweitern und die Arbeit damit erleichtern. Einige der häufiger verwendeten dieser Third-Party-Tools sind phpMyAdmin, DBeaver und HeidiSQL.

Unterstützte Datentypen von MySQL

Die Datentypen von MySQL können in drei Hauptkategorien eingeteilt werden: numerische Typen, Datums- und Zeitdatentypen und Zeichenfolgentypen.

Numerische Typen:

Data Type Explanation
tinyint A very small integer. The signed range for this numeric data type is -128 to 127, while the unsigned range is 0 to 255.
smallint A small integer. The signed range for this numeric type is -32768 to 32767, while the unsigned range is 0 to 65535.
mediumint A medium-sized integer. The signed range for this numeric data type is -8388608 to 8388607, while the unsigned range is 0 to 16777215.
int or integer A normal-sized integer. The signed range for this numeric data type is -2147483648 to 2147483647, while the unsigned range is 0 to 4294967295.
bigint A large integer. The signed range for this numeric data type is -9223372036854775808 to 9223372036854775807, while the unsigned range is 0 to 18446744073709551615.
float A small (single-precision) floating-point number.
double, double precision, or real A normal sized (double-precision) floating-point number.
dec, decimal, fixed, or numeric A packed fixed-point number. The display length of entries for this data type is defined when the column is created, and every entry adheres to that length.
bool or boolean A Boolean is a data type that only has two possible values, usually either true or false.
bit A bit value type for which you can specify the number of bits per value, from 1 to 64.

Datums- und Zeitdatentypen:

Data Type Explanation
date A date, represented as YYYY-MM-DD.
datetime A timestamp showing the date and time, displayed as YYYY-MM-DD HH:MM:SS.
timestamp A timestamp indicating the amount of time since the Unix epoch (00:00:00 on January 1, 1970).
time A time of day, displayed as HH:MM:SS.
year A year expressed in either a 2 or 4 digit format, with 4 digits being the default.

Zeichenfolgentypen:

Data Type Explanation
char A fixed-length string; entries of this type are padded on the right with spaces to meet the specified length when stored.
varchar A string of variable length.
binary Similar to the char type, but a binary byte string of a specified length rather than a nonbinary character string.
varbinary Similar to the varchar type, but a binary byte string of a variable length rather than a nonbinary character string.
blob A binary string with a maximum length of 65535 (2^16 – 1) bytes of data.
tinyblob A blob column with a maximum length of 255 (2^8 – 1) bytes of data.
mediumblob A blob column with a maximum length of 16777215 (2^24 – 1) bytes of data.
longblob A blob column with a maximum length of 4294967295 (2^32 – 1) bytes of data.
text A string with a maximum length of 65535 (2^16 – 1) characters.
tinytext A text column with a maximum length of 255 (2^8 – 1) characters.
mediumtext A text column with a maximum length of 16777215 (2^24 – 1) characters.
longtext A text column with a maximum length of 4294967295 (2^32 – 1) characters.
enum An enumeration, which is a string object that takes a single value from a list of values that are declared when the table is created.
set Similar to an enumeration, a string object that can have zero or more values, each of which must be chosen from a list of allowed values that are specified when the table is created.

Vorteile von MySQL

  • Beliebtheit und Benutzerfreundlichkeit: Als eines der weltweit beliebtesten Datenbanksysteme gibt es keinen Mangel an Datenbankadministratoren, die Erfahrung mit der Arbeit mit MySQL haben. Ebenso gibt es reichlich Dokumentation in gedruckter Form und online darüber, wie man eine MySQL-Datenbank installiert und verwaltet. Dazu gehören eine Reihe von Tools von Drittanbietern – wie phpMyAdmin -, die den Prozess vereinfachen sollen, mit der Datenbank zu beginnen.
  • Sicherheit: MySQL wird mit einem Skript installiert, das Ihnen hilft, die Sicherheit Ihrer Datenbank zu verbessern, indem es den Sicherheitsgrad des Passworts für die Installation festlegt, ein Passwort für den root-Benutzer definiert, anonyme Konten entfernt und Testdatenbanken entfernt, die standardmäßig für alle Benutzer zugänglich sind. Im Gegensatz zu SQLite unterstützt MySQL auch die Benutzerverwaltung und ermöglicht es Ihnen, Zugriffsrechte benutzerweise zu gewähren.
  • Geschwindigkeit: Indem sie sich entschieden haben, bestimmte Funktionen von SQL nicht zu implementieren, konnten die MySQL-Entwickler die Geschwindigkeit priorisieren. Während neuere Benchmark-Tests zeigen, dass andere relationale Datenbankmanagementsysteme wie PostgreSQL mit MySQL in Bezug auf Geschwindigkeit mithalten oder zumindest nahe kommen können, hat MySQL dennoch den Ruf als äußerst schnelle Datenbanklösung.
  • Replikation: MySQL unterstützt verschiedene Arten von Replikation, was die Praxis des Austauschs von Informationen zwischen zwei oder mehr Hosts zur Verbesserung von Zuverlässigkeit, Verfügbarkeit und Ausfallsicherheit ist. Dies ist hilfreich für die Einrichtung einer Datenbanksicherungslösung oder horizontales Skalieren einer Datenbank.

Nachteile von MySQL

  • Bekannte Einschränkungen: Da MySQL für Geschwindigkeit und Benutzerfreundlichkeit konzipiert wurde und nicht für vollständige SQL-Konformität, hat es bestimmte funktionale Einschränkungen. Zum Beispiel fehlt es an Unterstützung für FULL JOIN-Klauseln.
  • Lizenzierung und proprietäre Funktionen: MySQL ist eine dual-lizenzierte Software, mit einer kostenlosen und Open-Source-Community-Edition, lizenziert unter GPLv2 und mehreren kostenpflichtigen kommerziellen Editionen, die unter proprietären Lizenzen veröffentlicht werden. Aufgrund dessen sind einige Funktionen und Plugins nur für die proprietären Editionen verfügbar.
  • Verlangsamte Entwicklung: Seit das MySQL-Projekt 2008 von Sun Microsystems übernommen wurde und später 2009 von der Oracle Corporation, gibt es Beschwerden von Nutzern, dass sich der Entwicklungsprozess für das DBMS deutlich verlangsamt hat, da die Community nicht mehr schnell genug auf Probleme reagieren und Änderungen umsetzen kann.

Wann man MySQL verwenden sollte

  • Verteilte Operationen: Die Replikationsunterstützung von MySQL macht es zu einer ausgezeichneten Wahl für verteilte Datenbankkonfigurationen wie primär-sekundär oder primär-primär-Architekturen.
  • Websites und Webanwendungen: MySQL treibt viele Websites und Anwendungen im Internet an. Dies liegt zum großen Teil daran, wie einfach es ist, eine MySQL-Datenbank zu installieren und einzurichten, sowie an ihrer insgesamt hohen Geschwindigkeit und Skalierbarkeit auf lange Sicht.
  • Erwartetes zukünftiges Wachstum: Die Replikationsunterstützung von MySQL kann das horizontale Skalieren erleichtern. Außerdem ist es ein relativ unkomplizierter Prozess, auf ein kommerzielles MySQL-Produkt wie MySQL Cluster zu aktualisieren, das automatisches Sharding unterstützt, einen weiteren Prozess des horizontalen Skalierens.

Wann man MySQL nicht verwenden sollte

  • SQL-Konformität ist erforderlich: Da MySQL nicht versucht, den vollständigen SQL-Standard umzusetzen, ist dieses Werkzeug nicht vollständig SQL-konform. Wenn eine vollständige oder auch nur annähernd vollständige SQL-Konformität für Ihren Anwendungsfall unerlässlich ist, sollten Sie möglicherweise ein DBMS verwenden, das dies besser erfüllt.
  • Parallelität und große Datenmengen: Obwohl MySQL im Allgemeinen gut bei leseintensiven Operationen abschneidet, können gleichzeitige Lese-Schreibzugriffe problematisch sein. Wenn Ihre Anwendung viele Benutzer hat, die gleichzeitig Daten schreiben, könnte ein anderes RDBMS wie PostgreSQL eine bessere Wahl für die Datenbank sein.

PostgreSQL

PostgreSQL, auch als Postgres bekannt, bezeichnet sich selbst als „die fortschrittlichste Open-Source-Relationendatenbank der Welt“. Es wurde mit dem Ziel entwickelt, hochgradig erweiterbar und standardkonform zu sein. PostgreSQL ist eine objektrelationale Datenbank, was bedeutet, dass es zwar hauptsächlich eine relationale Datenbank ist, aber auch Funktionen wie Tabellenvererbung und Funktionsüberladung enthält, die eher mit Objektdatenbanken assoziiert werden.

Postgres ist in der Lage, mehrere Aufgaben gleichzeitig effizient zu bewältigen, eine Eigenschaft, die als Parallelität bekannt ist. Dies wird ohne Lese-Sperren erreicht, dank seiner Implementierung von Multiversion Concurrency Control (MVCC), die die Atomarität, Konsistenz, Isolation und Dauerhaftigkeit seiner Transaktionen sicherstellt, auch bekannt als ACID-Konformität.

PostgreSQL wird nicht so weit verbreitet genutzt wie MySQL, aber es gibt dennoch eine Reihe von Tools und Bibliotheken von Drittanbietern, die die Arbeit mit PostgreSQL vereinfachen sollen, darunter pgAdmin und Postbird.

Unterstützte Datenarten von PostgreSQL

PostgreSQL unterstützt numerische, Zeichen- und Datum- und Zeitdatentypen wie MySQL. Darüber hinaus unterstützt es Datentypen für geometrische Formen, Netzwerkadressen, Bitstrings, Textsuchen und JSON-Einträge sowie mehrere eigenwillige Datentypen.

Numerische Typen:

Data Type Explanation
bigint A signed 8 byte integer.
bigserial An auto-incrementing 8 byte integer.
double precision An 8 byte double precision floating-point number.
integer A signed 4 byte integer.
numeric or decimal A number of selectable precision, recommended for use in cases where exactness is crucial, such as monetary amounts.
real A 4 byte single precision floating-point number.
smallint A signed 2 byte integer.
smallserial An auto-incrementing 2 byte integer.
serial An auto-incrementing 4 byte integer.

Zeichentypen:

Data Type Explanation
character A character string with a specified fixed length.
character varying or varchar A character string with a variable but limited length.
text A character string of a variable, unlimited length.

Datum- und Zeit-Typen:

Data Type Explanation
date A calendar date consisting of the day, month, and year.
interval A time span.
time or time without time zone A time of day, not including the time zone.
time with time zone A time of day, including the time zone.
timestamp or timestamp without time zone A date and time, not including the time zone.
timestamp with time zone A date and time, including the time zone.

Geometrische Typen:

Data Type Explanation
box A rectangular box on a plane.
circle A circle on a plane.
line An infinite line on a plane.
lseg A line segment on a plane.
path A geometric path on a plane.
point A geometric point on a plane.
polygon A closed geometric path on a plane.

Netzwerkadress-Typen:

Data Type Explanation
cidr An IPv4 or IPv6 network address.
inet An IPv4 or IPv6 host address.
macaddr A Media Access Control (MAC) address.

Bit-String-Typen:

Data Type Explanation
bit A fixed-length bit string.
bit varying A variable-length bit string.

Textsuch-Typen:

Data Type Explanation
tsquery A text search query.
tsvector A text search document.

JSON-Typen:

Data Type Explanation
json Textual JSON data.
jsonb Decomposed binary JSON data.

Andere Datentypen:

Data Type Explanation
boolean A logical Boolean, representing either true or false.
bytea Short for “byte array”, this type is used for binary data.
money An amount of currency.
pg_lsn A PostgreSQL Log Sequence Number.
txid_snapshot A user-level transaction ID snapshot.
uuid A universally unique identifier.
xml XML data.

Vorteile von PostgreSQL

  • SQL-Konformität: PostgreSQL strebt stärker als SQLite oder MySQL danach, sich eng an die SQL-Standards zu halten. Laut der offiziellen PostgreSQL-Dokumentation unterstützt PostgreSQL 160 der 179 für eine vollständige SQL:2011-Konformität erforderlichen Funktionen sowie eine lange Liste optionaler Funktionen.
  • Open-Source und Community-getrieben: Ein vollständig Open-Source-Projekt, dessen Quellcode von einer großen und engagierten Community entwickelt wird. Ebenso pflegt und trägt die Postgres-Community zu zahlreichen Online-Ressourcen bei, die beschreiben, wie man mit dem DBMS arbeitet, einschließlich der offiziellen Dokumentation, des PostgreSQL-Wikis und verschiedener Online-Foren.
  • Erweiterbar: Benutzer können PostgreSQL programmgesteuert und spontan durch seinen kataloggesteuerten Betrieb und seine Verwendung von dynamischem Laden erweitern. Man kann eine Objektcode-Datei, wie eine gemeinsam genutzte Bibliothek, benennen, und PostgreSQL wird sie bei Bedarf laden.

Nachteile von PostgreSQL

  • Speicherleistung: Für jede neue Client-Verbindung erstellt PostgreSQL einen neuen Prozess. Jeder neue Prozess erhält etwa 10 MB Speicher, was sich schnell summiert für Datenbanken mit vielen Verbindungen. Folglich ist PostgreSQL für einfache Lesevorgänge mit hoher Last in der Regel weniger leistungsfähig als andere RDBMS wie MySQL.
  • Beliebtheit: Obwohl PostgreSQL in den letzten Jahren häufiger verwendet wird, hinkt es historisch gesehen MySQL in Bezug auf Beliebtheit hinterher. Eine Folge davon ist, dass es immer noch weniger Tools von Drittanbietern gibt, die bei der Verwaltung einer PostgreSQL-Datenbank helfen können. Ebenso gibt es nicht so viele Datenbankadministratoren mit Erfahrung in der Verwaltung einer Postgres-Datenbank im Vergleich zu denen mit MySQL-Erfahrung.

Wann PostgreSQL verwenden

  • Datenintegrität ist wichtig: PostgreSQL ist seit 2001 vollständig ACID-konform und implementiert eine Mehrversionen-Gleichzeitigkeitsteuerung, um sicherzustellen, dass die Daten konsistent bleiben. Daher ist es eine gute Wahl für RDBMS, wenn Datenintegrität entscheidend ist.
  • Integration mit anderen Tools: PostgreSQL ist mit einer Vielzahl von Programmiersprachen und Plattformen kompatibel. Das bedeutet, dass es wahrscheinlich einfacher ist, Ihre Datenbank auf ein anderes Betriebssystem zu migrieren oder sie mit einem bestimmten Tool zu integrieren, wenn Sie eine PostgreSQL-Datenbank verwenden, als mit einem anderen DBMS.
  • Komplexe Operationen: Postgres unterstützt Abfragepläne, die mehrere CPUs nutzen können, um Abfragen schneller zu beantworten. Dies, zusammen mit seiner starken Unterstützung für mehrere gleichzeitige Schreibzugriffe, macht es zu einer hervorragenden Wahl für komplexe Operationen wie Data Warehousing und Online-Transaktionsverarbeitung.

Wann sollte man PostgreSQL nicht verwenden?

  • Geschwindigkeit ist entscheidend: Auf Kosten der Geschwindigkeit wurde PostgreSQL mit Erweiterbarkeit und Kompatibilität im Hinterkopf entwickelt. Wenn Ihr Projekt die schnellstmöglichen Leseoperationen erfordert, ist PostgreSQL möglicherweise nicht die beste Wahl für ein DBMS.
  • Einfache Einrichtungen: Aufgrund seines großen Funktionsumfangs und seiner starken Einhaltung von Standard-SQL kann Postgres für einfache Datenbankeinrichtungen überdimensioniert sein. Für leseintensive Operationen, bei denen Geschwindigkeit erforderlich ist, ist MySQL typischerweise die praktischere Wahl.
  • Komplexe Replikation: Obwohl PostgreSQL eine starke Unterstützung für Replikation bietet, ist dies immer noch eine relativ neue Funktion. Einige Konfigurationen – wie zum Beispiel eine Primär-Primär-Architektur – sind nur mit Erweiterungen möglich. Replikation ist eine ausgereiftere Funktion bei MySQL, und viele Benutzer empfinden die Replikation von MySQL als einfacher zu implementieren, insbesondere für diejenigen, die nicht über die erforderliche Datenbank- und Systemverwaltungserfahrung verfügen.

Fazit

Heute sind SQLite, MySQL und PostgreSQL die drei beliebtesten Open-Source-Relationen-Datenbankverwaltungssysteme der Welt. Jedes hat seine eigenen einzigartigen Funktionen und Einschränkungen und excels in bestimmten Szenarien. Es gibt viele Variablen, die bei der Entscheidung für ein RDBMS eine Rolle spielen, und die Wahl ist selten so einfach wie die Auswahl des schnellsten oder desjenigen mit den meisten Funktionen. Das nächste Mal, wenn Sie eine relationale Datenbanklösung benötigen, sollten Sie diese und andere Tools gründlich recherchieren, um dasjenige zu finden, das Ihren Anforderungen am besten entspricht.

Wenn Sie mehr über SQL und dessen Verwendung zur Verwaltung einer relationalen Datenbank erfahren möchten, empfehlen wir Ihnen, unser „Wie man eine SQL-Datenbank verwaltet“-Spickzettel zu konsultieren. Andererseits, wenn Sie etwas über nicht-relationale (oder NoSQL) Datenbanken erfahren möchten, werfen Sie einen Blick auf unseren „Vergleich von NoSQL-Datenbankverwaltungssystemen“.

Referenzen

Source:
https://www.digitalocean.com/community/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems