Mediawiki som datalager

lagen.nu använder jag ingen relationsdatabas. Alla dokument ligger i varsin statisk fil, och den samling av metadata som behövs för att jag ska kunna exempelvis skapa index över alla dokument ligger i en gigantisk .n3-fil som jag går igenom med RDFLib. Anledningen är förstås min djupt kända misstro mot konceptet databasserver i allmänhet och relationsdatabaser i synnerhet. Jag tycker filsystemet är underskattat som databas. Det finns alltid där, är snabbt, går att debugga och manipulera med välbekanta verktyg (ls, find, grep, xargs, tar, rsync), har ett begripligt rättighetssystem integrerat med operativsystemet, osv.

Till nästa stora iteration av lagen.nu-koden kommer jag ändå att börja använda någon sorts server för datalagring. Men det blir förmodligen inte en traditionell relationsdatabas med SQL-gränssnitt. Min datamodell är inte särskilt relationell. Med tanke på hur djupt jag integrerat RDF i systemet blir det förmodligen en kombination av en triplestore tillsammans med någon form av dokumentdatabas. För det tidigare blir det förmodligen Sesame, för det senare har jag tittat nyfiket på CouchDB.

Men i kommentarerna till ett tidigare inlägg om en mediaövervakningsbot föreslog Peter Krantz att använda Mediawiki som datalagring. Jag började kolla på hur man kan automatisera hämtning och lagring av data från en Mediawikiserver, och det visar sig att det finns en mycket kompetent pythonmodul, mwclient, för ändamålet (det finns även ett annat ramverk, pywikipedia, men det gav inte alls ett lika bra första intryck). Så här enkelt är det att skapa och ändra en sida:

    import mwclient
    
    site = mwclient.Site('www.example.org','/path/to/mediawiki/')
    site.login('myuser','secret')
    page = site.Pages['Testpage']
    page.save("Hello world", summary="initial version")
    page.save("Goodbye world", summary="updated version")
    print "Page has %d revisions" % len(page.revisions())

Allt det som mediawiki ger — revisionshantering med diffar, användarhantering, admin- och slutanvändargränssnitt, spamkontroller, roll- och rättighetssystem, och utökningsmöjligheter – får man på köpet. Det är kanske inget man vill använda för att hantera jättemånga updateringar i sekunden, men om man kan se till att exv cachea de anrop som bara hämtar data kan man nog få det snabbt nog.

Tags: , , ,

One Response to “Mediawiki som datalager”

  1. [...] Mediawiki som datalager [...]

Leave a Reply