SQLite vs MySQL vs PostgreSQL: Een vergelijking van relationele databasebeheersystemen

Inleiding

Het relationele datamodel, dat gegevens organiseert in tabellen van rijen en kolommen, domineert in databasebeheertools. Tegenwoordig zijn er andere datamodellen, waaronder NoSQL en NewSQL, maar relationele databasebeheersystemen (RDBMS’s) blijven dominant voor het opslaan en beheren van gegevens wereldwijd.

Dit artikel vergelijkt en contrasteert drie van de meest geïmplementeerde open-source RDBMS’s: SQLite, MySQL en PostgreSQL. Specifiek zal het de gegevenstypen onderzoeken die elk RDBMS gebruikt, hun voor- en nadelen, en situaties waarin ze het best zijn geoptimaliseerd.

A Bit About Database Management Systems

Databases zijn logisch gemodelleerde clusters van informatie, of gegevens. Een databasebeheersysteem (DBMS) is daarentegen een computerprogramma dat communiceert met een database. Een DBMS stelt u in staat om toegang tot een database te regelen, gegevens te schrijven, query’s uit te voeren en alle andere taken met betrekking tot databasebeheer uit te voeren.

Hoewel databasesystemen vaak worden aangeduid als “databases”, zijn de twee termen niet uitwisselbaar. Een database kan elke verzameling gegevens zijn, niet alleen die opgeslagen op een computer. In tegenstelling hiermee verwijst een DBMS specifiek naar de software waarmee u kunt interageren met een database.

Alle databasesystemen hebben een onderliggend model dat bepaalt hoe gegevens worden opgeslagen en benaderd. Een relationeel databasesysteem is een DBMS dat het relationele gegevensmodel gebruikt. In dit relationele model zijn gegevens georganiseerd in tabellen. Tabellen, in de context van RDBMS’en, worden formeel aangeduid als relaties. Een relatie is een verzameling tuple, wat de rijen in een tabel zijn, en elke tuple deelt een set attributen, wat de kolommen in een tabel zijn:

De meeste relationele databases gebruiken structured query language (SQL) om gegevens te beheren en te bevragen. Veel RDBMS’en gebruiken echter hun eigen specifieke dialect van SQL, dat bepaalde beperkingen of uitbreidingen kan hebben. Deze uitbreidingen omvatten meestal extra functies waarmee gebruikers complexere bewerkingen kunnen uitvoeren dan ze anders zouden kunnen met standaard SQL.

Opmerking: De term “standaard SQL” komt verschillende keren voor in deze handleiding. SQL-standaarden worden gezamenlijk onderhouden door het American National Standards Institute (ANSI), de International Organization for Standardization (ISO) en de International Electrotechnical Commission (IEC). Telkens wanneer dit artikel verwijst naar “standaard SQL” of “de SQL-standaard”, wordt verwezen naar de huidige versie van de SQL-standaard gepubliceerd door deze instanties.

Het moet worden opgemerkt dat de volledige SQL-standaard groot en complex is: volledige kernconformiteit met SQL:2011 vereist 179 functies. Hierdoor ondersteunen de meeste RDBMS’s niet de volledige standaard, hoewel sommige dichter bij volledige conformiteit komen dan andere.

Data Typen en Beperkingen

Elke kolom krijgt een datatype toegewezen dat dicteert welk soort invoer is toegestaan in die kolom. Verschillende RDBMS’s implementeren verschillende datatypes, die niet altijd direct uitwisselbaar zijn. Enkele veelvoorkomende datatypen zijn datums, strings, gehele getallen en Booleans.

Het opslaan van gehele getallen in een database is genuanceerder dan het plaatsen van getallen in een tabel. Numerieke datatypen kunnen ofwel getekend zijn, wat betekent dat ze zowel positieve als negatieve getallen kunnen vertegenwoordigen, ofwel ongetekend, wat betekent dat ze alleen positieve getallen kunnen vertegenwoordigen. Bijvoorbeeld, het datatype tinyint van MySQL kan 8 bits aan gegevens bevatten, wat neerkomt op 256 mogelijke waarden. Het bereik van dit datatype met teken is van -128 tot 127, terwijl het bereik zonder teken van 0 tot 255 loopt.

