hi,
ich brauche vorschläge wie ich folgendes am besten realisieren könnte:
hab eine SQL-Datenbank mit personendaten. jetzt soll auf jeden datensatz eine plausibilitätskontrolle ausgeführt werden. zu überprüfen sind 2 millionen datensätze mit je 4-5 feldern.
dazu habe ich config-files mit einigen regex wie z.b. alle strings die 3 gleiche buchstaben hintereinander haben, oder namen mit zahlen und sonderzeichen usw.. dazu noch eine badwords-datei wo regex drinnen stehn wie
jetzt will ich diese pattern auf die datensätze in der datenbank anwenden. dazu hab ich 3 lösungsansätze die alle ihre schwächen haben:
1. überprüfung auf jedes datensatzes in meinem programm. jeden datensatz einzeln laden. in meinem programm dann alle pattern anwenden und das ergebnis zurückschreiben.
nachteil: mit sicherheit extrem langsam, da jeder datensatz (oder wenn ich sie in blöcken lade alle 100 Datensätze) eine eigene transaction benötigen.
vorteil: keine externen datenfiles nötig zum zwischenspeichern
2. ein batchupdate auf alle datensätze. hierzu könnte ich alle regex in ein einziges update-statement packen. die where-clausel würde dann die regex übernehmen.
nachteil: wahrscheinlich auch extrem langsam aufgrund der sehr komplexen where klausel. datenbank über den gesamten zeitraum ausgelastet und quasi nicht benutzbar durch eventuelle locks die blockieren.
vorteil: rellativ einfach zu implementieren, das aufrufende programm muss nicht einmal zwingend über den ganzen zeitraum mitlaufen. nicht fehleranfällig.
3. export der daten in ein datenfile, z.b. ein csv. das überprüfen übernimmt dann ein eigenes script, dass das csv ausliest und ergebnisse in ein weiteres file liest.
nachteil: fehleranfällig durch externe datenfiles. arbeitsspeicher auf der maschine die das script ausführt wird ziemlich ausgelastet sein, da ziemlich viele datensätze im speicher gehalten werden müssen. läuft asyncron mit der datenbank, d.h. es können wärend der überprüfung änderungen an den datensätzen passieren -> das dürfte aber das kleinste problem sein.
vorteil: entlastung der datenbank. für das zurückspielen der ergebnisse können die PKs verwendet werden was auch ziemlich performant sein dürfte.
ich schätze diese variante ist die schnellste wenn auch fehleranfälligste
was meint ihr?