Archivlink: javarea.de Forum > PHP, MySQL & CGI > Doublettenprüfung - Datenbankoptimierung
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Doublettenprüfung - Datenbankoptimierung
Pages: [1]
| geschrieben von Simon am 21.11.2008 - 10:21 |
Hallo zusammen
Ich überlege mir gerade wie ich eine nachträgliche Prüfung doppelter Datensätze performancemässig am schnellsten abarbeiten kann.
Momentan werden im ersten Schritt alle Datensätze (z.B. Adressen) geladen. Danach wird für jeden Datensatz ein Query abgeschickt das nach ähnlichen Einträgen sucht.
Bei kleinen Datenmengen ist dies kein Problem, doch mit 100'000 Datensätzen wird es sehr zeitaufwendig.
Gibt es da bestehende Muster respektive Algorithmen, um dies zu optimieren?
Google liefert unbefriedigende Ergebnisse, da mir die treffenden Schlagworte unbekannt sind.
Wie sind Eure Erfahrungen damit?
Herzlichen Dank
Ps. Natürlich läuft das ganze nicht unter MySQL  |
| geschrieben von Klaush am 21.11.2008 - 11:44 |
Wenn es eine MySQL Frage ist, warum schreibst du sie nicht in das dafür vorgesehene Forum? Ich verschiebe das Thema jetzt.
| Zitat von: Simon am 21.11.2008 - 10:21 | | |
Momentan werden im ersten Schritt alle Datensätze (z.B. Adressen) geladen. Danach wird für jeden Datensatz ein Query abgeschickt das nach ähnlichen Einträgen sucht.
|
Das im nachhinein zu prüfen ist immer performancelastig. Die Überprüfung auf gleiche Datensätze sollte bereits beim Schreiben getätigt werden, dann kann es auch keine Dopplter geben.
Wenn du später Doubletten prüfen möchtest, dann lese die Daten in ein Array ein und schmeiß mittels array_unique() alle doppelten raus. Das Ergebnis ist ein neues Array ohne Doppler. Jetzt kannst du die Arrays miteinander vergleichen array_diff() und du erhälst die Unterschiede in ein neues resultat_Array().
Jetzt löschst du alle Datensätze die in result_Array() stehen aus deiner DB.
DELETE ....... FROM ..... WHERE ID IN($resultat_Array) |
| geschrieben von okley am 23.11.2008 - 11:46 |
Wie Klaus bereits antönt sollte es auch meines Erachtens gar nicht erst zu doppelten Einträgen kommen. Was meinst du genau mit doppelter Datensatz? Wenn alle Felder zweier Datensätze genau gleich sind? Oder wenn bereits die Schlüsselfelder zweier Datensätze übereinstimmen?
Wenn du in deiner Datenbank Regeln definierst (Primary, Unique) sollte es doch gar nicht erst zu doppelten Einträgen kommen können... |
| geschrieben von Simon am 23.11.2008 - 12:07 |
Herzlichen Dank für Eure Antworten
Es sollte eigentlich mehr eine theoretische Frage sein, deshalb habe ich es nicht ins MySQL respektive PHP-Forum geschrieben.
Die ganze Anwendung läuft auch nicht auf einer Websprache.
Wir prüfen mitlerweilen die Doubletten auch beim Eintragen. Jedoch kann man die Prüfung nachträglich auch starten. Doubletten werden anhand von Wertigkeiten gesucht. Das heisst, man definiert, wieviel Ähnlichkeiten ein Feld haben muss und wieviel dieses Feld, falls es doppelt vorkommt, prozentual gezählt wird.
Um Felder zu vergleichen bietet das DBMS entsprechende Befehle an. Doch es müssen trotzdem zuerst sämtliche Datensätze ausgelesen werden.
Irgendwie gefällt mir diese Vorstellung nicht und deshalb suche ich Rat, ob es da bessere Möglichkeiten gibt :-)
Ein aktueller Fall ist folgender: Ein Kunde hat eine riesige Datenbank mit Kundendaten. Der Kunde hat nun irgendwo etwa 200'000 Adressen dazugekauft. Diese werden nun eingelesen. Jetzt muss natürlich geprüft werden, welche Adressen bereits ähnlich vorhanden sind. Auf 100% gleichheit kann man nicht gehen. Selbst ich bekomme häufig Briefe doppelt nur weil bei einem "Strasse" ausgeschrieben wurde und beim anderen abgekürzt :-)
Herzlichen Dank |
| geschrieben von Klaush am 23.11.2008 - 16:47 |
| Zitat von: Simon am 23.11.2008 - 12:07 | | |
Jetzt muss natürlich geprüft werden, welche Adressen bereits ähnlich vorhanden sind. Auf 100% gleichheit kann man nicht gehen. Selbst ich bekomme häufig Briefe doppelt nur weil bei einem "Strasse" ausgeschrieben wurde und beim anderen abgekürzt :-)
|
Dann wird es aus meiner Sicht eine "NEVER ENDING DEVELOPMENT". Nach Ähnlichkeiten zu suchen ist noch aufwändiger als auf nur doppelte Einträge suchen zu lassen. Die Frage ist, Wer oder wonach wird bestimmt ob ein Eintrag nun ein Doppelter Eintrag ist oder nicht?
Es gibt sicherlich Algoryhtmen die das zu 90 - 95% beherrschen, doch eine 100% Ausleese ist aus meiner Sicht kaum möglich. Wer sagt denn das es kein "Kaus Hentschel" oder eben einen "Klaus Hentschel" in der Allee 5 oder Allee 6 gibt? ;). Beide könnten real sein, aber weiß das auch dein Algoryhtmus oder KI?
Der riesen Nachteil eines solchen Algoryhtmus der genau danach prüfen soll, braucht eine richtig gute Maschine im Rücken. Die Auswertung in der jeweiligen Programmier - oder Datenbanksprache tut dann das Übrige. |
|