Het kunnen controleren welke gegevens zijn toegestaan in een database is belangrijk. Soms legt een databasebeheerder een beperking op aan een tabel om te beperken welke waarden erin kunnen worden ingevoerd. Een beperking is meestal van toepassing op één specifieke kolom, maar sommige beperkingen kunnen ook van toepassing zijn op een hele tabel. Hier zijn enkele veelgebruikte beperkingen in SQL:

  • UNIQUE: Door deze beperking toe te passen op een kolom wordt ervoor gezorgd dat geen twee items in die kolom identiek zijn.
  • NOT NULL: Deze beperking zorgt ervoor dat een kolom geen NULL-items heeft.
  • PRIMARY KEY: Een combinatie van UNIQUE en NOT NULL, de PRIMARY KEY-beperking zorgt ervoor dat geen enkel item in de kolom NULL is en dat elk item uniek is.
  • FOREIGN KEY: Een FOREIGN KEY is een kolom in één tabel die verwijst naar de PRIMARY KEY van een andere tabel. Deze beperking wordt gebruikt om twee tabellen met elkaar te verbinden. Items in de FOREIGN KEY-kolom moeten al bestaan in de ouder PRIMARY KEY-kolom voor het schrijfproces om te slagen.
  • CHECK: Deze beperking beperkt het bereik van waarden die kunnen worden ingevoerd in een kolom. Als bijvoorbeeld uw toepassing alleen bedoeld is voor inwoners van Alaska, kunt u een CHECK-beperking toevoegen aan een postcodekolom om alleen invoer tussen 99501 en 99950 toe te staan.

Als u meer wilt weten over databasesystemen voor gegevensbeheer, bekijk dan ons artikel over Een vergelijking van NoSQL-databasesystemen en -modellen.

Nu we de relationele databasesystemen in het algemeen hebben behandeld, gaan we verder met de eerste van de drie open-source relationele databases die in dit artikel worden behandeld: SQLite.

SQLite

SQLite is een op zichzelf staand, op bestanden gebaseerd en volledig open-source RDBMS dat bekend staat om zijn draagbaarheid, betrouwbaarheid en sterke prestaties, zelfs in omgevingen met weinig geheugen. Zijn transacties zijn ACID-conform, zelfs in gevallen waar het systeem crasht of te maken krijgt met een stroomstoring.

De website van het SQLite-project beschrijft het als een “serverloze” database. De meeste relationele database-engines worden geïmplementeerd als een serverproces waarbij programma’s communiceren met de hostserver via een interprocescommunicatie die verzoeken doorgeeft. In tegenstelling hiermee staat SQLite toe dat elk proces dat toegang heeft tot de database rechtstreeks kan lezen en schrijven naar het database-schijfbestand. Dit vereenvoudigt het installatieproces van SQLite, aangezien het de noodzaak elimineert om een serverproces te configureren. Op dezelfde manier is er geen configuratie nodig voor programma’s die de SQLite-database zullen gebruiken: het enige wat ze nodig hebben is toegang tot de schijf.

SQLite is gratis en open-source software, en er is geen speciale licentie vereist om het te gebruiken. Het project biedt echter verschillende extensies aan — elk voor eenmalige kosten — die helpen bij compressie en encryptie. Daarnaast biedt het project verschillende commerciële ondersteuningspakketten aan, elk voor een jaarlijkse vergoeding.

Ondersteunde gegevenstypen van SQLite

SQLite biedt een verscheidenheid aan gegevenstypen, georganiseerd in de volgende opslagklassen:

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 de context van SQLite worden de termen “opslagklasse” en “gegevenstype” als onderling uitwisselbaar beschouwd. Als je meer wilt weten over de gegevenstypen van SQLite en de type-affiniteit van SQLite, bekijk dan de officiële documentatie over het onderwerp.

Voordelen van SQLite

  • Kleine footprint: Zoals de naam al aangeeft, is de SQLite-bibliotheek zeer lichtgewicht. Hoewel de ruimte die het inneemt varieert afhankelijk van het systeem waarop het is geïnstalleerd, kan het minder dan 600KiB aan ruimte in beslag nemen. Bovendien is het volledig zelfstandig, wat betekent dat er geen externe afhankelijkheden zijn die je op je systeem moet installeren voor SQLite om te werken.
  • Gebruiksvriendelijk: SQLite wordt soms beschreven als een “zero-configuration” database die direct uit de doos klaar is voor gebruik. SQLite draait niet als een serverproces, wat betekent dat het nooit hoeft te worden gestopt, gestart of opnieuw opgestart en geen configuratiebestanden heeft die moeten worden beheerd. Deze functies helpen het pad te stroomlijnen van het installeren van SQLite tot het integreren ervan met een applicatie.
  • Portable: In tegenstelling tot andere databasesystemen, die meestal gegevens opslaan als een grote batch aparte bestanden, wordt een hele SQLite-database opgeslagen in één bestand. Dit bestand kan overal in een directorystructuur worden geplaatst en kan worden gedeeld via verwisselbare media of het bestandsoverdrachtsprotocol.

