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


von Thomas W. (thomas_v2)


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

von Sven P. (Gast)


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.

von Thomas W. (thomas_v2)


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).

von ? ? (Gast)


Lesenswert?

Warum willst Du keine MySQL Datenbank anlegen ?

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

von ?¿?™ (Gast)


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.

von Condi (Gast)


Lesenswert?

Welche Umbgebung nutzt du denn? Mit .net kannst du auch nen einfachen 
Webservice kreieren.

von Thomas W. (thomas_v2)


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.

von Läubi .. (laeubi) Benutzerseite


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.

von Feadi F. (feadi)


Lesenswert?

Bloß keine Datei/Datenbank. Sowas macht man mit IPC.

von Condi (Gast)


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

von Feadi F. (feadi)


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.

von Klaus W. (mfgkw)


Lesenswert?

IPC ist ja ein weites Feld; mehr erweiterbar als  CORBA geht kaum.

von Condi (Gast)


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?

von Thomas W. (thomas_v2)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.