Zum Inhalt springen

Aufgabe 07 - IMDB Index Optimierung

Zu Zen-Modus wechseln
  • Datenbankoptimierung durch den Einsatz von Indizes.
  • Analyse und Vergleich von Query-Laufzeiten (mit und ohne Indizes).
  • Arbeiten mit großen Datensätzen (IMDB) unter PostgreSQL.

(Analog zu Aufgabe 1 des vorherigen Aufgabenblatts.)

Rezeption:

  • Laden Sie die IMDB-Daten von https://www.imdb.com/interfaces/ herunter.
  • Entpacken Sie die .tsv.gz-Dateien.
  • Untersuchen Sie die Struktur der Dateien, indem Sie die ersten 10 Zeilen jeder Datei betrachten.
  • Beschreiben Sie Format, Besonderheiten und Datenfelder.

2. Initiale Abfragen und Laufzeitmessung (ohne Indizes)

Abschnitt betitelt „2. Initiale Abfragen und Laufzeitmessung (ohne Indizes)“

Reproduktion:

(Falls Sie diesen Schritt nicht bereits in Aufgabe 14 erledigt haben.)

  • Importieren Sie die Daten mittels PostgreSQL-COPY oder \copy.
\copy title_basics
FROM 'C:/imdb/title.basics.tsv'
WITH (FORMAT csv, DELIMITER E'\t', HEADER true, NULL '\N');
  • Stellen Sie sicher, dass keine Datensätze übersprungen werden.
  • Aktivieren Sie die Laufzeitmessung in psql:
\timing on

Führen Sie die folgenden Abfragen ohne Indizes aus und messen Sie jeweils die Laufzeit:

  1. Wie viele Produktionen (Filme, Serien, etc.) gibt es?
  2. Wie viele Personen sind in den IMDB-Daten registriert?
  3. Welche verschiedenen Kategorien an Tätigkeiten (category) gibt es in title_principals?
  4. Wie viele Produktionen haben mehr als 100.000 Wertungen?
  5. Was sind die 10 besten Produktionen aller Zeiten, basierend auf Bewertung, mit mehr als 100.000 Wertungen? Wann wurden diese produziert?
  6. Was sind die 10 besten Filme aller Zeiten (titleType=‘movie’) mit mehr als 100.000 Wertungen? Wie viele davon wurden nach dem Jahr 2000 produziert?
  7. Finden Sie Ihren Lieblingsschauspieler bzw. Ihre Lieblingsschauspielerin nach Name und messen Sie die Laufzeit.
  8. Welche Produktionen hat diese Person gemacht? (Via title_principals + Filter auf category.)
  9. In welchen Filmen, Kurzfilmen, Serien oder Episoden war diese Person beteiligt?
  10. Anzahl der Titel und Summe der Laufzeiten pro Jahr, in denen diese Person als Schauspieler (category='actor' OR 'actress') beteiligt war.
  11. Liste der verschiedenen Tätigkeiten dieser Person (z. B. Schauspieler, Regisseur, Produzent).

Dokumentieren Sie alle Laufzeiten.


Analyse & Produktion:

Überlegen Sie, welche Spalten Sie indizieren sollten, um die oben genannten Abfragen zu beschleunigen.

Typische Kandidaten (zur Orientierung):

  • title_ratings(numVotes)

  • title_ratings(averageRating)

  • title_basics(titleType)

  • title_basics(startYear)

  • name_basics(primaryName)

  • title_principals(nconst)

  • title_principals(tconst)

  • Kombinationen wie:

    CREATE INDEX idx_title_ratings_votes_rating
    ON title_ratings (numVotes DESC, averageRating DESC);

Erstellen Sie die von Ihnen geplanten Indizes.


4. Optimierte Abfragen und Laufzeitmessung (mit Indizes)

Abschnitt betitelt „4. Optimierte Abfragen und Laufzeitmessung (mit Indizes)“

Analyse:

  • Wiederholen Sie alle Abfragen aus Schritt 2, diesmal mit Ihren Indizes.
  • Messen Sie wie zuvor die Laufzeiten.
  • Dokumentieren Sie diese Ergebnisse.

Analyse:

Vergleichen Sie die Laufzeiten ohne vs. mit Indizes.

Verwenden Sie:

Speed-Up = (Laufzeit ohne Indizes) / (Laufzeit mit Indizes)

Erstellen Sie eine Tabelle oder ein Diagramm:

AbfrageZeit ohne IndizesZeit mit IndizesSpeed-Up
z. B. #412,8 s0,9 s14,22×

Evaluation:

  • Welche Abfragen wurden stark schneller?
  • Bei welchen Abfragen gab es kaum Verbesserungen, und warum?
  • Welche Arten von Indizes sind für große reale Datenbanken sinnvoll?
  • Welche würden Sie im Rückblick nicht setzen?

Ihre Dokumentation soll enthalten:

  • Analyse der IMDB-Daten und Begründung Ihrer Indexwahl.
  • Alle gemessenen Laufzeiten (mit und ohne Indizes).
  • Berechneter Speed-Up pro Abfrage.
  • Kurze Reflexion zur Effektivität der Indizes.

HTL Villach
INSY 2024-2025
Dipl.-Ing. Oliver Maurhart
[email protected]