Laden...

Gleichzeitigen Zugriff auf XML Datei gewährleisten

Erstellt von kerstel vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.094 Views
K
kerstel Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren
Gleichzeitigen Zugriff auf XML Datei gewährleisten

Hallo zusammen,

ich habe zwei Fragen zum Umgang mit einer XML Datei.

  1. In der XML Datei sind Informationen zu Artikeln gespeichert und mehrere Prozesse (die allerdings die gleiche Bibliothek verwenden) greifen auf diese Datei zu. Wie kann ich das machen, dass ich bei zeitgleichen Zugriffe keine Konflikte bekomme. Also die Datei für parallele Zugriffe "freigeben"?
  2. Wie ist so die Erfahrung was Datenmengem in Form von Dateigröße und Datensätze, mit XML angeht? Was gibt es für alternativen?

Liebe Grüße
Kerstel

J
251 Beiträge seit 2012
vor 7 Jahren

Ehrlich? Ich würde mir überlegen, ob XML wirklich das ist was man einsetzten möchte als DB.

Wenn ich mir deine erste Frage ansehe, kommt es mir so vor, dass du schon auf ein größeres Problem gestoßen bist.
Da kommt wenn überhaupt ein eigenartiges Copy/Paste-Struktur bei mir in Sinn auf die schnelle (was ich schon wegen Trashigkeit verworfen habe).

[edit]Okay eine halber Gedanke kam noch verzögert nach.
Ich würde eher dann empfehlen bei einer xml-Datei, dass nicht mehrere Module darauf zugreifen. Sondern ein zentrales Modul, welches von den mehrer Module angesteuert werden kann [/edit]

K
kerstel Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Hi,

ja ich habe das Problem das zwei Prozesse parallel zugreifen und einer dann halt nicht kann. Was schlägst Du als Alternative vor?

Lieben Gruß
Kerstel

1.029 Beiträge seit 2010
vor 7 Jahren

Hi,

ich glaub bei den Anforderungen würde ich spontan 2 Möglichkeiten sehen:

a) Du machst es dir einfach und verlangst eine richtige, lokale Datenbank (z.B. SqlExpress)
b) Du schreibst dir einen Service, der als einziger Zugriff auf die XML-Files hat - und die beiden Prozesse, die die Daten benötigen sprechen ab dann nur noch mit diesem Service
Das lässt sich z.B. über WCF leicht lösen. (Zum googlen: "wcf ipc" - ipc steht für InterProcessCommuniation)

KG

K
kerstel Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Hi,

danke für die Antwort. Ich kann ja nicht davon ausgehen, dass eine DB auf dem System installiert ist. Also ist das mit dem wcf die eleganteste Lösung, oder?

LG
Kerstel

1.029 Beiträge seit 2010
vor 7 Jahren

Hi,

nun - wenn du keine solchen Anforderungen stellen willst gibt es auch durchaus die Möglichkeit andere Datenbanken einzusetzen, die keine direkte Installation erfordern.

Somit steht z.B. der SQL Compact (Sql CE) zur Debatte (ziemlich easy im handling und für übersichtliche Datenmengen (wovon ich ausgehe) durchaus eine nette Sache)

Je nach Anforderungen kannst du auch eine NoSQL-Datenbank wie z.B. http://www.litedb.org/ in Betracht ziehen. (Wenn deine Daten bislang in XML gepspeichert werden sollte das sogar super leicht umzusetzen sein)

Wenn du weitere finden möchtest: Du hättest gerne eine "embedded" Datenbank 😉

LG

PS: WCF und Datenbank darf man übrigens gerne gemeinsam betrachten - wenn du dir einen solchen WCF-Service schreibst hast du z.B. die Möglichkeit zu sagen:
Ok - vorerst behalte ich XML bei - und bau dafür den WCF-Service - und wenn mir XML später nicht mehr reicht - dann kannst du einfach an dieser zentralen Stelle eine neue Implementierung bauen, die z.B. dann eben SqlCE oder LiteDb etc. pp. nutzt.

Würde somit empfehlen: Bau den WCF-Service - und je nach Notwendigkeit und Anforderung und Aufwand baust du noch Anbindungen für richtige Datenbanken.
Und noch was: Mach's so, dass ein Austausch wirklich durch eine reine Umstellung des WCF-Services möglich ist!

16.842 Beiträge seit 2008
vor 7 Jahren

Es gibt viele Wege, die nach Rom führen.
Die Variante mit einer lokalen Datenbank ist aber definitiv die einfachere in solch einem kleinen Szenario.

Geht das nicht, dann musst Du eine Service-Architektur umsetzen.
In Zeiten von REST und OData bin ich kein großer Freund mehr von WCF; aber auch hier: viele Wege führen nach Rom.

Du musst das jetzt für Dich evaluieren, ob WCF geeignet ist oder doch eher eine REST API, die diese Service-Funktion in Deiner Infrastruktur bzw. Architektur zur Verfügung stellt.

LiteDB ist Process Safe, andere Embedded Databases wie SQlite sind dies nicht bzw. nur mit aktivem Write Ahead Logging, was per default deaktiviert ist.