Die Bereitstellung von Testdaten ist für viele Unternehmen ein Dauerproblem. Einerseits brauchen Entwickler und Tester realistische Daten, um Software zuverlässig zu prüfen. Andererseits müssen personenbezogene Informationen zwingend anonymisiert werden – Stichwort DSGVO.

Viele Firmen greifen auf Standardsoftware zurück, die oft teuer ist und in der Praxis an Grenzen stößt: mangelnde Flexibilität, schwierige Integration in bestehende Systeme, hoher Anpassungsaufwand.

Meine Lösung aus der Praxis

In meinem Berufsalltag als Datenbankspezialist habe ich genau diese Herausforderung erlebt. Deshalb habe ich ein Framework in Python entwickelt, das Testdatenmanagement (TDM) einfacher, schneller und flexibler macht.

Die wichtigsten Merkmale:

  • In-Place-Datenverfremdung
    Statt Tabellen zu kopieren, werden die Daten direkt in der Datenbank anonymisiert. Das spart Speicherplatz und Komplexität.

  • Hochperformante Parallelverarbeitung
    Tabellen werden automatisch in handliche Chunks zerlegt. Diese Chunks werden gleichzeitig von allen verfügbaren Prozessoren verarbeitet – inklusive parallelem Zurückschreiben in die Datenbank. Ergebnis: Ein Durchsatz, der sogar Spark- oder Dask-Lösungen schlagen kann.

  • Wiederanlauffähigkeit ohne Aufwand
    Jede Tabelle erhält eine technische ID- und Status-Spalte. Sollte ein Prozess unterbrochen werden, kann er jederzeit automatisch fortgesetzt werden – ohne komplizierte Neustarts.

  • Flexible Anpassbarkeit
    Für jede Tabelle lassen sich Regeln einfach definieren: Namen, Adressen, E-Mails, Telefonnummern oder Geburtsdaten können mit praxisnahen Algorithmen verfremdet oder neu generiert werden.

  • Kompatibel mit gängigen Datenbanken
    Dank SQLAlchemy und Pandas funktioniert die Lösung mit Oracle, PostgreSQL, SQL Server und vielen weiteren Datenbanken – ohne teure Zusatzsoftware.

Der Nutzen für Unternehmen

  • Kürzere Projektlaufzeiten: Testdaten stehen in Stunden zur Verfügung, nicht erst nach Wochen.

  • Kosteneffizienz: Keine hohen Lizenzkosten für starre Tools.

  • Zukunftssicherheit: Neue Tabellen und Formate lassen sich jederzeit anbinden.

  • Rechtssicherheit: DSGVO-konforme Datenverfremdung ist integriert.

Fazit

Das Framework vereint Performance, Flexibilität und Compliance. Es ist ein praxisnaher Ansatz für Unternehmen, die ihre Testdatenbereitstellung modernisieren wollen – ohne sich in teure und starre Lösungen zu verstricken.

Ich freue mich über Austausch mit allen, die in diesem Bereich aktiv sind – und zeige die Lösung gerne in einem Proof-of-Concept.

 

Beispiel

from BaseClasses import AnonymizerClasses as ac
from Shared import vornamen_nachnamen as names
import pandas as pd
import settings
from datetime import datetime

# row function for table fiktive_daten_rows_10000
def row_function_fiktive_daten_rows_10000(zeile):
    vorname = names.verfremden_vorname(zeile['vorname'], zeile['geschlecht'])
    nachname = names.verfremden_nachname(zeile['nachname']) 

    retval = pd.Series({
                      'vorname': vorname,
                      'nachname': nachname,
                      'email': names.verfremden_email(vorname, nachname),
                      # Die Datentypen müssen übereinstimmen!!
                      #'geburtsdatum': names.generieren_date(1950, 2002),
                      'geburtsdatum': datetime.strptime(names.generieren_date(1950, 2002),"%Y-%m-%d").date(),
                      'telefonnummer': names.verfredmen_telefonnummer(zeile['telefonnummer']),
                      'geschlecht' : zeile['geschlecht']
                          })
    return retval

# Objekt zur Verfremdung von Datenbank Tabellen
ac_fiktive_daten_rows_10000 = ac.TDM_RelTable_DataAnonymizer(
    schema_name='tdm_poc',
    table_name='fiktive_daten_rows_10000',
    column_list=['vorname', 'nachname', 'email', 'geburtsdatum', 'telefonnummer', 'geschlecht'],
    engine_url=settings.ora_connectstr,
    row_function=row_function_fiktive_daten_rows_10000,
    UpdateLevel = ac.NoWrite,
    app_name=settings.app_name)

# Infos zur Datenbank und zu den Spalten ausgeben
ac_fiktive_daten_rows_10000.getColumn_Types()

# Vorschau anzeigen
ac_fiktive_daten_rows_10000.table_function([100,119])

Ausgabe im Jupyter Notebook

 

👉 Kontaktieren Sie mich gerne über LinkedIn oder direkt über meine Webseite markus-tischler.com