XML als database

XML alsdatabase: Maf
Op de vorige pagina's hebben we vastgesteld dat XML zijn nut kan hebben voor technische interfaces (mits je er voorzichtig mee om gaat), XML kun je opslaan als veld in een database, en het is heel handig als vervanger van ini files. Je kunt echter ook een stap te ver gaan, en XML gaan gebruiken als vervanger van een database, de zogenaamde XML Native Database.

XML heeft een hiërarchische en flexibele structuur, heel geschikt om data op te slaan, en hier komt waarschijnlijk het idee vandaan om XML als database te gebruiken.  Het lijkt op het eerste gezicht aantrekkelijk omdat je geen aparte database hoeft te kopen en te installeren. En het lijkt ook weinig werk, omdat je snel iets kan maken dat een beetje werkt.

Maar in de praktijk blijkt het allemaal erg tegeXML is beslist één van de slechtst denkbare vervangers van een database die je je kunt bedenkenn te vallen, eigenlijk logisch als je er een klein beetje dieper over na denkt.  De belangrijkste twee dingen die je met een database wilt doen is opzoeken en opslaan.

Shlemiel the painter algorithm.

Shlemiel gets a job as a street painter, painting the dotted lines down the middle of the road. On the first day he takes a can of paint out to the road and finishes 300 yards of the road. "That's pretty good!" says his boss, "you're a fast worker!" and pays him a kopeck.

The next day Shlemiel only gets 150 yards done. "Well, that's not nearly as good as yesterday, but you're still a fast worker. 150 yards is respectable," and pays him a kopeck.

The next day Shlemiel paints 30 yards of the road. "Only 30!" shouts his boss. "That's unacceptable! On the first day you did ten times that much work! What's going on?"

"I can't help it," says Shlemiel. "Every day I get farther and farther away from the paint can!"

Opzoeken
Zoals ook Schlemiel heeft uitgevonden gaat de  flexibiliteit van XML ten koste van performance. Relationele databases slaan de data zodanig op dat het eenvoudig is terug te vinden, met een minimum beslag op schijf en met een minimum aantal intern geheugen operaties. Relationele databases bevatten heel geavanceerde index technologie om gegevens snel terug te vinden. Dat alles ontbreekt bij een XML database. Bij zoeken in XML moet je, net als Schlemiel dat deed, telkens vooraan beginnen!

FOR
EACH Update
UPDATE
ALL FIELDS IN
ALL RECORDS IN
ALL TABLES

Opslaan
Maar het wordt nog erger als je gegevens wilt wijzigen.  Voor elk veld dat je wilt wijzigen moet je immers het hele XML bestand doorlopen.  Als je de status van een order op 'uitgeleverd' wilt zetten, moet je  het hele XML bestand eerst in het geheugen inlezen, het ene veld wijzigen, en vervolgens allemaal weer terugschrijven.  Je voert niet het statement 'update status from orders where orderId=" uit, maar het statement  'Update * in *'.  

Sommige mensen vinden wachte op computers niet zo erg. Maar alles wat lang duurt kan fout gaan, en als dit fout gaat is de ellende niet te overzien. Je hebt ook geen transactie afhandeling en multi-user access gaat totaal fout.  

Bij een XML database  mis je al die faciliteiten die een normale relationele database zo prettig maken om mee te werken, zoals een uitontwikkelde query taal, query optimalisatie, replicatie, triggers, relational constraints en stored procedures.

Eenmaal op het verkeerde pad worden soms hele creatieve oplossingen bedacht zoals Microsoft's Efficient techniques for Modifying Large XML files. Maar de naam is misleidend, het is helemaal niet efficiënt om voor elke update en insert een aparte XML file te maken. En het is ook niet 'sophisticated' is om telkens een klein stukje van een XML file tegelijk in te lezen en terug te schrijven, want uiteindelijk ontkom je er niet aan de hele XML file in te lezen en terug te schrijven. De structuur van XML is gewoon niet geschikt voor update en insert operaties. Een technologie met een zwakke basis maak je met trucs alleen maar nog zwakker.

Open source zet klok 30 jaar terug De misvatting dat XML geschikt is als database leeft niet alleen bij sommige medewerkers van Microsoft.
De zo modern lijkende open source XML database lijkt bijvoorbeeld als twee druppels water op de primitieve hiërarchische IMS database van IBM uit de jaren 70 van de vorige eeuw:  inflexibel en niet onderhoudbaar. Niemand was er blij mee.

XML is - hoe je ook bekijkt - beslist één van de slechtste vervangers van een database die je kan bedenken.  En als kosten een probleem zijn: er zijn veel betere oplossingen zoals de uitstekende gratis MSDE database van Microsoft, of de open source database MySQL.  

En als je XML gebruikt, ben je dan ook één van die vele programmeurs die XML zo moeilijk leesbaar vinden? Meer...


 

©1996-2008 Lizatec
<  Interne structuur XML hoe gebruiken?   >