Constructieprincipes voor de informaticus (12): Kies een opslagstructuur op basis van de eisen

In deze serie van blogs sta ik stil bij de nog steeds geldige informatiekundige constructieprincipes die garant staan voor betere “informatiebouwwerken”. Deze 12e blog in de reeks vervolgt met het derde informatica principe (zie voor het onderscheid mijn startblog). Waarom en wanneer kies je voor een relationele structuur (RDB en SQL) en wanneer is linked data (RDF en SPARQL) als opslagstructuur beter? De meeste mensen denken bij gegevens in termen van tabellen om ze te ordenen maar dat zorgt tegelijk voor een bepaald keurslijf als je later iets wil wijzigen in de structuur. Welke tradeoff’s zijn er tussen de mogelijke oplossingen?

placeholder

Begrippen

Voordat we in gaan op de keuze is het van belang de twee keuzemogelijkheden uiteen te zetten

  • RDB (relationele database) is een type database waarbij gegevens worden opgeslagen in tabellen (ook wel "relaties" genoemd), die met elkaar in verband kunnen worden gebracht door middel van gemeenschappelijke gegevens (sleutels). Het concept van relationele databases is gebaseerd op de wiskundige theorie van verzamelingen en relaties, die het mogelijk maakt om data op een gestructureerde en efficiënte manier te beheren.
  • SQL (Structured Query Language) is een gestandaardiseerde programmeertaal om relationele databases te manipuleren/beheren en ze te doorzoeken. Met name om gegevens op te vragen, in te voegen, bij te werken en te verwijderen (CRUD) uit een relationele database. SQL is essentieel voor het beheer van relationele databases met RDB management systemen zoals MySQL, PostgreSQL, Oracle, en Microsoft SQL Server. SQL wordt ook gebruikt voor het definiëren van de structuur van de database, zoals het maken van de tabellen en het wijzigen van datatypes.
  • SQL is krachtig vanwege zijn eenvoud en efficiëntie bij het beheren van grote hoeveelheden gestructureerde gegevens in relationele databases.
  • RDF (Resource Description Framework) is een gestandaardiseerde manier voor het beschrijven van gegevens om betekenisvolle, semantische relaties uit te drukken, zodat ze kunnen worden uitgedrukt en gedeeld en je er geautomatiseerd over kunt redeneren, ongeacht het domein of de toepassing. In RDF worden gegevens opgeslagen als subject-predicate-object triples. Bijvoorbeeld “Boek"(subject) “heeft titel” (predicate) "De Ontdekking van de Wereld" (object) Dit wordt ook wel beschreven als Linked data en vormt de basis voor het semantische web.
  • SPARQL is een programmeertaal om gestructureerde gegevens op te vragen uit gegevensverzamelingen die RDF gebruiken.

Verschillen tussen RDB en RDF opslag

Aan de hand van onderstaande thema’s zet ik de twee methoden van opslag van data tegen elkaar af.

1. Structuur en Schema

Relationele databases zijn sterk gestructureerd met een beschreven schema, wat het gemakkelijker maakt om gegevens te organiseren en te valideren. Dit kan vooral nuttig zijn voor toepassingen met goed gedefinieerde gegevensmodellen maar kan inflexibel zijn bij het toevoegen van nieuwe datatypes of relaties.

RDF maakt gebruik van een strikt datamodel waarin gegevens altijd worden opgeslagen als subject-predicate-object triples. Dit betekent dat je heel flexibel kunt omgaan met verschillende soorten gegevens en relaties, zonder dat je vooraf een strikt schema hoeft te definiëren (zoals bij relationele databases). Dit maakt RDF-databases ideaal voor het opslaan van heterogene gegevens die niet altijd goed in tabellen passen, zoals gegevens die uit verschillende bronnen komen en semantische verbanden hebben en maakt het eenvoudig om nieuwe gegevens toe te voegen. RDF biedt ook de mogelijkheid om gegevens rijk te beschrijven met metadata, zoals context, betekenis, en relaties. Dit stelt je in staat om gegevens op een meer gedetailleerde en betekenisvolle manier te modelleren dan traditionele relationele databases, die vaak beperkt zijn tot alleen de opslag van gegevens (waarvan de betekenis in een apart metamodel is beschreven).

RDF wordt vaak genoemd als een vorm van een grafen-database maar die is gebaseerd op knopen en relaties die attributen kunnen bevatten en niet noodzakelijk gebaseerd op triples; er zijn geen verplichtingen rond semantiek. Dit is vaak meer flexibel en minder strikt dan het RDF-datamodel. Data wordt opgeslagen in native grafendatabaseformaten. Beide hebben hun unieke sterke punten afhankelijk van de use case.

2. Transacties

Relationele databases ondersteunen ACID-transacties (Atomicity, Consistency, Isolation, Durability) met sterke mechanismen voor gegevensintegriteit (bijv. foreign keys, constraints), wat betekent dat ze betrouwbare gegevensverwerking bieden, cruciaal voor veel registratieve bedrijfsapplicaties.

RDF heeft geen inherente mechanismen voor gegevensintegriteit, wat kan leiden tot inconsistente of incomplete gegevens.

3. Complexe Queries

RDB gebruikt SQL als een krachtige querytaal waarmee complexe queries en joins tussen tabellen kunnen worden uitgevoerd. Dit maakt het eenvoudig om verbanden tussen gegevens te leggen en aggregaties.

RDF gebruikt SPARQL, wat goed is voor het ophalen van gegevens uit complexe, onderling verbonden gegevens en het uitvoeren van ingewikkelde queries in triples voor het vinden van specifieke relaties tussen entiteiten, maar mogelijk minder efficiënt is voor complexe queries die typisch zijn voor relationele databases.

4. Performance

Een relationele database kan voor bepaalde gebruiksscenario's, zoals grote datasets met complexe queries beter presteren door optimalisaties en indexering waardoor je gericht kunt zoeken door de hele dataset.

RDF kan trager zijn voor grote hoeveelheden gegevens, vooral als de queries complex zijn, vanwege de graafstructuur waardoor je vaak de hele dataset moet doorzoeken.

5. Maturiteit en Ondersteuning

Relationele databases zijn al lange tijd in gebruik en hebben een breed scala aan tools, bibliotheken en community-ondersteuning, wat het makkelijker maakt om problemen op te lossen en hulp te vinden.

RDF is relatief nieuw en vereist een andere manier van denken dan de traditionele tabellen en meer semantische standaardisatie van de ontologie.

6. Beveiliging

Relationele databases bieden vaak robuuste beveiligingsmechanismen, zoals rol gebaseerde toegangscontrole en encryptie, wat belangrijk kan zijn voor gevoelige gegevens.

Bij RDF kan beveiliging minder gestandaardiseerd zijn, afhankelijk van de implementatie. Maar veelgebruikte RDF-databases zoals Virtuoso, Stardog en GraphDB bieden ingebouwde ondersteuning voor gangbare beveiligingsmechanismen zoals encryptie, logging en validatie.

Er zijn nog andere thema’s die een rol kunnen spelen bij de keuze zoals schaalbaarheid, gegevensdistributie, logisch redeneren en of de technologie een open standaard is of niet (portabiliteit).

Conclusie

Als informaticus zul je met bovenstaande kenmerken moeten beoordelen waar het zwaartepunt ligt van de mogelijkheden die je van waarde vindt voor je oplossing. In het algemeen hangt de keuze tussen SQL en RDF af van de specifieke eisen aan de oplossing, zoals datamodel, prestatie-eisen en de noodzaak voor flexibiliteit of gegevensintegriteit. Hoewel linked data databases met RDF hun eigen voordelen hebben, zoals flexibiliteit in het modelleren van gegevens en het ondersteunen van semantische webtechnologieën, kunnen SQL-databases een betere keuze zijn voor traditionele, relationele toepassingen waar stabiliteit en prestaties essentieel zijn. Een RDB is vooral geschikt voor traditionele registratieve bedrijfsapplicaties, ERP-systemen, en situaties waar consistente en gestructureerde gegevens vereist zijn en zoeken over tabellen heen snel moet kunnen. RDF ligt voor de hand voor toepassingen die profiteren van semantische relaties, zoals linked data, ontologieën en kennisverzamelingen waardoor je flexibel bent in de structuur en die structuur niet vooraf helemaal bekend hoeft te zijn.

Je zou kunnen denken dat RDF databases een typische keuze zijn voor AI toepassing maar dat is niet het geval. De keuze hangt ook hier af van de specifieke behoefte. RDF is de keuze wanneer semantisch redeneren en kennis een rol spelen (chatbots en bijvoorbeeld medische of juridische adviezen). Voor machine learning en deep learning (zoals lanquage models) zijn betere alternatieven die zijn geoptimaliseerd voor snelheid, schaalbaarheid en omgaan met ongestructureerde data.

Tenslotte(2) kun je ook kiezen voor een hybride oplossing waarbij je een soort “best of both worlds” oplossing maakt. Zo zou je een registratie die flexibel moet kunnen omgaan met verschillende soorten gegevens en relaties kunnen opslaan in RDF terwijl je voor het snel zoeken door specifieke objecten in die opslag en datahistorie een afslag maakt naar een relationele opslag (bijvoorbeeld het datawarehouse).

Referenties

  1. Voor deze blog heb ik gebruik gemaakt van AI (chatGPT) als experiment en kennisbron.
  2. Ik heb een key-value database in dit artikel buiten beschouwing gelaten. Deze is ideaal voor toepassingen waar snel, eenvoudig en schaalbaar data-opslag nodig is, maar minder geschikt voor complexe datarelaties of geavanceerde zoekopdrachten

Lees hier de andere informatiekundige principes:

  1. Betekenisloze identiteitsaanduiding, lees hier.
  2. Ontkoppelpunten voor complexiteitsreductie en flexibiliteit, maximale onafhankelijkheid van delen, lees hier.
  3. Consistentie van taal, lees hier.
  4. Duidelijke verantwoordelijkheidsverdeling en functiescheiding voor de administratie, lees hier.
  5. Beslissingsbevoegdheid voor de uitvoering zo laag mogelijk beleggen, lees hier.
  6. Autorisatie loskoppelen van identificatie/authenticatie, lees hier.
  7. Enkelvoudige vastlegging van stamdata, lees hier.
  8. Data en metadata scheiden in opslag en verwerking, lees hier.
  9. Standaardpatronen toepassen zonder afwijkingen, lees hier.
  10. Applicatiefunctie en dataopslag scheiden, lees hier.
  11. Apparaat onafhankelijk ontwikkelen, lees hier.
  12. Kies een opslagstructuur op basis van de eisen, lees hier.

Gerelateerde Inzichten

divider