ABIS Infor - 2012-10
Weg met SQL?!
Samenvatting
Eenieder die vandaag met data aan de slag is - als gebruiker, beheerder, architect - heeft ongetwijfeld reeds gehoord van de term 'NoSQL'. Artikels over BigData, podcasts over de Cloud, ...: steeds opnieuw komt NoSQL prominent aan bod. Maar wat weet u van NoSQL?
Niet enkel SQL - of juist Niet SQL
Een hele reeks auteurs benadrukken dat NoSQL in deze staat voor een breuk met alles wat relationeel van aard is; no staat immers voor 'geen', 'niet gebaseerd op', 'afstand nemend van'. En dan doelt men niet enkel op SQL, maar, bij uitbreiding op het hele relationele 'werkmodel' waar SQL op gestoeld is. Anderen wijzen dan weer op het feit dat no staat voor not only: SQL, en bij uitbreiding het relationele database model, kunnen dus worden behouden naast andere modellen die in bepaalde concrete situaties effectiever zijn.
Dus: NoSQL database systemen 'nemen afstand' van het relationele (database) model, en van SQL als standaard toeganstaal tot deze systemen. Met als doel: beter om te kunnen met de gewijzigde eigenschappen van de data die vandaag moet kunnen worden verwerkt!
Vrijheid - blijheid
Het relationele model stelt specifieke eisen aan structuren, aan data. Denk bijvoorbeeld aan de normalisatieregels op basis waarvan tabellen aangemaakt dienen te worden. De variabiliteit van de data die vandaag dient te worden opgeslagen en verwerkt is echter dermate omvangrijk dat met vaste, constante structuren haast niet meer kan worden gewerkt. Want inderdaad: attributen van het gehanteerde model moeten vaak, en dynamisch, kunnen worden aangepast en gewijzigd. Schema's (n.v.d.r. vaste database structuren) zijn niet langer aanvaardbaar!
NoSQL databases zijn dus vaak gestoeld op niet-rigide database 'modellen': 'key-value' databases, document databases, 'tree/graph' databases, kolom-databases, ... bieden flexibiliteit en variabiliteit ongekend in relationele databases. En ze bieden de mogelijkheid effectief om te gaan met databronnen die niet noodzakelijk relationeel van aard zijn. Uiteraard kunnen een aantal van deze modellen op basis van relationele databasesystemen worden 'geïmplementeerd' - in deze context echter niet onmiddellijk de bedoeling!
Duplicatie, Replicatie
NoSQL databases moeten in staat zijn data overheen verschillende servers (dus hardware) te dupliceren en repliceren op een voor de applicatie transparante manier. Toevoegen en wegnemen van servers mag geen impact hebben op de beschikbaarheid van data en applicaties; en met het oog op beschikbaarheid en responstijd moet het mogelijk zijn data te repliceren overheen de verschillende servers waarop de NoSQL database werd opgezet. Coördinatie van wijzigingen - synchronisatie van de informatie - is de verantwoordelijkheid van de NoSQL database.
ACID vs BASE
Dé lakmoesproef voor transacties tegen de achtergrond van relationele databases: transacties mogen mekaar niet voor de voeten lopen; mogen geen inconsistenties veroorzaken; moeten maximaal consistent concurrent acces naar de data toelaten! Om dit te realiseren doet met steevast beroep op technieken van 'locking' en 'versioning' - met o.a. impact op performance en efficiëntie.
NoSQL databases gaan hier veel losser mee om - consistentie is immers geen doel op zich, geen gebruiksvoorwaarde. Consistentie is een streefdoel dat mogelijk ooit kan worden gerealiseerd - bijvoorbeeld na een periode waarin data gedurende een bepaalde tijd niet werd gewijzigd. En dus niet ACID maar BASE: Basically Available, Soft state, Eventually consistent!
Hardware: 'scale-up' vs 'scale-out'
De infrastructuur in gebruik bij relationele databases stoelt op 'scale-up' evoluties: het wegnemen van input/output constraints zorgen er voor dat CPUs sneller kunnen werken; RAM-based memory caches versterken dit effect nog verder. NoSQL databases gaan resoluut voor 'scale-out': al dan niet identieke server-configuraties kunnen worden toegevoegd zonder impact op de applicatie en op data; data - en belangrijker - I/O wordt automatisch gespreid overheen verschillende servers.
Voorbeelden
Een aantal veel aangehaalde NoSQL databases zijn bijvoorbeeld: HBase, Apache Casadra, MongoDB, Neo4j, Oracle NOSQL, Oracle Berkley DB, IBM Informix, IBM Lotus Notes. Het spreekt voor zich dat deze niet allemaal aan bovenstaande eigenschappoen voldoen.