
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
- Details
- Geschrieben von Markus Tischler
- Kategorie: Uncategorised
- Zugriffe: 987
Wie komme ich einfach an Testdaten, die der DSGVO (Datenschutz-Grundverordnung) gerecht werden. Es gibt einige kommerzielle Hersteller, aber der Aufwand für das Setup und die Lizenzkosten können erheblich sein. Es wird in der Regel bei der Anforderung zwischen zwei Methoden unterschieden:
- Generierung von synthetischen Testdaten (speziell für jeden Testfall)
- Verfremdung der PROD-Daten im vollen Umfang
Die Generierung von synthetischen Testdaten kann sehr aufwendig sein, speziell wenn die Generierung über mehrere Systeme erfolgen muss.
Die Verfremdung von PROD-Daten kann auch sehr aufwendig werden, da es sich eventuell um große Datenmengen handelt. Bei verteilten Systemen muss die Verfremdung auf alle Systeme angewendet werden.
Es gibt sehr viele Open-Source Möglichkeiten um das Thema kostengünstig und performant abzuarbeiten. Auf den ersten Blick ist die performanteste Möglichkeit die Bearbeitung der Daten in der Datenbank z.B. bei Oracle durch PL/SQL, bei Postgresql durch PL/pgSQL.
Jedoch gibt es in den meisten Unternehmen einen Zoo an Datenquellen, Multi-Vendor-Datenbanklandschaften, XML Dateien, JSON Dateien, Text Dateien…
In den letzten Tagen habe ich mich mit Python zum Generieren von Daten beschäftigt.
Ich muss sagen es ist schon wirklich easy mit Python, es gibt viele Open-Source Projekte und Module, die einen das Leben erleichtern. Für meinen Test habe ich Visual Studio Code mit der Copilot Extension verwendet.
In wenigen Stunden konnte ich 10.000.000 Datensätze mit Fake Personen-Daten erstellen.
Die Skripte zur Erstellung findet ihr in Github (MarkusTischler/testdaten).
Eine Version, welche die Daten in einer Oracle Datenbank speichert (Hier wäre natürlich der SQL*Loder mit Direct Path die schneller Variante)
Eine Version, welche die Daten in einer PostgreSQL Datenbank speichert.
Für die Erzeugung der Fake-Daten wurde Faker verwendet (Welcome to Faker’s documentation! — Faker 37.1.0 documentation)
Die Faker Daten wurden in einem Pandas (pandas - Python Data Analysis Library) Dataframe gespeichert, damit können super Daten manipuliert werden, über Pandas wurden die Daten direkt in die Datenbank geschrieben.
Warum habe ich Pandas genutzt?
Ganz einfach, in ein Pandas Dataframe kann ich beliebige Daten laden und manipulieren!
Es ist im Vergleich zu Datenbank-Transaktionen sehr schnell!
Benötigt jedoch sehr viel Platz im RAM 15GB CSV belegen 60GB RAM.
Mit Python gibt es unbegrenzte Möglichkeiten ob nun Funktionen komplett nach Anforderung entwickelt werden müssen oder fertige Module wie Faker oder Microsoft Persidio zum Einsatz kommen.
Du kannst Python lokal auf dem Laptop ausführen, oder auf dem Datenbankserver für guten Datendurchsatz oder in der Cloud z.B. mit Databricks mit höchster Skalierung.
VS Code mit Copilot Extension:
- Details
- Geschrieben von Markus Tischler
- Kategorie: Uncategorised
- Zugriffe: 2998