Nadelen van SQLite

  • Beperkte gelijktijdigheid: Hoewel meerdere processen tegelijkertijd toegang kunnen hebben tot en vragen kunnen stellen aan een SQLite-database, kan slechts één proces tegelijkertijd wijzigingen aanbrengen in de database. Dit betekent dat hoewel SQLite een grotere gelijktijdigheid ondersteunt dan de meeste andere ingebedde databasesystemen, het niet zoveel kan ondersteunen als client/server RDBMS’en zoals MySQL of PostgreSQL.
  • Geen gebruikersbeheer: Database systemen komen vaak met ondersteuning voor gebruikers, of beheerde verbindingen met vooraf gedefinieerde toegangsrechten tot de database en tabellen. Omdat SQLite rechtstreeks naar een gewoon schijfbestand leest en schrijft, zijn de enige van toepassing zijnde toegangsrechten de typische toegangsrechten van het onderliggende besturingssysteem. Dit maakt SQLite een slechte keuze voor toepassingen die meerdere gebruikers met speciale toegangsrechten vereisen.
  • Beveiliging: Een database-engine die een server gebruikt, kan in sommige gevallen betere bescherming bieden tegen fouten in de clienttoepassing dan een serverloze database zoals SQLite. Bijvoorbeeld, losse pointers in een client kunnen geen geheugen op de server beschadigen. Ook kan een server, omdat het een enkel persistent proces is, met meer precisie de toegang tot gegevens regelen dan een serverloze database. Dit maakt meer fijnmazige vergrendeling mogelijk en zorgt voor betere gelijktijdigheid.

Wanneer SQLite te gebruiken

  • Ingebouwde toepassingen: SQLite is een uitstekende keuze voor databases voor toepassingen die draagbaarheid vereisen en geen toekomstige uitbreiding nodig hebben. Voorbeelden zijn single-user lokale toepassingen, mobiele toepassingen of games.
  • Vervanging van schijftoegang: In gevallen waarin een toepassing bestanden rechtstreeks naar de schijf moet lezen en schrijven, kan het voordelig zijn om SQLite te gebruiken vanwege de aanvullende functionaliteit en eenvoud die gepaard gaat met het gebruik van SQL.
  • Testen: Voor veel toepassingen kan het overdreven zijn om hun functionaliteit te testen met een DBMS dat een extra serverproces gebruikt. SQLite heeft een in-memory modus die kan worden gebruikt om tests snel uit te voeren zonder de overhead van daadwerkelijke databasebewerkingen, waardoor het een ideale keuze is voor testen.

Wanneer SQLite niet te gebruiken

  • Werken met veel gegevens: SQLite kan technisch gezien een database tot 140TB groot ondersteunen, zolang de harde schijf en het bestandssysteem ook voldoen aan de groottevereisten van de database. Echter, de SQLite website raadt aan dat elke database die de 1TB nadert, wordt ondergebracht op een gecentraliseerde client-server database, omdat een SQLite-database van die omvang of groter moeilijk te beheren zou zijn.
  • Hoge schrijfvolumes: SQLite staat slechts één schrijfbewerking tegelijk toe, wat de doorvoer aanzienlijk beperkt. Als uw toepassing veel schrijfbewerkingen of meerdere gelijktijdige schrijvers vereist, is SQLite mogelijk niet voldoende voor uw behoeften.
  • Toegang tot het netwerk is vereist: Omdat SQLite een serverloze database is, biedt het geen directe netwerktoegang tot zijn gegevens. Deze toegang is ingebouwd in de applicatie. Als de gegevens in SQLite zich op een aparte machine bevinden van de applicatie, zal dit een hoogbandbreedtemotor-naar-schijfverbinding over het netwerk vereisen. Dit is een kostbare, inefficiënte oplossing, en in dergelijke gevallen kan een client-server DBMS een betere keuze zijn.

MySQL

