sjaak@9de.online
Software specialist

Sjaak

Blogpost

juni 2017

Een lichtgewicht database

Een van de componenten die we in onze projecten bij 9de Online eigenlijk altijd direct inzetten is een database. Vaak hebben we geen server versie nodig en volstaat een of meerdere kleine, lichtgewicht databases. We gebruiken dan SQLite. Handig en snel, meer tool dan pakket en toch met een volwaardige ondersteuning van SQL.

Het vraagt wat aandacht het gebruik van SQLite goed ingericht te krijgen. Bij een database server als MySQL of PostgreSQL kan je vanuit elke plek van de software een query insturen, bij SQLite kan dat niet. Het werkt met beperkte lockingmechanismen. Doe je veel schrijfwerk naar de database dan moet je van wat geavanceerde instellingen van SQLite gebruiken om te voorkomen dat de software ontzettend traag wordt.

Waarom lichtgewicht
De voor- en nadelen van een lichtgewicht oplossing leer je in gebruik vanzelf kennen. In praktijk SQLite zijn de technische manco's - gebrek aan caching en locking - in gebruik goed te compenseren.

Lichtgewicht is handig. Het grappige is dat er met een lichtgewicht database oplossing ook andere vragen ontstaan. Is het doel een lichtgewicht, gemakkelijk te gebruiken database dan zit het formalisme van SQL in de weg. Terwijl front-end flexibel met JSON objecten wordt gewerkt, werkt de database met starre SQL tabellen. Het zou handig zijn de JSON direct op te kunnen slaan in de database en er queries op te kunnen doen. Er is een JSON extensie beschikbaar voor SQLite die dat doet. SQL queries kunnen, uitgebreid met json_insert() en json_extract() functies in JSON kolommen selecteren en wijzigen.

XML opslag
Een handige database die een directe toegang heeft tot dezelfde JSON objecten die in front-end worden gebruikt. Prachtige oplossing zou je denken. In iedere ITer schuilt een eigenzinnige knutselaar, dus de variant die we bij 9de Online inzetten is geen JSON maar XML. Dat wil zeggen, intern in de database wordt alles in XML opgeslagen, in uitvoer naar en selectie vanuit het front-end in JSON. Voordeel van XML is dat we in attributes database templates kunnen formuleren met meta- en typeinformatie. String- of boolwaarde, een ID, een link, een lijst met onderdelen, een lijst met links.

In de toekomst open source
Vooralsnog is de extensie sterk in beweging, het idee is de code binnen niet al te lange termijn in open source op github te zetten. Uiteindelijk doel is dat front-end applicaties de gegevens uit op meerdere manieren uit de database kunnen halen. En ook zo terug kunnen schrijven. Als selecties van onderdelen, als lijsten van objecten, ook als geinverteerde lijsten.

Wordt vervolgd..
Voorzover, in vogelvlucht. Wordt vervolgd, binnenkort op deze plek een uitvoeriger overzicht van gebruikte formats en selectiemechanismen. Concreet dus, met voorbeelden!