Relationele database (RDB) versus NoSQL: datamodel, schema, joins, consistentie en schaalbaarheid
Een relationele database (RDB) stelt data voor als tabellen met rijen en kolommen en wordt bevraagd met SQL. Ze ondersteunt complexe query's die tabellen samenvoegen, en houdt de data strikt consistent via de ACID-eigenschappen van transacties en beperkingen zoals primaire en vreemde sleutels. NoSQL is een verzamelnaam voor andere dan relationele databases, waaronder key-value-, document-, wide-column- en graafdatabases. De meeste maken het dataformaat flexibel en maken het eenvoudiger om uit te schalen over veel servers, ten koste van complexe query's zoals joins en van een deel van de strikte consistentie. Het is niet zo dat de ene beter is: de keuze hangt af van de vorm van de data en de eigenschappen die je nodig hebt.
| Kenmerk | Relationele database (RDB) | NoSQL |
|---|---|---|
| Voorstelling van de data | Tabellen (relaties) met rijen en kolommen, aan elkaar gekoppeld via gedeelde waarden (vreemde sleutels) | Hangt af van het type: key-valueparen, JSON-achtige documenten, groepen kolommen, grafen van knopen en verbindingen enz. |
| Schema | Kolomnamen en -typen worden vooraf gedefinieerd; wijzigen betekent de tabeldefinitie aanpassen, bijvoorbeeld met ALTER TABLE | Veel producten vereisen vooraf geen strikt schema (schemaloos), dus records met verschillende velden kunnen samen worden opgeslagen |
| Query's | Zoeken op voorwaarden, aggregeren, sorteren enz. kan declaratief worden geschreven in SQL, een standaardtaal | Meestal productspecifieke API's of querytalen; sommige producten bieden SQL-achtige talen |
| Joins | Met JOIN kunnen query's meerdere tabellen combineren | Veel kunnen slecht met joins overweg; data die samen wordt gelezen, wordt vaak samen in één document of waarde opgeslagen |
| Transacties en consistentie | Transacties met de ACID-eigenschappen kunnen wijzigingen aan meerdere rijen en tabellen in één keer vastleggen | Veel producten beperken wijzigingen tot één sleutel of document, of staan eventual consistency toe, waarbij kopieën het niet meteen eens zijn; sommige producten bieden wel ACID-transacties |
| Manier van schalen | Vooral opschalen door één server krachtiger te maken; leesbewerkingen kunnen over replica's worden verdeeld, maar schrijfbewerkingen over veel servers verdelen is moeilijk | Eenvoudig uit te schalen door de data per sleutel over veel servers te verdelen |
| Normalisatie | Tabellen worden genormaliseerd om dubbele data te verwijderen en wijzigingsanomalieën te voorkomen | Dezelfde data wordt vaak gedupliceerd om snel lezen te bevorderen |
| Geschikte toepassingen | Bedrijfssystemen waar integriteit telt en de relaties tussen data complex zijn, zoals boekhouding, voorraad en bestellingen | Sessies en caches voor webdiensten met zeer veel verkeer, data zonder vaste vorm, grote hoeveelheden logs, verbanden tussen mensen of dingen (grafen) |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.