meolus.de

Internet Movie Database (IMDB) in MySQL importieren


Im folgenden werde ich beschreiben, wie man die Internet Movie Database (IMDB) in eine MySQL-Datenbank importieren kann. Dazu benötigt man zunächst einen MySQL-Server bzw. Zugang zu einem. Dieser sollte idealerweise lokal angeschlossen sein und Daten von temporär bis zu 4 GB aufnehmen können, womit schonmal die meisten einfachen Hosting-Angebote wegfallen. Ich habe dazu einen lokalen MySQL-Server aus einer XAMPP-Installation verwendet, so dass ich dort keine Einschränkungen hatte.

Python vorbereiten und imdbpy installieren

Für den Import gibt es ein Phython-Script namens imdbpy. Ich musste jedoch erstmal unter Windows Vista Phython installieren. Dazu habe ich einfach den Windows Installer von http://www.python.org/download/ benutzt. Leider war das noch nicht alles, sondern man muss noch zwei weitere Python Module installieren, damit imdbpy funktioniert. Dafür habe ich einfach easy-install installiert, indem ich einfach "ez_setup.py" herunter geladen und installiert habe. Zur Not gibt es auch noch ein Video, welches auf der easy-install Website verlinkt ist, in dem vorgeführt wird wie man easy-install installiert.

Wenn man dann easy-install installiert hat, muss man nur noch in der Eingabeaufforderung einmal "easy_install -U SQLObject" und "easy_install -U mysql_python" ausführen um den benötigten Datenbank-Wrapper SQLObject und das MySQL-Modul zu installieren. Ferner sei hier anzumerken, dass imdbpy natürlich auch mit allen anderen vom Python-Datenbankwrapper unterstützten Datenbanksystemen funktioniert.

Schließlich installiert man dann noch imdbpy, wozu ich mich des Windows-Installers von imdbpy bedient habe. Ob die Installation mittels des nahe liegenden Befehls "easy_install -U imdbpy" funktioniert hat kann ich nicht genau sagen, da ich bereits als erstes per Windows-Installer imdbpy installiert hatte und danach erst die ganzen Abhängigkeiten aufgedeckt habe. Jedenfalls gab es beim nachträglichen Versuch ein paar Warnungen, dass Python mit dem falschen Compiler kompiliert sei und deswegen einzelne Bestandteile von imdbpy dann ihrerseits nicht kompiliert werden können.

Download der IMDB Daten

Natürlich braucht man auch noch die Daten der IMDB. Dazu lädt man von einem der IMDB FTP-Mirrors ALLE Dateien aus dem Hauptverzeichnis herunter, was momentan 52 Dateien sind, die insgesamt 582 MB groß sind. Die Dateien müssen alle in das gleiche Verzeichnis welches ich hier mal 'D:\IMDB-Daten' nenne. Beim Download der 52 Dateien kann ein Download-Manager wie z.B. das Firefox-Plugin DownThemAll! sehr behilflich sein. Die Unterverzeichnisse mit den Diffs, etc. benötigt man nicht.

imdbpy anwenden

Schließlich kann man imdbpy mittels "imdbpy2sql.py -d 'D:\IMDB-Daten' -u 'mysql://user:password@host/database'" anwerfen, wobei die Datenbank "database" existieren muss (weiterführende Details in der imdbpy-Dokumentation in der Datei "README.sqldb"). Nach 100 Minuten war das Script auf meinen (Athlon64 X2 4200+, 3GB RAM) durchgelaufen, wobei ich glaube das das verschlüsselte Laufwerk auf dem der MySQL-Server lief das ganze sehr verlangsamt hat. Denn das Einfügen der Daten hat 65 Minuten gedauert und alleine das darauf folgende Erstellen der Indizes weitere 35 Minuten. In der "README.sqldb" ist auf einem AthlonXP 1800+, 1GB RAM von 160 und 45 (insgesamt 205) Minuten die Rede, was meine Vermutung zu bestätigen scheint, dass mein System ohne die Verschlüsselung hätte schneller sein sollen.

Das Script erzeugt 18 MyISAM Tabellen, mit insgesamt fast 38 Millionen einzelnen Einträgen. Die Datenbank ist final etwa 2,8 GB groß, hat aber gerade bei der Index-Erstellung temporär bis zu 4 GB benötigt. Da die Internet Movie Database immer weiter wächst wird der Speicherverbrauch in Zukunft vermutlich immer weiter anwachsen.

Fazit

Wie die Datenbank nun benutzt werden kann findet man in der imdbpy-Dokumentation verschiedenen Dateien erklärt. Man kann z.B. mit imdbpy direkt auf die runtergeladenen Dateien der IMDB zugreifen, mit den imdbpy-Programmen auf die Datenbank zugreifen oder natürlich die imdbpy-Komponente direkt in Python benutzen. Mir ging es jedoch in erster Linie darum die IMDB in eine lokale Datenbank zu bekommen was mit dem oben genannten Arbeitsschritten gelungen ist, wenn ich auch noch nicht genau die Struktur rausgefunden habe um eigene sinnvolle Anfragen in SQL zu stellen.

Copyright © meolus, 2002-2015