Volgens de DB-Engines Ranking is MySQL sinds de start van het bijhouden van de populariteit van databases in 2012 het meest populaire open-source RDBMS geweest. Het is een product met veel functies dat veel van ’s werelds grootste websites en applicaties aandrijft, waaronder Twitter, Facebook, Netflix en Spotify. Aan de slag gaan met MySQL is relatief eenvoudig, mede dankzij zijn uitgebreide documentatie en grote gemeenschap van ontwikkelaars, evenals de overvloed aan online bronnen over MySQL.

MySQL is ontworpen voor snelheid en betrouwbaarheid, ten koste van volledige naleving van de standaard SQL. De MySQL-ontwikkelaars werken voortdurend aan een nauwere naleving van de standaard SQL, maar het loopt nog steeds achter op andere SQL-implementaties. Het wordt echter geleverd met verschillende SQL-modi en extensies die het dichter bij de naleving brengen.

In tegenstelling tot applicaties die SQLite gebruiken, hebben applicaties die een MySQL-database gebruiken, toegang via een apart daemon-proces. Omdat het serverproces tussen de database en andere applicaties staat, biedt het een grotere controle over wie toegang heeft tot de database.

MySQL heeft een overvloed aan third-party applicaties, tools en geïntegreerde bibliotheken geïnspireerd die de functionaliteit uitbreiden en helpen het werken ermee gemakkelijker te maken. Enkele van de meer gebruikte van deze third-party tools zijn phpMyAdmin, DBeaver, en HeidiSQL.

Ondersteunde datatypen van MySQL

De datatypen van MySQL kunnen worden ingedeeld in drie brede categorieën: numerieke typen, datums- en tijdstypen, en stringtypen.

Numerieke 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.

Datum- en tijdstypen:

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.

Stringtypen:

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.

Voordelen van MySQL

  • Populariteit en gebruiksgemak: Als een van ’s werelds meest populaire databasesystemen is er geen tekort aan databasebeheerders die ervaring hebben met het werken met MySQL. Evenzo is er een overvloed aan documentatie in druk en online over hoe u een MySQL-database installeert en beheert. Dit omvat een aantal tools van derden — zoals phpMyAdmin — die tot doel hebben het proces van het starten met de database te vereenvoudigen.
  • Beveiliging: MySQL wordt geleverd met een script dat u helpt de beveiliging van uw database te verbeteren door het beveiligingsniveau van het wachtwoord van de installatie in te stellen, een wachtwoord voor de root-gebruiker te definiëren, anonieme accounts te verwijderen en testdatabases te verwijderen die standaard toegankelijk zijn voor alle gebruikers. Ook ondersteunt MySQL, in tegenstelling tot SQLite, gebruikersbeheer en kunt u toegangsrechten verlenen op gebruikersniveau.
  • Snelheid: Door ervoor te kiezen bepaalde functies van SQL niet te implementeren, waren de ontwikkelaars van MySQL in staat snelheid te prioriteren. Hoewel meer recente benchmarktests laten zien dat andere RDBMS’en zoals PostgreSQL qua snelheid kunnen evenaren of in ieder geval dichtbij MySQL kunnen komen, behoudt MySQL nog steeds een reputatie als een uiterst snel databasesysteem.
  • Reproductie: MySQL ondersteunt verschillende soorten reproductie, wat de praktijk is van het delen van informatie over twee of meer hosts om de betrouwbaarheid, beschikbaarheid en fouttolerantie te verbeteren. Dit is nuttig voor het opzetten van een databaseback-upoplossing of voor het schaalbaar maken van een database.

Nadelen van MySQL

  • Bekende beperkingen: Omdat MySQL is ontworpen voor snelheid en gebruiksgemak in plaats van volledige SQL-conformiteit, heeft het bepaalde functionele beperkingen. Zo ontbreekt ondersteuning voor FULL JOIN-clausules.
  • Licenties en eigen functies: MySQL is twee-licentie software, met een gratis en open-source community-editie gelicentieerd onder GPLv2 en verschillende betaalde commerciële edities uitgebracht onder eigen licenties. Hierdoor zijn sommige functies en plugins alleen beschikbaar voor de eigen edities.
  • Vertraagde ontwikkeling: Sinds het MySQL-project werd overgenomen door Sun Microsystems in 2008, en later door Oracle Corporation in 2009, zijn er klachten geweest van gebruikers dat het ontwikkelingsproces voor het DBMS aanzienlijk is vertraagd, omdat de gemeenschap niet langer snel kan reageren op problemen en veranderingen kan doorvoeren.

