Inleiding
het relationele gegevensmodel, dat gegevens in tabellen van rijen en kolommen organiseert, overheerst in databasebeheertools. Vandaag zijn er andere datamodellen, waaronder NoSQL en NewSQL, maar relationele database management systemen (RDBMSs) blijven dominant voor het opslaan en beheren van gegevens wereldwijd.
Dit artikel vergelijkt en contrasteert drie van de meest geà mplementeerde open-source RDBMSs: SQLite, MySQL en PostgreSQL. Specifiek, het zal de gegevenstypen die elke RDBMS gebruikt verkennen, hun voor-en nadelen, en situaties waar ze het best worden geoptimaliseerd.
een beetje over databasebeheersystemen
Databases zijn logisch gemodelleerde clusters van informatie of gegevens. Een database management system (DBMS), aan de andere kant, is een computerprogramma dat samenwerkt met een database. Met een DBMS kunt u de toegang tot een database beheren, Gegevens schrijven, query ‘ s uitvoeren en andere taken uitvoeren met betrekking tot databasebeheer. Hoewel databasemanagementsystemen vaak “databases” worden genoemd, zijn de twee termen niet uitwisselbaar. Een database kan elke verzameling van gegevens zijn, niet alleen een opgeslagen op een computer, terwijl een DBMS is de software die u toelaat om te communiceren met een database.
alle databasebeheersystemen hebben een onderliggend model dat structureert hoe gegevens worden opgeslagen en benaderd. Een relationeel databasemanagementsysteem is een DBMS dat gebruik maakt van het relationele datamodel. In dit model worden gegevens georganiseerd in tabellen, die in de context van RDBMSs meer formeel worden aangeduid als relaties. Een relatie is een verzameling tupels, of rijen in een tabel, waarbij elke tupel een set attributen deelt, of kolommen:
De meeste relationele databases gebruiken structured query language (sql) om gegevens te beheren en te bevragen. Echter, veel RDBMSs ‘ s gebruiken hun eigen specifieke dialect van SQL, die bepaalde beperkingen of uitbreidingen kunnen hebben. Deze extensies bevatten meestal extra functies waarmee gebruikers complexere bewerkingen kunnen uitvoeren dan ze anders zouden kunnen met standaard SQL.
opmerking: De term “standaard SQL” komt meerdere malen voor in deze gids. SQL-normen worden gezamenlijk onderhouden door het American National Standards Institute (ANSI), de International Organization for Standardization (ISO) en de International Electrotechnical Commission (IEC). Wanneer dit artikel “standaard SQL” of “de SQL-standaard” noemt, verwijst het naar de huidige versie van de SQL-standaard die door deze instanties is gepubliceerd.
opgemerkt moet worden dat de volledige SQL-standaard groot en complex is: volledige naleving van SQL:2011 vereist 179 functies. Hierdoor ondersteunen de meeste RDBMSs niet de gehele standaard, hoewel sommige wel dichter bij volledige naleving komen dan andere.
aan elke kolom wordt een gegevenstype toegewezen dat bepaalt wat voor soort ingangen in die kolom zijn toegestaan. Verschillende RDBMSs implementeren verschillende gegevenstypen, die niet altijd direct uitwisselbaar zijn. Sommige veel voorkomende gegevenstypen zijn datums, strings, gehele getallen en Booleans.
numerieke gegevenstypen kunnen worden ondertekend, wat betekent dat ze zowel positieve als negatieve getallen kunnen vertegenwoordigen, of niet ondertekend, wat betekent dat ze alleen positieve getallen kunnen vertegenwoordigen. Bijvoorbeeld, MySQL ’s tinyint
gegevenstype kan 8 bits gegevens bevatten, wat overeenkomt met 256 mogelijke waarden. Het ondertekende bereik van dit gegevenstype is van -128 tot 127, terwijl het niet ondertekende bereik van 0 tot 255 is.
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 een bepaalde kolom, maar sommige beperkingen kunnen ook van toepassing zijn op een hele tabel. Hier zijn enkele beperkingen die vaak worden gebruikt in SQL:
-
UNIQUE
: Het toepassen van deze beperking op een kolom zorgt ervoor dat er geen twee items in die kolom identiek zijn. -
NOT NULL
: deze beperking zorgt ervoor dat een kolom geenNULL
items bevat. -
PRIMARY KEY
: een combinatie vanUNIQUE
enNOT NULL
, dePRIMARY KEY
beperking zorgt ervoor dat geen vermelding in de kolomNULL
en dat elke regel afzonderlijk is. -
FOREIGN KEY
: EenFOREIGN KEY
is een kolom in een tabel die verwijst naar dePRIMARY KEY
van een andere tabel. Deze beperking wordt gebruikt om twee tabellen aan elkaar te koppelen: entries aan de kolomFOREIGN KEY
moeten al bestaan in de bovenliggende kolomPRIMARY KEY
om het schrijfproces te laten slagen. -
CHECK
: deze beperking beperkt het bereik van waarden die in een kolom kunnen worden ingevoerd. Bijvoorbeeld, als uw toepassing alleen bedoeld is voor inwoners van Alaska, kunt u eenCHECK
beperking toevoegen aan een Postcode kolom om alleen items tussen 99501 en 99950 toe te staan.
Als u meer wilt weten over databasebeheersystemen, bekijk dan ons artikel over het begrijpen van SQL-en NoSQL-Databases en verschillende databasemodellen.
nu we relationele databasemanagementsystemen in het algemeen hebben behandeld, gaan we verder met de eerste van de drie open-source relationele databases die dit artikel zal behandelen: SQLite.
SQLite
SQLite is een op zichzelf staande, op bestanden gebaseerde en volledig open-source RDBM ‘ s die bekend staan om zijn draagbaarheid, betrouwbaarheid en sterke prestaties, zelfs in omgevingen met weinig geheugen. De transacties zijn ACID-compliant, zelfs in gevallen waarin het systeem crasht of een stroomstoring ondergaat.
de website van het SQLite project beschrijft het als een” serverloze ” database. De meeste relationele database engines worden geà mplementeerd als een serverproces waarin programma ‘ s communiceren met de host server door middel van een interprocescommunicatie die Verzoeken doorstuurt. Met SQLite, hoewel, elk proces dat toegang tot de database leest van en schrijft naar de database disk bestand direct. Dit vereenvoudigt het installatieproces van SQLite, omdat het elke noodzaak om een serverproces te configureren elimineert. Ook is er geen configuratie nodig voor programma ‘ s die de SQLite database gebruiken: alles wat ze nodig hebben is toegang tot de schijf.
SQLite is vrije en open-source software, en er is geen speciale licentie nodig om het te gebruiken. Echter, het project biedt verschillende extensies-elk voor een eenmalige vergoeding-die helpen met compressie en encryptie. Daarnaast biedt het project verschillende commerciële ondersteuningspakketten, elk tegen een jaarlijkse vergoeding.
SQLite Ondersteunde Gegevenstypen
SQLite kunt een verschillende gegevenstypen, georganiseerd in de volgende opslag klassen:
Gegevens Type | Uitleg |
---|---|
null |
Bevat alle NULL waarden. |
integer |
ondertekende gehele getallen, opgeslagen in 1, 2, 3, 4, 6, of 8 bytes afhankelijk van de grootte van de waarde. |
real |
reële getallen, of drijvende-kommawaarden, opgeslagen als drijvende-kommagetallen van 8 bytes. |
text |
tekstreeksen opgeslagen met behulp van de database-codering, die UTF-8, UTF-16BE of UTF-16LE kunnen zijn. |
blob |
elke blob met gegevens, waarbij elke blob precies is opgeslagen zoals het was ingevoerd. |
In de context van SQLite worden de termen” storage class “en” data type ” als uitwisselbaar beschouwd. Als u meer wilt weten over SQLite ‘ s gegevenstypen en SQLite type affiniteit, bekijk dan de officiële documentatie van SQLite over dit onderwerp.
voordelen van SQLite
- kleine voetafdruk: zoals de naam al aangeeft, is de SQLite-bibliotheek zeer licht van gewicht. Hoewel de ruimte die het gebruikt varieert afhankelijk van het systeem waar het is geïnstalleerd, kan het minder dan 600KiB ruimte innemen. Bovendien, het is volledig self-contained, wat betekent dat er geen externe afhankelijkheden die u moet installeren op uw systeem voor SQLite om te werken.
- gebruiksvriendelijk: SQLite wordt soms beschreven als een” zero-configuration ” database die direct klaar is voor gebruik. SQLite wordt niet uitgevoerd als een serverproces, wat betekent dat het nooit hoeft te worden gestopt, gestart of herstart en wordt niet geleverd met configuratiebestanden die moeten worden beheerd. Deze functies helpen om het pad te stroomlijnen van het installeren van SQLite om het te integreren met een toepassing.
- Portable: In tegenstelling tot andere databasebeheersystemen, die doorgaans gegevens opslaan als een grote partij afzonderlijke bestanden, wordt een hele SQLite-database opgeslagen in een enkel bestand. Dit bestand kan zich overal in een directoryhiërarchie bevinden, en kan worden gedeeld via verwijderbare media of file transfer protocol.
nadelen van SQLite
- beperkte concurrency: hoewel meerdere processen tegelijkertijd een SQLite-database kunnen benaderen en opvragen, kan slechts één proces de database op een bepaald moment wijzigen. Dit betekent dat SQLite meer concurrency ondersteunt dan de meeste andere embedded database management systemen, maar niet zo veel als client / server RDBMSs zoals MySQL of PostgreSQL.
- geen gebruikersbeheer: databasesystemen worden vaak geleverd 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 toepasselijke toegangsmachtigingen de typische toegangsmachtigingen 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 een betere bescherming bieden tegen bugs in de client-applicatie dan een serverloze database zoals SQLite. Verdwaalde aanwijzers in een client kunnen bijvoorbeeld het geheugen op de server niet beschadigen. Ook, omdat een server een enkel persistent proces is, kan een client-server database de toegang tot gegevens met meer precisie controleren dan een serverloze database, waardoor meer fijnkorrelige vergrendeling en betere concurrency mogelijk zijn.
Wanneer moet SQLite
- Embedded applicaties worden gebruikt: SQLite is een grote keuze aan database voor applicaties die draagbaarheid nodig hebben en geen toekomstige uitbreiding nodig hebben. Voorbeelden hiervan zijn lokale applicaties voor één gebruiker en mobiele applicaties of games.
- Disk access replacement: in gevallen waarin een toepassing bestanden direct naar de schijf moet lezen en schrijven, kan het nuttig zijn om SQLite te gebruiken voor de extra functionaliteit en eenvoud die gepaard gaat met het gebruik van SQL.
- testen: Voor veel toepassingen kan het overkill zijn om hun functionaliteit te testen met een DBMS die een extra serverproces gebruikt. SQLite heeft een in-memory modus die kan worden gebruikt om tests snel uit te voeren zonder de overhead van de werkelijke database operaties, waardoor het een ideale keuze voor het testen.
wanneer SQLite
- niet gebruikt wordt om met veel gegevens te werken: SQLite kan technisch een database tot 140 TB in grootte ondersteunen, zolang de diskdrive en het bestandssysteem ook de vereisten voor de grootte van de database ondersteunen. De SQLite-website raadt echter aan dat elke database die 1TB nadert, wordt ondergebracht in een gecentraliseerde client-server-database, omdat een SQLite-database van die grootte of groter moeilijk te beheren zou zijn.
- hoge schrijfvolumes: SQLite staat slechts één schrijfoperatie toe op een bepaald moment, wat de doorvoer aanzienlijk beperkt. Als uw toepassing veel schrijfbewerkingen of meerdere gelijktijdige schrijvers vereist, is SQLite mogelijk niet geschikt voor uw behoeften.
- netwerktoegang is vereist: Omdat SQLite een serverloze database is, biedt het geen directe netwerktoegang tot zijn gegevens. Deze toegang is ingebouwd in de applicatie, dus als de gegevens in SQLite zich op een andere machine bevinden dan de applicatie, zal er een engine-to-disk verbinding met hoge bandbreedte over het netwerk nodig zijn. Dit is een dure, inefficiënte oplossing, en in dergelijke gevallen kan een client-server DBMS een betere keuze zijn.
MySQL
volgens de DB-Engines Ranking, is MySQL de meest populaire open-source RDBMS sinds de site begon met het bijhouden van database populariteit in 2012. Het is een product met veel functies dat veel van ‘ s werelds grootste websites en applicaties aanstuurt, waaronder Twitter, Facebook, Netflix en Spotify. Aan de slag met MySQL is relatief eenvoudig, grotendeels dankzij de uitgebreide documentatie en de grote gemeenschap van ontwikkelaars, evenals de overvloed aan MySQL-gerelateerde bronnen online.
MySQL is ontworpen voor snelheid en betrouwbaarheid, ten koste van volledige naleving van standaard SQL. De MySQL-ontwikkelaars werken voortdurend aan een betere naleving van standaard SQL, maar het blijft achter bij andere SQL-implementaties. Het komt echter met verschillende SQL-modi en extensies die het dichter bij de naleving brengen. In tegenstelling tot toepassingen die SQLite gebruiken, hebben toepassingen die een MySQL-database gebruiken Toegang tot het via een apart daemon-proces. Omdat het serverproces tussen de database en andere applicaties staat, zorgt het voor meer controle over wie toegang heeft tot de database.
MySQL heeft een schat aan applicaties van derden, tools en geïntegreerde bibliotheken geïnspireerd die de functionaliteit uitbreiden en het gemakkelijker maken om mee te werken. Enkele van de meest gebruikte van deze tools van derden zijn phpMyAdmin, DBeaver, en HeidiSQL.
MySQL ’s Ondersteunde gegevenstypen
MySQL’ s gegevenstypen kunnen worden onderverdeeld in drie brede categorieën: numerieke types, datum en tijd types, en string types.
numerieke types:
gegevenstype | uitleg |
---|---|
tinyint |
een zeer klein geheel getal. Het ondertekende bereik voor dit numerieke gegevenstype is -128 tot 127, terwijl het niet-ondertekende bereik 0 tot 255 is. |
smallint |
een klein geheel getal. Het ondertekende bereik voor dit numerieke type is -32768 tot 32767, terwijl het niet ondertekende bereik 0 tot 65535 is. |
mediumint |
een middelgroot geheel getal. Het ondertekende bereik voor dit numerieke gegevenstype is -8388608 tot 8388607, terwijl het niet-ondertekende bereik 0 tot 16777215 is. |
int or integer |
een geheel getal met normale grootte. Het ondertekende bereik voor dit numerieke gegevenstype is -2147483648 tot 2147483647, terwijl het niet-ondertekende bereik 0 tot 4294967295 is. |
bigint |
een groot geheel getal. Het ondertekende bereik voor dit numerieke gegevenstype is -9223372036854775808 tot 9223372036854775807, terwijl het niet ondertekende bereik 0 tot 18446744073709551615 is. |
float |
een klein floating-point getal (single-precision). |
double double precision , of real |
een floating-point getal met een normale grootte (dubbele precisie). |
dec decimal fixed , of numeric |
een verpakt vast puntnummer. De weergavelengte van vermeldingen voor dit gegevenstype wordt gedefinieerd wanneer de kolom wordt gemaakt en elke vermelding zich aan die lengte houdt. |
bool of boolean |
een Boolean is een gegevenstype dat slechts twee mogelijke waarden heeft, meestal ofwel true of false . |
bit |
een type bitwaarde waarvoor u het aantal bits per waarde kunt opgeven, van 1 tot 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. |
String types:
Data Type | Explanation |
---|---|
char |
A fixed-length string; items van dit type zijn aan de rechterkant opgevuld met spaties om de opgegeven lengte te voldoen wanneer ze worden opgeslagen. |
varchar |
een string met variabele lengte. |
binary |
vergelijkbaar met het char type, maar een binaire byte string van een bepaalde lengte in plaats van een niet-binaire teken string. |
varbinary |
vergelijkbaar met het varchar type, maar een binaire byte string van een variabele lengte in plaats van een niet-binaire teken 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 |
een opsomming, dat is een tekenreeks object dat een enkele waarde neemt uit een lijst van waarden die worden gedeclareerd wanneer de tabel wordt gemaakt. |
set |
vergelijkbaar met een opsomming, een string object dat nul of meer waarden kan hebben, die elk moeten worden gekozen uit een lijst van toegestane waarden die worden opgegeven wanneer de tabel wordt gemaakt. |
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. Ook is er een overvloed aan documentatie in print en online over het installeren en beheren van een MySQL-database, evenals een aantal tools van derden — zoals phpMyAdmin — die gericht zijn op het vereenvoudigen van het proces van de slag met de database.
- veiligheid: MySQL wordt geleverd met een script dat u helpt om de beveiliging van uw database te verbeteren door het instellen van het wachtwoord van de installatie beveiligingsniveau, het definiëren van een wachtwoord voor de root gebruiker, het verwijderen van anonieme accounts, en het verwijderen van test databases die standaard toegankelijk zijn voor alle gebruikers. Ook, in tegenstelling tot SQLite, MySQL ondersteunt gebruikersbeheer en kunt u toegangsrechten verlenen op een gebruiker-per-gebruiker basis.
- snelheid: door ervoor te kiezen bepaalde functies van SQL niet te implementeren, konden de MySQL-ontwikkelaars snelheid prioriteren. Terwijl meer recente benchmark tests laten zien dat andere RDBMSs zoals PostgreSQL kan overeenkomen met of op zijn minst dicht bij MySQL in termen van snelheid, MySQL heeft nog steeds een reputatie als een buitengewoon snelle database-oplossing.
- replicatie: MySQL ondersteunt een aantal verschillende typen replicatie, wat de praktijk is om informatie te delen tussen twee of meer hosts om de betrouwbaarheid, beschikbaarheid en fouttolerantie te verbeteren. Dit is handig voor het opzetten van een database back-up oplossing of horizontaal schalen van iemands database.
nadelen van MySQL
- bekende beperkingen: Omdat MySQL is ontworpen voor snelheid en gebruiksgemak in plaats van volledige SQL-naleving, wordt het geleverd met bepaalde functionele beperkingen. Er is bijvoorbeeld geen ondersteuning voor
FULL JOIN
clausules. - Licensing and proprietary features: MySQL is dual-licensed software, met een vrije en open-source community edition onder GPLv2 en verschillende betaalde commerciële edities onder proprietary licenses. 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 van gebruikers dat het ontwikkelingsproces voor het DBMS aanzienlijk is vertraagd, omdat de Gemeenschap niet langer het Agentschap heeft om snel te reageren op problemen en veranderingen door te voeren.
Wanneer moet MySQL
- gedistribueerde operaties worden gebruikt: MySQL ‘ s replicatieondersteuning maakt het een geweldige keuze voor gedistribueerde database-instellingen zoals primaire-secundaire of primaire-primaire architecturen.
- Websites en webtoepassingen: MySQL bevoegdheden veel websites en applicaties over het internet. Dit is voor een groot deel te danken aan hoe eenvoudig het is om een MySQL-database te installeren en op te zetten, evenals de algehele snelheid en schaalbaarheid op de lange termijn.
- verwachte toekomstige groei: MySQL ‘ s replicatieondersteuning kan helpen bij het horizontaal schalen. Daarnaast is het een relatief eenvoudig proces om te upgraden naar een commercieel MySQL-product, zoals MySQL Cluster, dat automatische sharding ondersteunt, een ander horizontaal schalen proces.
wanneer MySQL
- niet moet worden gebruikt, is naleving van SQL noodzakelijk: Omdat MySQL niet probeert de volledige SQL-standaard te implementeren, is deze tool niet volledig compatibel met SQL. Als volledige of zelfs bijna volledige SQL-compliance een must is voor uw use case, wilt u misschien een meer volledig compliant DBMS gebruiken.
- Concurrency en grote data volumes: hoewel MySQL over het algemeen goed presteert met read-heavy operaties, kan gelijktijdig lezen-schrijven problematisch zijn. Als er in uw applicatie veel gebruikers tegelijk gegevens schrijven, is een andere RDBMS zoals PostgreSQL misschien een betere keuze van de database.
PostgreSQL
PostgreSQL, ook bekend als Postgres, beschouwt zichzelf als ” de meest geavanceerde open-source relationele database ter wereld.”Het is gemaakt met het doel om zeer uitbreidbaar en standaarden compliant. PostgreSQL is een object-relationele database, wat betekent dat hoewel het in de eerste plaats een relationele database het bevat ook functies — zoals tabel overerving en functie overbelasting — die vaker worden geassocieerd met object databases.
Postgres is in staat om meerdere taken tegelijkertijd efficiënt af te handelen, een kenmerk dat bekend staat als concurrency. Het bereikt dit zonder leessloten dankzij de implementatie van Multiversion Concurrency Control (MVCC), die zorgt voor de atomiciteit, consistentie, isolatie en duurzaamheid van zijn transacties, ook bekend als Acid compliance.
PostgreSQL wordt niet zo veel gebruikt als MySQL, maar er zijn nog steeds een aantal tools en bibliotheken van derden ontworpen om het werken met PostgreSQL te vereenvoudigen, waaronder pgAdmin en Postbird.
PostgreSQL ‘ s Ondersteunde gegevenstypen
PostgreSQL ondersteunt numerieke, string, en datum en tijd gegevenstypen zoals MySQL. Daarnaast ondersteunt het gegevenstypen voor geometrische vormen, netwerkadressen, bit strings, tekstzoekopdrachten en JSON-ingangen, evenals verschillende idiosyncratische gegevenstypen.
numerieke types:
gegevenstype | uitleg |
---|---|
bigint |
een 8 byte integer ondertekend. |
bigserial |
An autoincrementing 8 byte integer. |
double precision |
An 8 byte double precision floating-point number. |
integer |
A signed 4 byte integer. |
numeric or decimal |
An 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 autoincrementing 2 byte integer. |
serial |
An autoincrementing 4 byte integer. |
Character types:
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. |
Date and time types:
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. |
Geometric types:
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. |
Network address types:
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 types:
Data Type | Explanation |
---|---|
bit |
A fixed-length bit string. |
bit varying |
A variable-length bit string. |
Text search types:
Data Type | Explanation |
---|---|
tsquery |
A text search query. |
tsvector |
A text search document. |
JSON types:
Data Type | Explanation |
---|---|
json |
Textual JSON data. |
jsonb |
Decomposed binary JSON data. |
Other data types:
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. |
Advantages of PostgreSQL
- SQL compliance: More so than SQLite or MySQL, PostgreSQL aims to closely adhere to SQL standards. According to the official PostgreSQL documentation, PostgreSQL supports 160 out of the 179 features required for full core SQL:2011 compliance, naast een lange lijst van optionele functies.
- Open-source en community-driven: een volledig open-source project, PostgreSQL ‘ s broncode is ontwikkeld door een grote en toegewijde gemeenschap. Op dezelfde manier onderhoudt en draagt de Postgres community bij aan tal van online bronnen die beschrijven hoe te werken met het DBMS, waaronder de officiële documentatie, de PostgreSQL wiki en verschillende online forums.
- uitbreidbaar: gebruikers kunnen PostgreSQL programmatisch en on-the-fly uitbreiden door middel van de catalogusgestuurde werking en het gebruik van dynamisch laden. Men kan een objectcode bestand aanwijzen, zoals een gedeelde bibliotheek, en PostgreSQL zal het laden indien nodig.
nadelen van PostgreSQL
- geheugenprestaties: voor elke nieuwe clientverbinding forkt PostgreSQL een nieuw proces. Elk nieuw proces wordt toegewezen over 10MB geheugen, die snel kan optellen voor databases met veel verbindingen. Dienovereenkomstig is PostgreSQL voor eenvoudige lees-zware operaties doorgaans minder performant dan andere RDBMSs, zoals MySQL.
- Populariteit: Hoewel meer op grote schaal gebruikt in de afgelopen jaren, PostgreSQL historisch lag achter MySQL in termen van populariteit. Een gevolg hiervan is dat er nog steeds minder tools van derden die kunnen helpen bij het beheren van een PostgreSQL-database. Op dezelfde manier zijn er niet zo veel database beheerders met ervaring met het beheren van een Postgres database in vergelijking met degenen met MySQL ervaring.
wanneer PostgreSQL
- gegevensintegriteit is belangrijk: PostgreSQL is volledig ACID-compliant sinds 2001 en implementeert multiversion currency control om ervoor te zorgen dat data consistent blijft, waardoor het een sterke keuze van RDBMS is wanneer data-integriteit cruciaal is.
- integratie met andere tools: PostgreSQL is compatibel met een breed scala aan programmeertalen en platforms. Dit betekent dat als je ooit nodig hebt om uw database te migreren naar een ander besturingssysteem of te integreren met een specifieke tool, zal het waarschijnlijk gemakkelijker met een PostgreSQL database dan met een ander DBMS.
- complexe bewerkingen: Postgres ondersteunt query plannen die meerdere CPU ’s kunnen benutten om query’ s te beantwoorden met een grotere snelheid. Dit, in combinatie met de sterke ondersteuning voor meerdere gelijktijdige schrijvers, maakt het een geweldige keuze voor complexe operaties zoals data warehousing en online transactieverwerking.
wanneer PostgreSQL
- snelheid is noodzakelijk: ten koste van snelheid werd PostgreSQL ontworpen met uitbreidbaarheid en compatibiliteit in het achterhoofd. Als uw project de snelste leesbewerkingen vereist die mogelijk zijn, is PostgreSQL mogelijk niet de beste keuze van DBMS.
- eenvoudige instellingen: Vanwege de grote feature set en sterke naleving van standaard SQL, Postgres kan overkill voor eenvoudige database setups. Voor read-heavy operaties waarbij snelheid vereist is, is MySQL meestal een meer praktische keuze.
- complexe replicatie: hoewel PostgreSQL sterke ondersteuning biedt voor replicatie, is het nog steeds een relatief nieuwe functie en sommige configuraties — zoals een primaire-primaire architectuur — zijn alleen mogelijk met uitbreidingen. Replicatie is een meer volwassen functie op MySQL en veel gebruikers zien MySQL ‘ s replicatie gemakkelijker te implementeren, met name voor degenen die niet over de vereiste database en systeembeheer ervaring.
conclusie
vandaag zijn SQLite, MySQL en PostgreSQL de drie meest populaire open-source relationele databasemanagementsystemen ter wereld. Elk heeft zijn eigen unieke kenmerken en beperkingen, en blinkt uit in bepaalde scenario ‘ s. Er zijn een flink aantal variabelen in het spel bij het beslissen over een RDBMS, en de keuze is zelden zo eenvoudig als het kiezen van de snelste of degene met de meeste functies. De volgende keer dat u een relationele database-oplossing nodig hebt, moet u deze en andere hulpmiddelen grondig onderzoeken om de oplossing te vinden die het beste bij uw behoeften past.
als u meer wilt weten over SQL en hoe u deze kunt gebruiken om een relationele database te beheren, raden wij u aan om te verwijzen naar onze cheat sheet hoe u een SQL Database beheert. Aan de andere kant, als u wilt leren over niet-relationele (of NoSQL) databases, Bekijk onze vergelijking van NoSQL Database Management Systemen.