Doppelte/sehr ähnliche Eiträge in der DB

Hi,

ich habe in einer DB ein paar Datensätze und einige Felder davon können sehr ähnlich sein. Er soll immer die ersten zwei mit einem bestimmten Ähnlichkeitswert finden.
Den Wert kann ich mit levenshtein-Algorytmus berechnen.
Das problem ist die Datenmenge.
Bei 200.000 Datensätzen ist das ganze nicht mehr wirklich performant, wenn man es in PHP-cli schreibt.
Gibt es einen Mechanismus, die rechenoperationen zu veringern, wenn man dennoch jedes Feld mit jedem anderen seines Namens vergleichen will?
Wär für Tips jeder hinsicht dankbar.
Ich will auf eine Rechenzeit von unter 10min bei 200.000 Datensätzen kommen.

gez.
Der Desian

Hi Desian,

welches Datenbanksystem (Oracle, mySQL, Access…) benutzt Du denn?
Eventuell besteht die Möglichkeit, die Filterung direkt im entsprechenden SQL-Dialekt zu programmieren (das heißt, der Code würde direkt auf dem Datenbankserver laufen ohne den zeitintensiven Datentransport über’s Netz).

Leider nur ein MySQL, soll aber später nach ORACLE portiert werden.

Wieso „leider nur MySQL“?

Du kannst in MySQL genauso gut wie in jeder anderen Programmiersprache Schleifen und if-Abfragen usw. programmieren. Ob das am Ende wirklich zu einer starken Geschwindigkeitssteigerung führt, will ich aber nicht garantieren.

Wie oft muss denn diese „Ähnlichkeit“ berechnet werden? Eventuell kannst Du diesen Ähnlichkeitswert selbst in einem Datenfeld abspeichern, so dass Du ihn nicht jedesmal neu berechnen musst.

Im übrigen interessiert mich ja wirklich, welche Art von Daten in Deiner DB gespeichert werden: sind das nur Zahlen oder auch Text (und was ist dieser levenshtein? --> muss gleich mal danach googeln)!

Gut, wenns dich interessiert:
Userdaten. Ziel 400.000 Stück
Und es soll jeder user mit jedem Vergichen werden um doppelte bzw ähnliche herauszubekommen.
Und das bei 4 Feldern. Daraus ergibt sich eine ÜbereinsimmungsZahl, die dann ab einem Bestimmten Wert in % in die DB in ein relationsTable geschrieben wrden soll.

Der levensteinAlgorythmus berechnet einen ähnlichkeitswert zwischen 2 Strings… Vermutlich werde ich die Daten in einem C-Script auswertn müssen, da gibt es optimierte Verfahren…

Und wenn die Datenmengen derart anwachsen geht MySQL leider in die Knie…

gez.
Der Desian