Wanneer MySQL te gebruiken

  • Gedistribueerde operaties: De replicatie-ondersteuning van MySQL maakt het een uitstekende keuze voor gedistribueerde databaseopstellingen zoals primaire-secondaire of primaire-primaire architecturen.
  • Websites en webapplicaties: MySQL drijft veel websites en applicaties op internet aan. Dit komt grotendeels door hoe eenvoudig het is om een MySQL-database te installeren en in te stellen, evenals zijn algehele snelheid en schaalbaarheid op de lange termijn.
  • Verwachte toekomstige groei: De replicatie-ondersteuning van MySQL kan horizontale schaling vergemakkelijken. Bovendien is het een relatief eenvoudig proces om te upgraden naar een commercieel MySQL-product, zoals MySQL Cluster, dat automatische sharding ondersteunt, een ander proces voor horizontale schaling.

Wanneer MySQL niet te gebruiken

  • SQL-conformiteit is vereist: Aangezien MySQL niet probeert om de volledige SQL-standaard te implementeren, is deze tool niet volledig SQL-compatibel. Als volledige of zelfs bijna-volledige SQL-conformiteit een vereiste is voor uw gebruikssituatie, wilt u mogelijk een DBMS gebruiken dat meer volledig compatibel is.
  • Concurrentie en grote gegevensvolumes: Hoewel MySQL over het algemeen goed presteert bij leesintensieve bewerkingen, kunnen gelijktijdige lees-schrijfbewerkingen problematisch zijn. Als uw toepassing veel gebruikers zal hebben die tegelijkertijd gegevens naar het schrijven, kan een ander RDBMS zoals PostgreSQL een betere keuze van database zijn.

PostgreSQL

PostgreSQL, ook bekend als Postgres, noemt zichzelf “de meest geavanceerde open-source relationele database ter wereld.” Het is gemaakt met als doel zeer uitbreidbaar en compatibel te zijn met standaarden. PostgreSQL is een object-relationele database, wat betekent dat hoewel het in de eerste plaats een relationele database is, het ook functies bevat – zoals tabelovererving en functieoverbelasting – die vaker worden geassocieerd met objectdatabases.

Postgres is in staat om efficiënt meerdere taken tegelijkertijd te behandelen, een kenmerk dat bekend staat als gelijktijdigheid. Het bereikt dit zonder leesvergrendelingen dankzij de implementatie van Multiversion Concurrency Control (MVCC), wat de atomiciteit, consistentie, isolatie en duurzaamheid van de transacties garandeert, ook bekend als ACID-naleving.

PostgreSQL wordt niet zo veel gebruikt als MySQL, maar er zijn nog steeds een aantal externe tools en bibliotheken ontworpen om het werken met PostgreSQL te vereenvoudigen, inclusief pgAdmin en Postbird.

Ondersteunde Gegevenstypen van PostgreSQL

PostgreSQL ondersteunt numerieke, string- en datum- en tijdgegevenstypen zoals MySQL. Daarnaast ondersteunt het gegevenstypen voor geometrische vormen, netwerkadressen, bitstrings, tekstzoekopdrachten en JSON-invoeren, evenals verschillende eigenaardige gegevenstypen.

Numerieke 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.

Teksttypen:

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- en tijdtypen:

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.

Netwerkadrestypen:

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

Bitstringtypen:

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

Tekstzoektypen:

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 gegevenstypen:

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.

Voordelen van PostgreSQL

  • SQL-naleving: Meer dan SQLite of MySQL streeft PostgreSQL ernaar om nauwgezet de SQL-standaarden te volgen. Volgens de officiële PostgreSQL-documentatie ondersteunt PostgreSQL 160 van de 179 functies die vereist zijn voor volledige kern-SQL:2011-naleving, naast een lange lijst met optionele functies.
  • Open-source en community-gestuurd: Een volledig open-source project, de broncode van PostgreSQL wordt ontwikkeld door een grote en toegewijde gemeenschap. Op dezelfde manier onderhoudt en draagt ​​de Postgres-gemeenschap bij aan tal van online bronnen die beschrijven hoe te werken met het DBMS, inclusief de officiële documentatie, de PostgreSQL-wiki en verschillende online forums.
  • Uitbreidbaar: Gebruikers kunnen PostgreSQL programmatisch en on-the-fly uitbreiden via zijn catalogusgestuurde werking en het gebruik van dynamische laden. Men kan een objectcodebestand aanduiden, zoals een gedeelde bibliotheek, en PostgreSQL zal het indien nodig laden.

