Aus Raspberry Pi Geek 06/2022

Datenbankinhalte effizient auslesen

© Anna Grigorjeva / 123RF.com

Gehäusedeckel aufschrauben

Frank Hofmann und Gerold Rupprecht

PostgreSQL unterstützt ausgeklügelte Funktionen. In Kombination mit einer cleveren Tabellenstruktur gestalten Sie den Zugriff auf erfasste Daten hocheffizient.

Ausgangspunkt für diesen Beitrag ist ein Raspberry Pi ab Version 2, der als Hardware für eine einzelne Messstation für Wetter- und Umweltdaten fungiert. Michael Bilger hat dazu bereits mehrere Beiträge [1] auf seinem Blog [2] veröffentlicht, die als Anregung zur technischen Umsetzung dienen können. Der Autor experimentiert dabei mit verschiedenen Sensoren sowie mit Python-Skripten, um die erfassten Daten auszulesen und anschließend anzuzeigen. Bei Bedarf ließe sich das Ganze mit einem Feinstaubsensor [3] erweitern, wie Sie ihn etwa vom Projekt Luftdaten.info [4] aus Stuttgart beziehen können.

Wir gehen hier aber nicht auf die Hardware und deren Zusammenbau samt Software-Stack ein, sondern betrachten ausschließlich den Anteil für das Datenbankmanagementsystem (DBMS). Das ermöglicht es, mithilfe einzelner Sensoren die empfangenen Daten wie Temperatur, Luftfeuchtigkeit und Staubpartikel zu speichern und danach wieder effektiv auszulesen. Um den Themenbereich Datenbanken zu verstehen, hilft es, sich mit den Grundbegriffen vertraut zu machen (siehe Tabelle “Begriffe”).

DB

Datenbank (engl. Database)

DBS

Datenbanksystem (engl. Database System)

DBMS

Datenbankmanagementsystem (engl. Database Management System)

Tabelle

Datenstruktur innerhalb einer Datenbank

Datenbankabfrage (Query)

Abfrage nach Daten aus einer oder mehreren Tabellen

Resultat

Antwort auf eine Abfrage (Query)

Index

Verknüpfung zwischen Tabellen, die die Suche und das Sortieren nach bestimmten Feldern beschleunigt

Join

Verbinden von Ergebnissen von Abfragen

View

Spezialisierte Sicht auf Tabellen

Trigger

Reaktion auf ein Ereignis im DBMS (Einfügen, Ändern oder Löschen), Ausführen einer Funktion

Stored Procedures

Im DBMS gespeicherte Abfrage

ETL Abkürzung Extraction, Transform, Load (extrahieren, umwandeln, laden)

Knackpunkt ist dabei die geschickte Lastverteilung zwischen der Software auf der Messstation und dem DBMS. Neben der Frage, welches DBMS für den konkreten Anwendungsfall das richtige ist, steht die nach der Tabellenanzahl und -struktur an, sprich: nach der Anzahl der Spalten, deren Anordnung in der Datenbank, dem pro Spalte verwendeten Datentyp und der Verknüpfung der Tabellen untereinander (Indexe).

Die Qualität der Datenbankabfrage (Query) basiert auf der zuvor festgelegten Tabellenstruktur und bestimmt die Antwortzeit und Datenmenge des DBMS und somit die gesamte Performance der Softwarelösung. Im Beispiel kam das DBMS PostgreSQL [5] zum Einsatz. Dazu schrauben wir dessen virtuellen Gehäusedeckel ab und bewegen uns in die Interna von PostgreSQL. Wie Sie sehen werden, sind die Möglichkeiten umfassender als zunächst vielleicht gedacht.

Grundlegende Struktur

Ausschlaggebend für die Performance einer Softwarelösung ist deren Aufbau und Struktur sowie die Art und Weise der Kommunikation mit dem DBMS. Etabliert hat sich das Client-Server-Modell, in dem das DBMS als Server fungiert und die Anwendung als Client, der die Daten an den Server übermittelt oder von dort liest.

Ob Sie als Bedienschnittstelle (Interface) die Kommandozeile oder eine GUI wie PhpMyAdmin [6] oder PgAdmin [7] verwenden, ist insofern relevant, als jede grafische Anwendungsschicht – selbst wenn sie das Bedienen vereinfacht – weitere Zeit kostet und Sie somit das Resultat auf ihre Anfrage später erhalten.

Zu klären ist, welche Funktionalität Sie auf das DBMS abwälzen. Das birgt die Fragen: Was will ich an Daten auslesen? Wie sollen die Daten im Ergebnis angeordnet sein, und was möchte ich mit den erhaltenen Daten tun?

Bei einer einfachen Anfrage brauchen Sie wenig Gehirnschmalz, und das DBMS hat wenig Arbeit damit. In der Regel liefert es dabei aber als Resultat sehr viele Daten an den Client, die Sie dann wieder auseinanderdividieren müssen. Große Datenmengen zwischen dem DBMS und ihrer Softwareanwendung schieben also die Hauptlast auf Letztere und die (Netzwerk-)Verbindung zwischen beiden.

Komplexere Anfragen erfordern zunächst mehr Nachdenken, kitzeln aber mehr Leistung aus dem DBMS heraus und liefern spezialisierte Ergebnisse (Daten). Daraus resultieren geringere Datenmengen zwischen dem DBMS und der Anwendung sowie eine insgesamt ausgeglichenere Lastverteilung zwischen beiden Komponenten.

PostgreSQL ist für komplexe Anfragen ausgelegt und bedient diese mithilfe von eingebauten Funktionen, Indexes, Joins, Subqueries, Triggern, Views sowie Stored Procedures. Damit übernimmt es bei Bedarf einen Großteil der Last und Komplexität ihrer Softwarelösung.

Listing 1 zeigt zwei Anfragen in der Structured Query Language (SQL), die vorwiegend von relationalen DBMS genutzt wird. SQL passt jedoch nicht für alle Anwendungsfälle. Für Graph-Datenbanken existiert eine eigene Anfragesprache namens GraphQL [8], die auf der Struktur von JSON basiert.

Im Beispiel aus Listing 1 sehen Sie oben eine allgemeine Anfrage nach allen Inhalten aus der Tabelle sensorData, darunter eine sehr spezialisierte Anfrage nach den beiden Spalten timestamp und temperature aus der Tabelle sensorData, wobei timestamp den Wert 2022-02-01:*12:30:00 besitzen muss. Somit liefert das DBMS nur die beiden Spalten der Datensätze für den angegebenen Zeitpunkt zurück, die exakt dieser Bedingung entsprechen.

Listing 1

SQL-Abfragen

SELECT * FROM sensorData;
SELECT timestamp,temperature FROM sensorData WHERE timestamp = '2022-02-01 12:30:00';
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben