Data virtualization mit Postgres
Posted on So 12 Mai 2024 in Blog
Data virtualization mit Postgres
Inhalt:
- Was ist Data virtualization?
- Data virtualization am Beispiel Postgres
- Herausforderungen von FDWs
- Zusammenfassung
Was ist data virtualization?
Data virtualization bezeichnet einen Prozess, wo es einen direkten Zugriff zwischen den Datenquellen gibt. Beispielsweise greift das Data Warehouse direkt auf die Daten im Data Lake zu. Es wird oft als Alternative zum ETL-Prozess gesehen, wo die Daten aus einem Quellsystem, beispielsweise einem Data Lake, extrahiert werden und dann in das Zielsystem, oftmals ein Data Warehouse, eingespielt werden. Ein weiterer (ähnlicher) Anwendungsfalls ist beispielsweise der Datenfluss aus einem Data Warehouse hin zu einem Data Mart.
Grundsätzlich kann dieser direkte Zugriff dabei helfen, die Komplexität zu reduzieren, da man sich nicht mit einem Extratool für den Datenfluss auseinandersetzen muss und das Wissen über die Nutzung der Datenbank ausreichend ist.
Mit SQL/MED
ist im SQL-Standard definert, wie man auf Daten, die außerhalb der Datenbank gespeichert werden, zugreifen kann.
Im Postgres-Wiki gibt der Beitrag SQL/MED einen kleinen Überblick.
Data virtualization am Beispiel Postgres
Ausgehend vom SQL-Standard bringt Postgres von Haus einiges an Möglichkeiten im Bereich von data virtualization mit.
Es handelt sich hierbei um die sogenannten Foreign Data Wrapper
(FDW).
Dabei handelt es sich um Datenquellen, die zwar außerhab der Datenbank liegen, aber wie normale Tabellen in Postgres eingebunden werden.
Postgres bietet dafür eine Vielzahl an Optionen und Möglichkeiten.
Einen Überblick über die große Menge an Foreign Data Wrapper
bietet die dazugehörige Wiki-Seite: Foreign data wrappers.
Wenn man Zugriff auf eine bestimmte Datenquelle sucht, dann kann die Wiki-Seite ein Ausgangspunkt sein, aber eine Suche lohnt sich auch abseits, da ich nicht einschätzen kann, wie vollständig und aktuell die Liste ist.
Die meisten großen Datenbank-Systeme sind mit (zumindest) einem FDW vertreten.
Neben Extensions zeigen FDWs die großen Möglichkeiten zur Erweiterung von Postgres.
So gibt es mit Multicorn bzw. Multicorn2 seit Jahren eine eigene Extension, die die Entwicklung von FDWs erleichtert.
Dazu hat Supabase
mit wrappers ein "development framework for Postgres Foreign Data Wrappers (FDW), written in Rust" entwickelt.
Aber nicht nur FDWs sind Teil der data virtualization Möglichkeiten in Postgres. Unbedingt erwähnt sollte da auch die PostgreSQL HTTP Client-Extension von Paul Ramsey werden. Damit können beispielsweise Daten von REST-APIs sehr einfach eingelesen werden.
Bei jeder Postgres-Installation standardmäßig vorhanden ist der postgres_fdw
.
Hierbei handelt es sich einerseits um einen FDW für die Kommunikation von Postgres-Datenbank zu Postgres-Datenbank
und andrerseits wahrscheinlich um den FDW mit ber besten Unterstützung hinsichtlich des Query-Planners.
Generell gibt es meist mit jedem Major-Release auch Verbesserungen bei postgres_fdw
.
Grundsätzlich würde es sich wohl nicht um Postgres handeln, wenn es nicht auch ein Projekt geben würde, das sich ausgiebig mit data virtualization auseinandersetzen würde. Dabei handelt es sich um das Projekt pgspider, dass sich selbst als "High-Performance SQL Cluster Engine for distributed big data" beschreibt.
Herausforderungen von FDWs
So viele Möglichkeiten FDWs auch bieten, es gilt natürlich auch einige Dinge im Hinterkopf zu behalten. Es kann beispielsweise passieren, dass sich die Tabellendefinition der zugrundeliegenden Tabelle ändert. Hier müsste man dann die Definition der Fremdtabelle ebenfalls nachziehen, um ohne Probleme weiterhin darauf zugreifen zu können.
Zusätzlich handelt es sich bei den Fremdtabellen auch ein wenig um Blackboxes für den Query-Planner, d.h. es fehlen hier Informationen, wie sie bei regulären Tabellen vorhanden sind.
In Woche 12 habe ich auf einen Beitrag, der sich mit den Anpassungen der Kosten für postgres_fdw
beschäftigt.
Durch die fehlenden Informationen zu den Fremdtabellen kann es auch zu falschen Annahmen des Query-Planners führen und
es dadurch kann zu langsamen Abfragen kommen.
Wobei dir Performance nicht nur durch fehlende Informationen für den Query-Planner beeinflusst werden kann, sondern beispielsweise auch durch die Netzwerkverbindung zwischen Postgres-Datenbank und Datenquelle.
Da es gerade beim postgres_fdw
immer zu Weiterentwicklungen kommt, kann sich die Performance von einer zur anderen Postgres-Version durchaus unterscheiden.
Zusammenfassung
Data virtualization im Zusammenspiel mit Postgres bietet eine Vielzahl an Möglichkeiten.
Es ermöglicht (relativ) problemlos fremde Datenquellen in Postgres einzubinden.
Dafür wird die Flexibilität von Postgres mit Foreign Data Wrappern
und Extensions
genutzt.
Aber es gibt auch Nachteile bzw. Herausforderungen, die nicht außer Acht gelassen werden sollten, wie mögliche Performanceprobleme und Änderungen der Tabellendefinitionen der externen Datenquellen.