Nadelen van PostgreSQL

  • Geheugenprestaties: Voor elke nieuwe clientverbinding fork PostgreSQL een nieuw proces. Aan elk nieuw proces wordt ongeveer 10 MB geheugen toegewezen, wat snel kan oplopen voor databases met veel verbindingen. Daarom is PostgreSQL over het algemeen minder prestatiegericht dan andere RDBMS’en, zoals MySQL, voor eenvoudige leesintensieve bewerkingen.
  • Populariteit: Hoewel PostgreSQL de laatste jaren breder wordt gebruikt, heeft het historisch gezien achtergelopen op MySQL wat betreft populariteit. Een gevolg hiervan is dat er nog steeds minder tools van derden zijn die kunnen helpen bij het beheren van een PostgreSQL-database. Op dezelfde manier zijn er niet zoveel databasebeheerders met ervaring in het beheren van een Postgres-database in vergelijking met die met MySQL-ervaring.

Wanneer PostgreSQL te gebruiken

  • Data-integriteit is belangrijk: PostgreSQL is sinds 2001 volledig ACID-compatibel en implementeert multiversion concurrency control om ervoor te zorgen dat gegevens consistent blijven, waardoor het een sterke keuze is van RDBMS wanneer gegevensintegriteit van cruciaal belang is.
  • Integratie met andere tools: PostgreSQL is compatibel met een breed scala aan programmeertalen en platforms. Dit betekent dat als u ooit uw database moet migreren naar een ander besturingssysteem of integreren met een specifieke tool, dit waarschijnlijk gemakkelijker zal zijn met een PostgreSQL-database dan met een ander DBMS.
  • Complexe bewerkingen: Postgres ondersteunt queryplannen die gebruik kunnen maken van meerdere CPU’s om vragen sneller te beantwoorden. Dit, in combinatie met de sterke ondersteuning voor meerdere gelijktijdige schrijvers, maakt het een uitstekende keuze voor complexe bewerkingen zoals gegevensopslag en online transactieverwerking.

Wanneer PostgreSQL niet te gebruiken

  • Snelheid is van cruciaal belang: Ten koste van snelheid is PostgreSQL ontworpen met uitbreidbaarheid en compatibiliteit in gedachten. Als uw project de snelst mogelijke leesbewerkingen vereist, is PostgreSQL mogelijk niet de beste keuze van DBMS.
  • Eenvoudige installaties: Vanwege de uitgebreide functionaliteit en sterke naleving van standaard SQL kan Postgres overdreven zijn voor eenvoudige database-installaties. Voor leesintensieve bewerkingen waar snelheid vereist is, is MySQL doorgaans een praktischere keuze.
  • Complexe replicatie: Hoewel PostgreSQL weliswaar sterke ondersteuning biedt voor replicatie, is het nog steeds een relatief nieuwe functie. Sommige configuraties — zoals een primaire-primaire architectuur — zijn alleen mogelijk met extensies. Replicatie is een meer volwassen functie op MySQL en veel gebruikers vinden de replicatie van MySQL gemakkelijker te implementeren, met name voor degenen die niet over de vereiste database- en systeembeheerervaring beschikken.

Conclusie

Vandaag zijn SQLite, MySQL en PostgreSQL de drie meest populaire open-source relationele databasebeheersystemen ter wereld. Elk heeft zijn eigen unieke functies en beperkingen, en blinkt uit in bepaalde scenario’s. Bij het kiezen van een RDBMS spelen verschillende variabelen een rol en de keuze is zelden zo eenvoudig als het kiezen van de snelste of degene met de meeste functies. De volgende keer dat u behoefte heeft aan een relationele databaseoplossing, zorg er dan voor dat u deze en andere tools grondig onderzoekt om degene te vinden die het beste aansluit bij uw behoeften.

Als je meer wilt leren over SQL en hoe je het kunt gebruiken om een relationele database te beheren, raden we je aan om onze How To Manage an SQL Database cheat sheet te raadplegen. Aan de andere kant, als je meer wilt leren over niet-relationele (of NoSQL) databases, bekijk dan onze Vergelijking Van NoSQL Database Management Systemen.

Referenties

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