• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mysql - serielle Datenerfassung mit bash

openSuse 42.3
mysql Ver 15.1 Distrib 10.0.35-MariaDB, for Linux (x86_64) using readline 5.1
Shell-Progrmmierung #!/bin/bash

Mit
Code:
while read -r line < $Interface; do
lese ich Messwerte von /dev/ttyS0 .

Nach Aufbereitung schreibe ich sie damit
Code:
for (( i=0; i<${#arrDev[@]}; i++ ));
	do
	mysql --host="$HOST" --user="$USER" --password="$PASSWORD" --database="$DATABASE" --batch --execute="insert into messwerte (sensor_id,temperatur) values ('${arrDev[$i]}', '${arrTemp[$i]}');" 2>/dev/null
	done
in die Datenbank. Das läuft im Testbetrieb schon fast ein Jahr und macht, was es soll. Jetzt möchte ich die Anzahl der Sensoren und die Messfrequenz erhöhen. Da jeder einzelne Messwert mittels einer eigenen "Einmalverbindung" in die DB geschrieben wird, befürchte ich, dass das bisherige Vorgehen zu langsam werden könnte.

Hier meine Frage: gibt es eine Möglichkeit, mit einem Shell-Skript die von /dev/ttyS0 gelesenen Daten innerhalb einer dauerhaft bestehenden Verbindung in die DB zu schreiben?

Danke für Tipps.

Gruß,
radiergummi
 

abgdf

Guru
Ein Perl-Skript könnte das, also gleichzeitig eine Verbindung zur Datenbank halten und von anderswo Daten einlesen, sicherlich (wenn auch das zu langsam wäre, müßte man was in C schreiben).
Wenn es unbedingt bash sein muß (was ich nicht empfehlen würde), würde ich versuchen, eingelesene Daten in einer Datei zwischenzuspeichern, in Paketen als Buffer sozusagen.
 

uhelp

Member
Du könntest eine Pipe dafür verwenden, die die Messwerte liest und in SQL- inserts umwandelt und eine weitere Pipe, die das dann zum DB- Server schickt.

Ob das dann taugt, hängt hauptsächlich davon ab, wieviele Messwerte pro Sekunde durchrauschen.
Kommen die schneller, als du sie in SQL Statements umwandeln kannst, hast du Probleme.
 
Oben