Führen Sie PostgreSQL nur im Arbeitsspeicher aus

Bilal Shahid 20 Juni 2023
  1. Einführung in die In-Memory-Datenbank
  2. PostgreSQL-Unterstützung mit einer Datenbank im Speicher oder nicht
Führen Sie PostgreSQL nur im Arbeitsspeicher aus

Die von uns erstellten Datenbanken werden auf dem permanenten Speicher der Festplatte oder SSD (Solid State Drive) gespeichert.

Dieser Speicher ist jedoch langsamer als RAM (Random Access Memory). Daher erstellen und verwenden wir manchmal eine Datenbank im RAM namens Speicher, um sie effizienter und schneller zu machen.

Dieser Artikel beschreibt, wie wir eine Datenbank im Arbeitsspeicher in PostgreSQL verwenden können. Lassen Sie uns jedoch zunächst untersuchen, was mit dem Ausführen einer Datenbank im Speicher gemeint ist und wie andere Plattformen dies zulassen.

Einführung in die In-Memory-Datenbank

Eine In-Memory-Datenbank (IMDB) ist eine Datenbank, die im RAM oder Hauptspeicher des Computers statt auf dem Festplattenlaufwerk gespeichert und ausgeführt wird. Dies geschieht, um eine effizientere und schnellere Leistung zu erzielen, da das Abrufen von Daten aus dem Hauptspeicher weniger Anweisungen in der CPU erfordert.

Daher werden solche Datenbanken hauptsächlich in Echtzeitsystemen und Spieleanwendungen verwendet, da diese eine schnelle Antwortzeit erfordern.

Diese Geschwindigkeit ist garantiert, da keine Übersetzung oder Verschlüsselung der Daten erforderlich ist. Auf diese Weise werden Daten in einer Form bereitgehalten, die direkt verwendet werden kann, was zu einer schnelleren Reaktionszeit führt.

Ein Nachteil der Verwendung einer Datenbank im Arbeitsspeicher besteht darin, dass RAM flüchtig ist. Da RAM keine dauerhafte Speicherlösung ist, gehen die Daten auch verloren, wenn die Stromversorgung unterbrochen wird oder die Datenbank oder der Server abstürzt.

Um dieser Volatilität von In-Memory-Datenbanken entgegenzuwirken, werden jedoch Technologien wie Flash-Speicher und nichtflüchtiger Arbeitsspeicher (NVRAM) eingesetzt. Darüber hinaus unterstützen viele SQL-Plattformen In-Memory-Datenbanken.

Beispielsweise unterstützt SQL Server das Ausführen einer Datenbank im Arbeitsspeicher, da es über In-Memory OLTP verfügt. Im SQL Server können Sie eine Tabelle im Speicher speichern, indem Sie sie mit WITH (MEMORY_OPTIMIZED = ON) oder ähnlichen Befehlen erstellen.

Aber der bemerkenswerte Punkt ist, können Sie es in PostgreSQL tun? Dieser Artikel enthält die Antwort auf diese Frage.

PostgreSQL-Unterstützung mit einer Datenbank im Speicher oder nicht

Leider unterstützt PostgreSQL nicht die Verwendung einer Datenbank oder einer ihrer Komponenten im Arbeitsspeicher. Der Hauptgrund ist, dass PostgreSQL in C, einer kompilierten Sprache, implementiert ist.

Das Ausführen einer Datenbank im Speicher ist jedoch eine vorteilhafte Eigenschaft, die hauptsächlich beim Komponententest verwendet wird, um die Ergebnisse zu beschleunigen. Wie also machen Entwickler das in PostgreSQL, wenn es keine In-Memory-Datenbankunterstützung gibt?

Wir werden uns in diesem Artikel einige Alternativen ansehen. Eine Möglichkeit, dies zu tun, besteht darin, Tablespaces zu erstellen. Schauen wir uns an, was diese sind und ob sie eine gute Alternative sind oder nicht.

Verwenden Sie TABLESPACE in PostgreSQL

Ein tablespace in PostgreSQL ist ein Datenbankobjekt, dessen Speicherort vom Datenbankadministrator während der Erstellung definiert werden kann. Der tablespace hilft dabei, Speicherorte entsprechend den Effizienzanforderungen der Daten zuzuweisen.

