Datenzugriff mit mehreren Programmen



  • Hallo,

    ich habe ein Programm(1) das mir Messwerte von der serieller Schnittstelle in eine Datei (Textdatei) schreibt. (1. Messwert 1. Zeile usw)
    Nun habe ich weitere Programme/Scripte(2..x) die Messwerte von der Datei auslesen um Sie weiter zu bearbeiten.
    Hier kommt es natürlich zur Kollision wenn das schreiben(1) mit dem lesen(2..x) zusammentrifft.
    Die Datei sperren usw. ist etwas aufwändig. Ausserdem könnte es passieren das ein Programm überhaupt nicht dran kommt.

    Ich hätte da zwei Ideen.
    1. Eine Datenbank nehmen. Hier können die Felder gleichzeitig beschrieben und gelesen werden.
    Nachteil: Sehr großer Oberhead
    Vorteil: Ich könnte auf Daten per Feldname zugreifen

    2. Ein sogenanntes Serverprogramm starten. Programm(1) schreibt alle Daten an das Serverprogramm. Alle anderen Programme(2..x) holen sich die Daten vom Serverprogramm.
    Problem: Ich muss eine Schnittstelle schaffen von der Skripte/Programme usw. lesen/schreiben können.

    Ich denke ja eine Datenbank wäre das einfachste, aber ich will ja gute Tips von euch hören.
    Es sollte einfach zu lösen und möglichst selbst regulierend sein.

    Danke
    worst_case



  • Pipes oder FiFos? Du kannst ja die Daten auch noch zusätzlich in eine Datei schreiben. Das ist ja nicht das problem.



  • Hallo und Danke für die schnelle Antwort.

    d.h.
    Jedes Programm müsste zum "Schnittstellenprogramm" (Das Messignale liefert) eine pipe aufbauen und Daten abholen.
    => wiederum müsste das Schnittstellenprogramm alle Daten im Programm halten.

    Mein Schnittstellenprogramm liest auch Daten von verschiedenen Adressen (ist ein Netzwerk)
    somit müsste ich unterschiedliche pipes zu den jeweiligen Daten der Adresse aufbauen......puuuuh 🙄 und das noch mit verschiedenen Programmsprachen, wie perl,java,C

    Ist das einfach ? 😉
    Bin für jeden Tip dankbar

    Danke
    worst_case



  • Ich glaub, statt mit Pipes wäre ein FiFo einfacher. Du legst einfach einen an und wenn ein Programm die Daten braucht, dann öffnet es ihn und liest daraus.



  • Dateizugriff ist atomar in Linux.
    Das bedeutet nicht, dass du mit allen Prozessen gleichzeitig in eine Datei schreiben kannst oder sollst.
    Viel einfacher wäre es, eine ".lock" Datei anzulegen, sobald du auf eine Datei zugreifst. Existiert diese Datei schon (von einem anderem Prozess), wartest du solange bis diese ".lock" Datei wieder entfernt wird. Fettich is!

    Den Nachteil wegen Overhead bei einer Datenbank kann ich nicht verstehen, wenn du kein Fullblown DBMS magst, kannst du auch ein Standalone System wie SqlLite oder BerkelyDb verwenden.



  • Hallo,

    ich habe mir mal SQLite angesehen. Laut Beschreibung ist dies kein System für schnell wechselnde Datensätze. Die DB wird beim schreiben komplett gesperrt, nur mir einer besseren Fehlermeldung.Somit habe ich das gleiche Problem wie bei einer einfachen Datei. Wäre aber vielleicht doch gut, denn die DB ist einfach zu bedienen. Ich habe jedoch noch keine Möglichkeit gefunden die Datenbank mit Perl anzusteuern. Ich suche immer noch einen 5 Zeiler mit SQL befehlen.

    BerkelyDb kenn ich nur vom hören sagen. Wer hat hier mehr Ahnung und kann eine Empfehlung oder Tips zwecks SQLite oder BerkelyDb geben.

    Danke
    great_Linux



  • worst_case schrieb:

    Ich habe jedoch noch keine Möglichkeit gefunden die Datenbank mit Perl anzusteuern.

    Wo hast du denn Gesucht? Von Perl.org, auf Application Programming, auf DBI.pm, dann auf DBI Drivers. Und einfach SQLite raussuchen.

    Das hat folgendes Ergebniss:
    http://search.cpan.org/~msergeant/DBD-SQLite-1.11/lib/DBD/SQLite.pm



  • Hallo,

    ich stand auf der Leitung. In meinem Perl-Modul Buch stand sogar etwas dabei.
    Ein klein wenig funktioniert auch schon.
    Bräuchte immer noch Tips bzw. Erfahrungswerte. Ich will mir natürlich nicht unötig Arbeit machen. 😉

    "BerkelyDb kenn ich nur vom hören sagen. Wer hat hier mehr Ahnung und kann eine Empfehlung oder Tips zwecks SQLite oder BerkelyDb geben."

    Danke
    worst_case



  • Hm, ich bin von Berkeley DB nicht sehr begeistert, aber wenn Dich in erster Linie die Performance interessiert, dann schau Dir uU das hier an:
    http://www.sleepycat.com/pdfs/wp_perf_0705c1.pdf
    http://www.sleepycat.com/customers/pdfs/cs_google_1005D.pdf


Anmelden zum Antworten