Die Datenbank unter der Haube

Posted on Feb. 20, 2021

Eigentlich habe ich mich noch nie richtig darum gekümmert, wie Postfix seine internen Daten speichert. Irgendwann wechselte ich vom sogenannten hash auf btree umgestiegen, weil es als performanter beschrieben wurde, aber um Details habe ich mich nicht gekümmert. Aber genau dazu hat mich jetzt ein Update genötigt.

Postfix arbeitet mit einem ganzen Strauß von Looukup-Tables, um seine Arbeit zu verrichten. Vieles könnte man in eine Datenbank verlagern, aber die lokalen Textdateien, mit denen Postfix arbeitet, sind für viele Fälle die beste Lösung. Sie sind simpel und schnell - und natürlich werden auch sie in ein bestimmtes Datenbank-Format konvertiert, damit man schnell auf die Informationen zugreifen kann.

Wer die Wahl hat ….

Postfix beherrscht etliche Datenbankformate, in die das Dienstprogramm postmap die Textdateien übersetzt. Man kann über den Parameter default_database_type in der Konfiguration einstellen, welchen Typ man als Standard verwenden kennen. Und das war bei mir wie beschrieben lange Zeit btree.

Und dann kam das Update

Ich bin schon ziemlich zurückhaltend bei Updates, aber da ich bei Postfix unter OpenSuse noch nie Schwierigkeiten hatte, habe ich ohne große Kontrollen die neue Version installiert - und schon durfte ich mich mit den Datenbank-Internas befassen. Denn schlags wurde das Format btree nicht mehr erkannt - die Unterstützung war aus postfix entfernt worden. Man hat wohl Abschied von der zugrundeliegenden Berkeley DB genommen.

Alles neu

Der neue Favorit heißt LMDB (Lightning Memory-Mapped Database), und das fand ich dann ganz beruhigend. Denn Howard Chu hat das Format entwickelt. Howard ist das Mastermind hinter OpenLdap - dem Verzeichnisdienst der freien Welt. Openldap hat mich zwar schon in den Wahnsinn getrieben, aber noch nie im Stich gelassen, das schafft Vertrauen. Und laut diverser Tests ist es wirklich schnell, das gefällt.

Die zugrundeliegende Bibliothek bietet eine hochperfomante Datenbank, in der Schlüssel-Wert-Paare abgelegt werden, wie eben auch in der Berkeley DB. Auf eine LMDB kann immer nur ein schreibender Zugriff zur gleichen Zeit erfolgen, aber dabei werden lesende Zugriffe nicht blockiert. Zudem können verschiedene Anwendungen zur gleichen Zeit die gleiche LMDB öffnen. Und LMDB muss sich nicht um Transaktions-Logs kümmern, da die Datenintegrität intern sichergestellt wird.

Auch durch das Vermeiden dieser schreibenden Zugriffe ist sie echt schnell. Die Umstellung selbst ist eine Sache von Minuten, man muss eben mit postmap alle Dateien ins neue Format übersetzen, das war es eigentlich. Neustart von Postfix - erledigt.