Im Folgenden wollen wir eine Datenbank einer MediaWiki-Installation untersuchen. MediaWiki ist die wohl am weitesten verbreitete Wiki-Software, die auch bei Wikipedia zum Einsatz kommt.
Den Daten von MediaWiki liegt ein großes und recht komplexes Datenbankmodell zugrunde, das oben abgebildet ist.1) In der Datenbank werden die Artikel, Benutzerinformationen, Kategorien und andere Entitäten abgelegt.
In einem ersten Schritt wollen wir einige Analysen auf den Daten der Datenbank durchführen.
Nun sollen die Daten um sensible Informationen bereinigt werden.
Wir wollen nun die Verlinkungsstruktur der Artikel in unserem Wiki sichtbar machen. Hieraus soll erkennbar sein, welcher Artikel auf welchen anderen Artikel verweist.
Einer der Gründer von Google Lary Page. Er entwickelte den Page-Rank-Algorithmus, auf dessen Grundlage die Suchmaschine die Suchergebnisse sortiert. Auf einem Poster von Larry Page und Sergey Brin ist dieser Algorithmus in Kurzform dargestellt.
A | B | C |
---|---|---|
1 | 1 | 1 |
0.575 | 0.575 | 1 |
0.575 | 0.575 | 1 |
0.394 | 0.394 | 0.639 |
0.317 | 0.317 | 0.485 |
0.284 | 0.284 | 0.419 |
0.270 | 0.270 | 0.391 |
0.264 | 0.264 | 0.379 |
0.262 | 0.262 | 0.374 |
0.261 | 0.261 | 0.372 |
Nun wollen wir den Algorithmus nachprogrammieren.
Für die Implementierung mit C# benötigst du einen sogenannten MySQL-Connector für C#, der als Bibliothek eingebunden werden muss. Danach kann über die die Klassen MySqlConnection, MySqlCommand, MySqlReader
auf die Daten zugegriffen werden. Ein Tutorial beschreibt das Vorgehen und enthält Beispiel-Quelltext. Den allgemeinen Aufbau zeigt folgender Quelltext.
using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; public class Tutorial { public static void Main() { string connStr = "server=localhost;user=root;database=world;port=3306;password=******;"; MySqlConnection conn = new MySqlConnection(connStr); Console.WriteLine("Connecting to MySQL..."); conn.Open(); string sql = "INSERT INTO Country (Name, HeadOfState, Continent) VALUES ('Disneyland','Mickey Mouse', 'North America')"; MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.ExecuteNonQuery(); string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'"; MySqlCommand cmd = new MySqlCommand(sql, conn); MySqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { Console.WriteLine(rdr[0]+" -- "+rdr[1]); } rdr.Close(); conn.Close(); Console.WriteLine("Done."); } }
Die Klassen sollen nun getestet werden.
Für das dritte Beispiel kannst du den folgenden Quelltext für deine Tests verwenden.
Für Beispiel 3:
Ausgabe:
Pagerank A:0,260869565217391 Erwartet: 0,26 Pagerank B:0,260869565217391 Erwartet: 0,26 Pagerank C:0,371739130434783 Erwartet: 0,37