Zum Beispiel können wir tablespace verwenden, um Tabellen, auf die häufig zugegriffen wird, in schnellerem Speicher wie SSD und weniger benötigte Daten in langsamerem Speicher wie Festplatten zu speichern.

In ähnlicher Weise können wir tablespace verwenden, um einige Daten im RAM zu speichern, was uns den gleichen Effekt wie die Verwendung einer Datenbank im Speicher ermöglicht. Die Syntax zum Erstellen von Tablespaces lautet wie folgt:

CREATE TABLESPACE tablespace_name LOCATION '/ssd/postgresql/data';

Nach dem Schlüsselwort LOCATION fügen wir den symbolischen Link der Adresse hinzu, an der wir den tablespace erstellen wollen. Die Verwendung von tablespaces im Speicher in PostgreSQL wird jedoch nicht empfohlen. Es wird sogar als Warnung in der offiziellen PostgreSQL-Dokumentation hinzugefügt.

Aufgrund der Volatilität des Arbeitsspeichers werden alle Daten im Datenbank-Cluster unlesbar, wenn Sie Ihren Tablespace aufgrund von Systemabstürzen oder versehentlichem Löschen verlieren. Daher ist die Verwendung eines tablespace im Speicher keine gute Praxis.

Also, welche Optionen lässt es für uns? Sehen wir uns zunächst eine andere Alternative an, die wir in Betracht ziehen können: Erstellen einer Wegwerf-PostgreSQL-Instanz für schnellere Antwortzeiten.

Erstellen Sie eine Throwaway-PostgreSQL-Instanz

Um diese Methode zu verstehen, betrachten wir das Beispiel des Komponententests.

Das Testen einer Datenbank erfordert eine schnelle und effiziente Leistungsgeschwindigkeit. Eine Möglichkeit, dies in PostgreSQL zu tun, besteht darin, eine wegwerfbare PostgreSQL-Instanz zu erstellen, die nach der Verwendung gelöscht wird.

Diese Methode erfordert die Verwendung des Befehls initdb, um einen neuen Datenbankcluster in PostgreSQL zu erstellen. Ein Datenbank-Cluster ist eine Gruppe von Datenbanken, die auf demselben Server ausgeführt werden.

Die Syntax des initdb-Befehls lautet wie folgt:

initdb [option...] [ --pgdata | -D ] directory

Ein Beispiel dafür, wie wir diesen Befehl verwenden können, ist das Erstellen eines neuen Datenbankclusters, wie in der folgenden Abfrage gezeigt:

initdb --auth=trust --username=postgres -D /path/to/temp/datadir

Dieser Befehl hilft beim Erstellen eines temporären Speicherdatenbankclusters. Darüber hinaus gewährt es der Standarddatenbank postgres Vertrauen.

Jetzt müssen Sie sich mit dem Datenbankcluster verbinden, der als der in der obigen Abfrage angegebene Benutzer postgres erstellt wurde. Danach ist es Zeit für Sie, Erstellungsbefehle wie CREATE USER oder CREATE DATABASE auszuführen und dann Ihren Code an die Unit-Tests zu übergeben.

Nach Abschluss der Tests stoppen Sie mit dem Befehl pg_ctl den Server und löschen das Datenverzeichnis datadir. Dieser Prozess ermöglicht schnellere Reaktionszeiten beim Testen, ähnlich wie beim Ausführen einer Datenbank im Arbeitsspeicher.

Daher können wir den Schluss ziehen, dass PostgreSQL im Gegensatz zu SQL Server oder MySQL die Verwendung einer Datenbank im Speicher nicht unterstützt.

Wir können einen In-Memory-tablespace erstellen, indem wir seinen Speicherort im RAM angeben, aber das wird nicht empfohlen, da es zu schwerwiegenden Datenverlusten führen kann, deren Rückgängigmachung viel Aufwand erfordern kann.

Um die Antwortzeit in PostgreSQL zu Testzwecken zu beschleunigen, erstellen wir möglicherweise eine Wegwerf-PostgreSQL-Instanz und konfigurieren sie entsprechend. Wir hoffen, wir konnten diese Konzepte für Sie verdeutlichen. Lerne weiter!

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub