Eine richtige Bewerbung umfasst neben einem Lebenslauf verschiedene Anhänge. Eingescannte Zeugnisse und sonstige Nachweise. Im Schnitt kommt eine typische Bewerbung auf 5MB. Bereits bei 1000 Bewerbungen hat man ein Datenvolumen von 5GB. Das passt noch auf einen USB Stick. Aber wenn man so etwas wie eine Bewerberdatenbank aufbauen will, wird das Volumen schnell zu einem Problem.
Die typische Vorgehensweise für den Aufbau einer Bewerberdatenbank ist erst einmal die Auswahl einer Datenbank. Hier fällt die Entscheidung schnell auf ein bewährtes System wie MySQL oder Postgress. Bei einem entsprechenden Budget auch auf Oracle. Alle genannten Datenbanken sind relational. Hier liegt der Fokus auf Normalisierung und Konsistenz. Attachments werden in relationalen Datenbanken in einer Tabelle in Form eines BLOBs gespeichert. Das führt bei bei großen Attachments zu großen Datenbank-Tabellen. Und das wiederum zu einem Zeitproblem beim Erstellen eines Backups, bzw. beim Wiederherstellen einer solchen Tabelle.
Der Fokus relationaler Datenbanken auf Konsistenz eröffnet ein Zeitproblem beim Wiederherstellen einer großen Tabelle. Jedenfalls bei gleichzeitiger Anforderung an ständiger Erreichbarkeit. Denn während einer Wiederherstellung sind Schreibzugriffe blockiert. Praktisch bedeutet es, dass während einer Wiederherstellung die Annahme von neuen Bewerbungen blockiert ist.
Dem Problem von großen Tabellen wird häufig durch das Auslagern von Anhängen aus der Datenbank in das lokale Filesystem entgegengewirkt. Praktisch hintergeht man dadurch die Anforderung relationaler Datenbank an die Konsistenz. Das funktioniert also wenn man niedriege Anforderungen an gleichzeitige Suchanfragen an die Bewerberdatenbank hat. Aber bei Bewerberdatenbanken mit 100.000+ Datensätzen steigt diese Anforderung. Was macht man also?
Was machen denn die anderen? Wie könnte es Google oder Facebook mit seinen großen Datenbanken machen. Einen schichten täglichen Dump können wir ausschließen. Das klappt nicht.
Die Anforderung an Datenbanken hat sich geändert. Für das Speichern von Bewerbungen sind dokumentbasierte Datenbanken bessert geeignet. Bei diesen Datenbanken liegt der Fokus auf Skalierbarkeit. Deshalb haben wir mongo als default Storage unseres Bewerbermanagent Systems gewählt.
Was genau das bedeutet erkläre ich im nächsten Beitrag.
Tags: Bewerbermanagement