NoSQL

Jeroen 13 september 2018
Door Jeroen

NoSQL

Niet zo heel lang geleden hoefde je je als ontwikkelaar niet af te vragen hoe je met data om moest gaan. Dit gebeurde altijd in een SQL database. Door de komst van het internet, sociale media en het vergaren van steeds meer data werden de grenzen van de SQL database al snel opgezocht. Voor bijvoorbeeld het zoeken met Google moest razendsnel in heel erg veel data gezocht worden, iets wat de SQL databases niet meer bij konden benen. Sindsdien zijn er een hoop alternatieve manieren voor het opslaan van data populair geworden. Deze databases worden allemaal gegroepeerd onder de term NoSQL. Maar vergis je niet, behalve dat dit geen SQL databases zijn, zijn er weinig overeenkomsten. In dit artikel licht ik de meest gebruikte typen database toe.

Wat is het?

SQL

Traditioneel gebruiken we een relationele database (in ons geval Microsoft SQL Server) om gegevens op te slaan. In een relationele database worden alle relaties tussen verschillende entiteiten uit-gemodelleerd (dit wordt ook wel normaliseren genoemd). Een juist genormaliseerde database zorgt ervoor dat data niet dubbel opgeslagen wordt en heeft verschillende mechanismen om ervoor te zorgen dat de data consistent en juist blijft. Voorbeelden van zulke mechanismen zijn transacties, foreign key constraints, checks en defaults. De afkorting SQL staat voor "Structured Query Language".

NoSQL

Er zijn verschillende vormen van NoSQL databases, maar de voornaamste eigenschap is dat data niet (of anders) genormaliseerd wordt opgeslagen. Dit kan zorgen voor een grote performance boost en kan het ontwikkelen bespoedigen (er hoeft namelijk geen database te worden gemodelleerd). Over het algemeen wordt data binnen een NoSQL database minder gestructureerd opgeslagen. De afkorting NoSQL staat voor "Not only Structured Query Language".

Verschillende vormen NoSQL databases

Eigenlijk is iedere niet-relationele database een NoSQL database, het is dus ook niet vreemd dat er verschillende typen NoSQL databases bestaan. Ik zal een aantal vormen en hun meest gebruikte implementaties noemen.

Key-Value Data Store

In een Key-value database worden waarden met een unieke sleutel opgeslagen, waarden kunnen alleen opgehaald worden met hun unieke sleutel. Door deze eenvoudige opzet werkt deze database heel snel en hoeven er geen queries geschreven te worden, deze database ondersteund enkel het ophalen van een waarde op basis van de sleutel en het toevoegen/wijzigen/verwijderen van een waarde. Deze database wordt veel toegepast voor caching. 

 

Bron

Implementaties:

Toepassingen:

  • Twitter maakt gebruik van Redis om zo snel mogelijk je timeline te tonen
  • Coinbase gebruikt Redis om er zeker van te zijn dat binnen hun bitcoin-exchange niet meer cryptocurrency wordt uitgegeven dan een account bevat
  • Facebook gebruikte memcached voor caching

Document Store

Een Document Store wordt gevuld met geserialiseerde "documenten", deze documenten kunnen van alles bevatten en worden opgeslagen in XML, JSON of BSON (Binary JSON). Documenten mogen van elkaar verschillen in structuur maar kunnen geïndexeerd worden op gemeenschappelijke velden zodat hier sneller op gezocht kan worden. Een voorbeeld van een document in MongoDB ziet er als volgt uit:

voorbeeld MongoDB document

Bron

Implementaties

Toepassingen

  • SEGA maakt gebruik van MongoDB voor de online mogelijkheden van hun mobiele games
  • Ebay maakt gebruik van MongoDB voor hun zoekfunctie

Wide-Column Store

Waar andere databases hun gegevens per rij opslaan gebeurt dat in een wide-colum store per column-family (groepering van kolommen), dit zorgt ervoor dat heel snel gezocht kan worden op waardes van de kolommen. Het invoegen en wijzigen van data is in dit geval wel trager dan bij andere databases, omdat dit over meerdere kolom-tabellen moet gebeuren. Hieronder zie je een schematische weergave van een column-family met 3 rijen.

Diagram of a column family in a wide column store database.

Bron

Implementaties

Toepassingen

  • Google gebruikt Bigtable voor hun zoekfunctie
  • Spotify gebruikt Cassandra voor het aanbieden van gepersonaliseerde content
  • Facebook maakte gebruik van HBase voor hun berichten

Graph Store

Een Graph Store is erg goed in het vastleggen van relaties tussen entiteiten en kan erg snel al deze relaties doorzoeken en ophalen. Hierdoor wordt deze database veel gebruikt voor sociale netwerken, waar relaties een belangrijke rol spelen. Onderstaande afbeeldingen laten zien hoe relaties worden opgeslagen in een SQL database (links) en hoe deze worden opgeslagen in een graph store (rechts).

sql vs graph database

Bron

Implementaties

Toepassingen

  • Walmart gebruikt Neo4j voor het gepersonaliseerd aanbieden van producten
  • Medium gebruikt Neo4j voor het gepersonaliseerd aanbieden van content

Tot slot

Databases worden vaak in twee categorieën geplaatst, SQL of NoSQL. Na het bekijken van de verschillende vormen NoSQL databases is wel te stellen dat deze weinig overeenkomsten hebben. Ieder type database heeft een sterke kant welke vooral tot zijn recht komt wanneer er sprake is van veel data of hoge performance eisen. Het is goed om te weten welke vormen databases er naast SQL bestaan zodat bij performance issues of de start van een nieuw project meteen een overwogen beslissing gemaakt kan worden over welke database het best gebruikt kan worden.