Databases: van SQL naar NoSQL

27 November 2023

Berry Vos

Menig ontwikkelaar zal bij databases denken aan SQL-Server, Oracle of MySql/MariaDB. Relationele databasesystemen dus. Dit soort databases is in de jaren zeventig geïntroduceerd en hebben de tand des tijds prima doorstaan, gezien ze nog steeds veel worden toegepast. Dat is niet verwonderlijk, gezien de goede ondersteuning van gestructureerde gegevens, een krachtige en min of meer gestandaardiseerde querytaal en grote ondersteuning en adoptie door de industrie.

Lange tijd stond het begrip database gelijk aan relationele database. Dat is misschien, in mindere mate, nog steeds zo, maar in de loop der tijd zijn er wel andere systemen ontwikkeld, parallel aan de opkomst van moderne webtoepassingen en de behoefte aan schaalbare en flexibele opslagtoepassingen. De kosten van dataopslag daalden drastisch. Het was tot dan toe gebruikelijk en vaak noodzakelijk om complexe en moeilijk te beheren datamodellen te ontwerpen om overbodige gegevensopslag te vermijden omwille van de kosten (ook performance speelde hierbij een rol). Die noodzaak verdween langzaamaan want de grootste kostenpost, dat werden de ontwikkelaars.

Bron: https://ourworldindata.org/

NoSql staat officiëel voor not only sql, maar wordt tegenwoordig ook wel geïnterpreteerd als no sql.

Doordat de kosten van dataopslag daalden, steeg de hoeveelheid data die appllicaties moesten opslaan en opvragen. De focus verschoof en NoSQL-databases zijn dan ook geoptimaliseerd voor ontwikkelproductiviteit. Daarnaast is deze data steeds minder gestructureerd. NoSQL-databases faciliteren het opslaan van deze grote hoeveelheden ongestructureerde data.

Ook nam het agile werken een vlucht. Ontwikkelteams kregen hierdoor meer te maken met veranderende specificaties. Er moest iteratief worden gewerkt en de software, inclusief databases, moest snel en effectief kunnen worden aangepast. Met de komst van cloud computing ontstond ook de behoefte om de beschikbaarheid van de data te waarborgen. De oplossing: data verspreiden over meerdere servers op verschillende locaties. Diverse NoSQL-databases bieden deze flexibiliteit, waaronder Apache Cassandra.

NoSQL staat dus niet voor een specifiek soort database. Het is meer een verzamelnaam voor niet-relationele databases waarbij eigenschappen als flexibiliteit, schaling, fast queries en gebruiksgemak worden ondersteund. De diverse NoSQL-implementaties bieden deze ondersteuning in meer of mindere mate.

We kunnen de volgende soorten niet-relationele databases onderscheiden:

  • Document-based databases:
    • Gebruik: Geschikt voor het opslaan van complexe, semi-gestructureerde gegevens in documentformaat.
    • Opslagformaat: JSON, BSON, XML, en meer.
    • Voorbeelden: MongoDB, CouchDB, RavenDB
  • Key-value stores:
    • Gebruik: Uitermate geschikt voor snelle, eenvoudige opslag en ophalen van gegevens via een unieke sleutel.
    • Opslagformaat: Sleutel (key) en een bijbehorende waarde (value).
    • Voorbeelden: Redis, DynamoDB, Riak
  • Column-family stores:
    • Gebruik: Optimaal voor grote hoeveelheden gegevens met hoge schaalbaarheid en beschikbaarheid.
    • Opslagformaat: Kolommen zijn gegroepeerd in families voor efficiënte opslag.
    • Voorbeelden: Apache Cassandra, HBase, ScyllaDB
  • Graph databases:
    • Gebruik: Ideaal voor gegevens met complexe relaties, zoals sociale netwerken, aanbevelingssystemen, en stamboomstructuren.
    • Opslagformaat: Gericht op het modelleren van relaties tussen gegevens als grafieken.
    • Voorbeelden: Neo4j, Amazon Neptune, OrientDB
  • In-memory databases:
    • Gebruik: Gebruikt voor toepassingen waar zeer snelle toegang tot gegevens cruciaal is, zoals caching en real-time analyse.
    • Opslagformaat: Gegevens worden volledig in het RAM opgeslagen voor zeer snelle toegang.
    • Voorbeelden: Redis (kan ook als in-memory worden geconfigureerd), Memcached, Aerospike

Het laatste nieuws