Datenbank gesucht für Sensorautomatisierung

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Schönen guten Morgen,

    ich hoffe mir kann jemand weiter helfen.
    Ich prüfe gerade die Realisierbarkeit der folgenden für eine automatische Sensormessungen.
    Bei den Messungen sollen bis zu 10 Sensoren (ca. 1 mal die Sekunde über C)gleichzeitig abgefragt und gespeichert werden. Das Geschieht dann ungefähr 10k bis 100k mal(je nach Sensor). Danach möchte ich diese Daten über den Webserver (PHP)ausgeben.

    Mit der Zeit werden ziemlich viele Datensätze anfallen und das muss die Datenbank mit der Performance leisten können.


    Anforderung:
    - gute Performance auf den RPI oder schwächeren Arm Boards
    - Modul für C und PHP
    - kein Mysql, da eine Kommerzielle Verwendung nicht ausgeschlossen wird

    Hat jemand damit Erfahrungen gemacht?

    Edit: Als webserver würde ich gerne NginX weiter nutzen können.

    ein Traum ist unerlässlich wenn man die Zukunft gestalten will

    Einmal editiert, zuletzt von DeFisch (2. Oktober 2014 um 12:46)

  • Hi,
    ich weiss jetzt nicht, inwieweit Dir das weiterhilft, aber ich habe für meinen "kleinen" Bruder eine Datenerfassung für den Stromverbrauch über eine S0 Schnitstelle realisiert.
    Da fallen auch ziemlich viele Daten an.
    Ich habe mysql verwendet ... allerdings auf einem anderen Rechner.
    Hintergrund: das Speichern ist nicht das Problem, aber Auswertungen lassen den RPi schnell in die Knie gehen. So speichere ich die einzelnen Datensätze über eine Netzwerk.Verbindung in der DB und kann auch umfangreiche Berechnungen machen, ohne den RPi zu überfordern.
    Ich finde es prinzipiell nicht verkehrt, die Daten auf einem anderen Rechner zu halten als auf dem, der sozusagen Steuerungs-Aufgaben hat.


    ...
    - kein Mysql, da eine Kommerzielle Verwendung ausgeschlossen wird
    ...


    das verstehe ich jetzt nicht, sorry :s
    cu,
    -ds-


  • das verstehe ich jetzt nicht, sorry :s
    cu,
    -ds-

    :D Das kann ich mir vorstellen. Ich habe mich leider etwas ungenau ausgedrückt. Ich bin derzeit Praktikant bei einen Elektroentwickler und bin der erste der sich mit embedded Linux und Arm Controller auseinander setzt. Da ich mir nicht sicher bin inwiefern das nicht nur im Haus genutzt, sondern vielleicht später verkauft werden soll, sind die Lizenzvereinbarungen von Oracle für MySQL einfach nicht tragbar(http://www.mysql.de/products/). Aus dem Grund suche ich eine Open Source alternative. Einen weiteren Rechner für die Berechnungen werde ich wahrscheinlich nicht erhalten können.

    Das Problem ist das die Entwickler hier meist nur Low Level Erfahrung mit kleineren Microcontrollern haben und dementsprechend recht hohe Erwartungen an das mehr an Taktfrequenz haben. Wenn ich die Software soweit rausgesucht habe, werde ich mich auch daran machen müssen mich in buildroot einzuarbeiten.

    Edit:
    Mit ist gerade eine Idee gekommen. Da nach den Schreibzugriffen, kein update mehr bei den Daten geschehen werden. Wäre es ja eine möglichkeit die Datenbank per C Software auszulesen und die entsprechenden Diagramme als JS File vorauszuberechnen, was der NginX nur noch zum User senden muss. Dafür kann der Pi sich gerne eine halbe Stunde Zeit lassen, das wäre in Ordnung.

    Was sagt Ihr dazu? Dann kann ich eigentlich auch einen Fork von MysQL(MariaDB) nutzen

    ein Traum ist unerlässlich wenn man die Zukunft gestalten will

    Einmal editiert, zuletzt von DeFisch (2. Oktober 2014 um 12:15)

  • Ah ... dann sollte das aber eher "... da eine Kommerzielle Verwendung nicht ausgeschlossen wird" heissen ;)
    Ich würde da dann eher auf was indexsequentielles auf Dateibasis setzen. Sowas wie seinerzeit dBase. Das sollte locker schnell genug sein, die Daten dann noch möglichst auf eine externe HD oder zumindest einen USB-Stick (wegen backup und ggf. Austausch).
    cu,
    -ds-

  • Wozu eine Datenbank ?

    Das ist ein Log, und ueblicherweise werden die in ein Logfile geschrieben.

    Einfach, klein, schnell ...

    - - - -

    Wie viele Daten sollen auf einmal visualisiert werden ?

    Wenn's nicht zu viele sind: ein CGI (in C) liefert die Daten an den Browser, wo ein
    JavaScript die Daten anzeigt. Sehr wenig Last auf dem PI, die Last ist im Browser.

    Die heutigen Browser kriegen recht viele Daten auf eine Graphik ohne gross mit
    der Wimper zu zucken.

  • Entschuldigung für die lange Stille, mich hat es aber leider richtig erwischt gehabt.

    Danke für die vielen Antworten. Ich hatte ja jetzt genug Zeit zu überlegen. Ich werde jetzt je nach Anwendungsfall zwischen Textdateien und Datenbank(MariaDB) entscheiden. Nach jetzt eigenen test Läuft die Datenbank Recht flüssig, so das ich auch mehrere Werte Pro Sekunde speichern und lesen kann.

    Ich weiß 100k Datensätze sind recht viel, aber es sind immer nur gewisse stellen Interessant und die benötigt man dann in einer großen Auflösung, um Grenzfrequenzen zu berechnen und ähnliches.(Ob es die Möglichkeit geben soll nur diese Bereiche zuspeichern, wurde mir leider noch nicht verraten, naja so ist es halt mal.)

    ein Traum ist unerlässlich wenn man die Zukunft gestalten will

  • MariaDB gibt es aber nicht für ARM und müsste wenn dann selber auf dem PI kompiliert werden.


    Ich glaube du solltest Klasse statt Masse beachten.
    Derart viele Sensordaten zu erfassen und auch noch zu speichern wird denk ich die Sensorwerte ansich verfälschen, denn nicht jeder Sensor kann in extrem kurzen Intervallen realistische Werte ausgeben.. Du solltest also lieber den Intervall auf beispielsweise 5 Sekunden hoch setzen. Vorallem aber versteh ich nicht wieso eine derart hohe Auflösung brauchen solltest?

    Auch finde ich es etwas fraglich was du dir dann von einer Textdatei versprichst? Wenn es dir um Performance geht ist eine klassische Textdatei das langsamste.

    Wenn es dir wirklich um Performance geht kommt es aber auch nicht nur darauf an wo du die Datenbank laufen lässt also auf was für einem System (CPU+RAM+HDD), sondern auch wie die Datenbankstruktur aussieht.

    Eine Möglichkeit zur Performancesteigerung wäre beispielsweise auch die Datenbank im RAM (memory) zu erzeugen und somit unabhängig von der Laufwerksgeschwindigkeit zu sein. Nachteil dabei ist nur dass die flüchtig ist, also crasht/rebootet das System sind die Daten weg es sei denn man backuped die regelmäßig (was aber auch kein Problem darstellt). Aber auch das Handling deinerseits mit der Verbindungsherstellung stellt einen Performancefaktor dar: jedes mal Verbindung herstellen und wieder trennen dauert länger als die Verbindung bestehen zu lassen.

    Ich würd also erst mal in der Entwicklungsphase beispielsweise SQLite :memory: verwenden. Selbst große Unternehmen wie Apple nutzen mit dem iPhone SQLite, auch FireFox nutzt SQLite oder der Linux-Paketmanager yum.. usw
    Ein Vergleich "SQLite vs MySQL vs PostgreSQL" findest du >> hier <<


  • MariaDB gibt es aber nicht für ARM und müsste wenn dann selber auf dem PI kompiliert werden.

    Da sagt aber mein Pi etwas anderes ;) Sie ist einfach nur in einen anderen Repository vertreten.

    sysop@pipaos:~$ dpkg --get-selections | grep maria
    libmariadbclient-dev install
    libmariadbclient18 install
    mariadb-client install
    mariadb-client-10.0 install
    mariadb-client-core-10.0 install
    mariadb-common install
    mariadb-server install
    mariadb-server-10.0 install
    mariadb-server-core-10.0 install

    MariaDB läuft auch recht Flott auf den Pi und bietet sich natürlich durch die Kompatibilität mit Mysql an.(Was mein Betreuer als erstes unbedingt nehmen wollte)

    (Das sind jedenfalls die Informationen die ich bis jetzt in einen 5 Minütigen Gespräch bekommen konnte, dann musste die Person weg und ist derzeit in China in unserer Zweigniederlassung und mein Betreuer ist derzeit in Elternzeit. Ich hätte meine Aufgabe auch gerne noch weiter näher beschrieben :-()
    Leider darf ich nicht verraten welche Aufgabe zu erledigen ist, sonnst würdet Ihr wahrscheinlich die Problemstellung besser verstehen.

    Bei der Sicherung der Daten wird natürlich auch ein Buffer eingebaut, womit wahrscheinlich nur aller Sekunde ein Schreibvorgang gestartet werden müsste. Die Daten dachte ich später als csv Datei zuspeichern, um die Kompatibilität zu gängigen Textverarbeitungsprogrammen zur not zu währen.

    ein Traum ist unerlässlich wenn man die Zukunft gestalten will

    Einmal editiert, zuletzt von DeFisch (16. Oktober 2014 um 14:57)

  • Code
    root@RoPi:/tmp# apt-get update >/dev/null 
    root@RoPi:/tmp# apt-cache search mariadb
    root@RoPi:/tmp# dpkg --get-selections | grep maria
    root@RoPi:/tmp#

    Hast du andere Quellen - abgesehen davon das du pipaos und nicht Raspbian nutzt :huh:

    Naja kompatible zu MySQL ist vieles was sich *SQL schimpfen darf.. Und wie gesagt, eine einfache Textdatei zu nehmen widerspricht dem Wunsch nach Performant ;)

    Ich will auch nicht wissen was genau du machst oder entwickeln willst - aber wieso 10 Sensoren jede Sekunde abgefragt werden soll klingt schon ein bisschen seltsam, wobei es sicherlich auf die jeweiligen Sensoren ankommt was für welche das sind, aber "warme" liefern meist andere Werte als "kalte", wenn du verstehst was ich meine :D


  • Ich will auch nicht wissen was genau du machst oder entwickeln willst - aber wieso 10 Sensoren jede Sekunde abgefragt werden soll klingt schon ein bisschen seltsam, wobei es sicherlich auf die jeweiligen Sensoren ankommt was für welche das sind, aber "warme" liefern meist andere Werte als "kalte", wenn du verstehst was ich meine :D

    Arg den Witz verstehe ich leider nicht unbedingt :D Aber mit warm und kalt kommst du schon nahe an meinen Thema ;)

    Hast du andere Quellen - abgesehen davon das du pipaos und nicht Raspbian nutzt Icon_question2

    Ich benutze weiterhin noch http://repository.pi3g.com/

    hinzufügen kannst du sie mit

    Code
    sudo wget -O /etc/apt/sources.list.d/repository.pi3g.com.list http://repository.pi3g.com/sources.list

    danach kannst du dir noch den Puplikkey herunterladen

    Code
    wget -O - http://repository.pi3g.com/pubkey | sudo apt-key add –

    und danach kannst du mit

    Code
    Sudo apt-get install mariadb-server


    die Datenbank installieren.

    ein Traum ist unerlässlich wenn man die Zukunft gestalten will

    Einmal editiert, zuletzt von DeFisch (16. Oktober 2014 um 15:35)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!