Wikipedia:Technik/Datenbank/Download

Die Wikipedia kann nicht nur online mit einem Webbrowser gelesen werden; es besteht auch die Möglichkeit, sich die gesamte Wikipedia auf den eigenen Rechner herunterzuladen.

Es gibt zwei Verwendungsmöglichkeiten:

  1. Analyse des gesamten Quelltextes auf einmal; für fortgeschrittene Autoren- und Wartungstätigkeiten.
  2. Lesen aller Seiten des Projekts, ohne eine Verbindung zum Internet haben zu müssen.
    • Dazu benötigt man eine bestimmte Software, die den Inhalt des Wiki in einer nutzbaren Form darstellt: Text-Reader. Diese ersetzt den Browser.
    • Eine besondere Lösung hierbei ist das Simulieren eines Wiki-Servers auf dem eigenen PC; siehe nächsten Abschnitt.

Wiki-Projekte sind hier alle zwei bis vier Wochen aktualisiert verfügbar („Dump“). Die Texte der deutschsprachigen Wikipedia haben über 6 Gigabyte, dazu kämen die Bilder und Mediendateien, die nicht als Dump verfügbar sind und ein Vielfaches der Größe einnehmen würden.

MediaWiki-Lösung

Die auf den Servern laufende Software MediaWiki kann man sich kostenlos herunterladen, allerdings nicht in der allerneuesten Version. Damit lassen sich beliebige Wiki-Projekte (auch eigene) betreiben; und man kann den letzten monatlichen Stand einer Wikipedia simulieren und im Browser lesen.

Auf Wikipedia:Technik/MediaWiki/Private Installation findet sich eine von mehreren Anleitungen für die XML-Version – vom blanken Desktop bis zur fertigen Wikipedia (man benötigt einen Internetanschluss an dem Computer, an dem man die Offline-Wikipedia installieren möchte, oder transportiert die Daten per Massenspeicher (z. B. externe Festplatte)).

Herunterladen aller Seiten als XML-Dump

Die gewünschten Datensätze herunterladen. Am einfachsten ist es mit dem Dump der aktuellen Versionen der Artikel und einigen anderen Seiten: dewiki-??-pages-articles.xml (Datei). (RSS-Feed)

Import in MySQL

Der Import der XML-Daten kann entweder über das langsame PHP-Skript importDump.php der MediaWiki-Software erfolgen (liegt im Verzeichnis maintenance/ der MediaWiki Installation), oder über das etwas schneller arbeitende Java-Paket MWDumper. Dieses benötigt eine funktionierende Java-Installation. Der Import erfolgt dann mit folgendem Befehl:

./mwdumper --format=sql:1.5 pages_meta_current.xml.bz2
| mysql -u <username> -p <databasename>

Es ist wichtig, dass die Datenbanktabellen bis auf site_stats, user, user_groups und interwiki vollständig leer sind (TRUNCATE TABLE…), da sonst der Import fehlschlagen kann. Sollte ein Fehler auftreten, wird MWDumper dennoch weiter das XML in SQL konvertieren, aber der mySQL-Server importiert nicht mehr. In diesem Fall prüfen, ob wirklich alle Tabellen leer sind, und von vorn beginnen.

Damit hat man die Artikelseiten in die Datenbank importiert und kann im Wiki lesen.

Der Befehl zum Leeren der Datenbanktabellen sieht wie folgt aus:

truncate archive; truncate category; truncate categorylinks; truncate externallinks; truncate filearchive; truncate hitcounter; truncate image; \
truncate imagelinks; truncate ipblocks; truncate job; truncate langlinks;  truncate logging; truncate math; truncate objectcache;  truncate oldimage; \
truncate page; truncate page_props; truncate page_restrictions; truncate pagelinks; truncate protected_titles; truncate querycache; truncate querycache_info; \
truncate querycachetwo; truncate recentchanges; truncate redirect; truncate revision; truncate searchindex; truncate templatelinks; truncate text; \
truncate trackbacks; truncate transcache; truncate updatelog; truncate user_newtalk; truncate watchlist;

Linktabellen bauen

Für viele interessante Datenbankabfragen sind Informationen darüber notwendig, welcher Artikel auf welche anderen Ressourcen verlinkt. Die Selbsterstellung dieser Linktabellen ist allerdings ein zeitaufwendiger Prozess.

php refreshLinks.php

In seiner gegenwärtigen Fassung ist dieses Skript ein riesiges Speicherleck. Sobald der Rechner wegen Speichermangels auf die Auslagerungsdatei zurückgreifen muss, geht die ohnehin schon niedrige Ausführungsgeschwindigkeit des Skripts immer rascher gegen Null. Die Linktabelle sollte daher abschnittsweise erstellt werden, indem das Skript zwischendrin abgebrochen wird, man sich die letzte Position merkt und folgendermaßen wieder startet:

php refreshLinks.php -- 228600

Auf diese Weise wird der unnötigerweise verbrauchte Speicher wieder freigegeben und die Erstellung der Linktabelle bei Artikel Nr. 228600 fortgesetzt.

Optional: Textindex

Wenn man Volltextsuchen durchführen möchte, muss ein Textindex erzeugt werden. Dies geschieht über

php rebuildtextindex.php

Wikipedia selbst arbeitet übrigens nicht mit dieser relativ langsamen MySQL-basierten Suche, sondern verwendet Apache Lucene.

Optional: Recentchanges aktualisieren

Wenn man wissen möchte, bis zu welcher Uhrzeit der installierte Datenbank-Dump reicht, kann man kurz

php rebuildrecentchanges.php

sagen, um die Seite „Letzte Änderungen” zu aktualisieren.

Optional: Artikelanzahl neu berechnen

Die Anzahl der im Wiki vorhandenen Artikel und einige andere Zahlen können mit initStats.php neu berechnet werden:

php initStats.php

Ein Wort zur Hardware

Die Wikipedia-Datenbank stellt mittlerweile recht hohe Ansprüche an leistungsfähige Hardware. Zur besseren Einschätzung daher einige Erfahrungen aus der Praxis: Wenn man nur lesen möchte, genügt ein Rechner der 1-GHz-Klasse mit wenig RAM. Für anspruchsvollere Aufgaben wie Wartungsseiten, SQL-Abfragen, selbst gebaute Linktabellen oder den Import der old-Tabelle sollte man aber eine bessere Hardware zur Verfügung stellen: 1 GB RAM oder mehr und ein möglichst schneller Prozessor mit mehr als 3 GHz oder Multicore-Prozessoren sind sehr sinnvoll, ebenso wie ein Solid-State-Drive. Die Tabellen sollten im MySQL-Server möglichst als InnoDB abgelegt sein, damit die Antwortzeiten kürzer werden (allerdings auf Kosten des Speicherverbrauchs). Anmerkung von Echoray: Diese Faustregel basiert noch auf Erfahrung mit der alten MediaWiki-Software 1.3 und MySQL 4.0. Mit MyISAM waren die Linktabellen einfach zu ineffektiv. Ich habe den Verdacht, dass der Rückgriff auf den Filesystem-Cache des Betriebssystems einfach nicht so gut ist wie der dedizierte Cache, den InnoDB bietet. Das kann mit neuerer Software inzwischen anders sein. Jemand könnte das mal messtechnisch erfassen … -- MyISAM lockt einfach mehr auch bei einfachen Zugriffen.

Herunterladen einzelner Seiten

Unter Spezial:Export kann man sich einzelne oder mehrere Seiten im XML-Format herunterladen.

Weitere Informationen