www.mikrocontroller.net

Forum: PC-Programmierung Datenaustausch über Textdateien. Performance?


Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte eine Art Datenserver für mehrere über die serielle 
Schnittstelle angeschlossene Geräte schreiben. Über diesen Datenserver 
sollen verschiedene Werte über einen einmaligen Variablennamen angefragt 
werden können.

Nun überlege ich mir wie ich diesen Datenaustausch am universellsten 
schreiben kann.
Ein Gedanke ist, von diesem Server z.B. sekündlich eine Textdatei zu 
schreiben, die von anderen Anwendungen bei Bedarf ausgelesen werden 
kann.
Am einfachsten würde diese Datei dann so aussehen:
anlage_1_strom=10,2
anlage_2_strom=5,6

Eine Datei würde grob geschätzt sekündlich aktualisert und enthält max. 
1000 Variablen.
Schreiben von Variablenwerten würde ich so lösen, dass eine andere 
Anwendung eine Textdatei mit einem entsprechenden Eintrag erzeugt. Der 
Datenserver prüft ob so eine Datei vorhanden ist, und schreibt dann die 
Werte in die entsprechenden Geräte.

Ist sowas halbegs paraktikabel?
Einmal von der Performance her, und, wie schwierig ist es für andere 
Anwendungen mit Zugriffssperren auf diese Datei (wenn eine neue erzeugt 
wird) umzugehen?

Gruß, Thomas

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde noch weiter gehen und für jede 'Variable' eine eigene Datei 
erzeugen und den Datenbestand dann als Verzeichnisbaum darstellen. Wenns 
performancekritisch wird, könnte man den Baum dann problemlos auf eine 
kleine Ramdisk auslagern. Würde außerdem dein Sperr-Problem aufspalten 
und wesentlich vereinfachen.

Schau dir mal an, wie die /proc- und /sys-Dateisysteme arbeiten, sowas 
in der Art, nur eben mit konventionellen Dateien und als Ramdisk.

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber das Sperrproblem bleibt prinzipiell doch bestehen, auch wenn ich 
mehrere Dateien erstelle.

Mit Linux kenne ich mich jetzt im Detail nicht aus. Ich weiß nur dass 
dort alles mehr oder weniger als Datei gehandelt wird, auch die 
Interprozesskommunikation.

Als erstes wird das Programm aber auf Windows laufen, und da gibt es ja 
nicht direkt sowas wie eine Ramdisk. IPC hieße unter Windows ja DDE, was 
ich aber als sehr aufwändig zu programmieren im Kopf habe.
Außerdem soll es z.B. möglich sein, über eine Webseite mit php/perl etc. 
diese Daten auszulesen und darzustellen. Darum auch meine Idee mit der 
Textdatei (oder XML).

Autor: ? ? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst Du keine MySQL Datenbank anlegen ?

Da kommt man von allen Seiten ran.
(C,PHP)

Autor: ?¿?™ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum willst Du keine MySQL Datenbank anlegen ?

Lächerlich...

Wirklich performant und ausfallsicher kriegt man
das nur mit Oracle RAC hin.

Das hat auch passende Datentypen dafür.

Autor: Condi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Umbgebung nutzt du denn? Mit .net kannst du auch nen einfachen 
Webservice kreieren.

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Condi schrieb:
> Welche Umbgebung nutzt du denn? Mit .net kannst du auch nen einfachen
> Webservice kreieren.

Eigentlich wollte ich das in C++ schreiben, damit man es evtl. auch mit 
kleinen Anpassungen auf Linux portieren kann.
C# finde ich zwar nicht schlecht, habe aber nur die Express-Version, bei 
der die Webservices imho nicht vorhanden sind.

Mit einer Datenbank ist das prinzipiell sicher eine gute Sache. Mich 
stört es aber auch bei anderen Anwendungen wenn da gleich eine 'dicke' 
Datenbank im Hintergrund läuft. Ich werde mir das aber nochmal durch den 
Kopf gehen lassen, evtl. mit einer schlankeren DB à la SQLite.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas W. schrieb:
> Kopf gehen lassen, evtl. mit einer schlankeren DB à la SQLite.
SQLite ist dafür eigentlich optimal, steht ja sogar auf deren Hompage 
das es vorallem als ersatz für Dateibasierte Anwendungen zu gebrauchen 
ist.

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bloß keine Datei/Datenbank. Sowas macht man mit IPC.

Autor: Condi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da es .net auch für Linux gibt sehe ich keine Probleme. Die 
Expressversionen können .net komplett, es fehlen nur einige Tools und 
Intellisense ist etwas eingeschränkt.

Das könnte helfen:

http://wsim.codeplex.com/

oder eines der anderen Projekte. IPC ist etwas unglücklich falls man 
Erweiterungen plant....

Weiterhin ist SQLite semioptimal, siehe Client/Server Applications:

http://www.sqlite.org/whentouse.html

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> oder eines der anderen Projekte. IPC ist etwas unglücklich falls man
> Erweiterungen plant....

Bitte erläutern

Meine IPC Implementationen sind recht gut erweiterbar.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IPC ist ja ein weites Feld; mehr erweiterbar als  CORBA geht kaum.

Autor: Condi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Meine IPC Implementationen sind recht gut erweiterbar.

Man kann alles erweitern, nur der Aufwand ist halt manchmal etwas hoch. 
Ich verstehe hier unter IPC, Pipes und Queues. Man kann das auch im 
Netzwerk verwenden, aber ich finde das suboptimal. Über einen simplen 
Webservice kann man die Daten quasi von jedem System mit fast jeder 
Sprache ohne größeren Streß abfragen.

Allerdings ist mir noch nicht klar wie das Teil funktionieren soll.

Werden Daten von der Schnittstelle gelesen und anderen Programmen zur 
Verfügung gestellt oder die Daten von den Programmen an die 
Schnittstelle ausgegeben oder gar beides?

Wieviele Programme sind gleichzeitig aktiv?

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Condi schrieb:

> Allerdings ist mir noch nicht klar wie das Teil funktionieren soll.
>
> Werden Daten von der Schnittstelle gelesen und anderen Programmen zur
> Verfügung gestellt oder die Daten von den Programmen an die
> Schnittstelle ausgegeben oder gar beides?

Es soll beides möglich sein, aber hauptsächlich lesen.
Es wäre so eine Art einfachster OPC-Server falls dir das was sagt.

Da mittlerweile doch sehr viel im Webbrowser gemacht wird, soll auf die 
Daten schon mit einer der dort gebräuchlichen Sprachen zugrgriffen 
werden können. Und da scheidet OPC oder IPC schonmal aus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.