Mr. Tommes Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Hallo zusammen, ich habe ein kleines Programm geschrieben, dass Daten verwalten kann. Diese Daten habe ich lokal in eine XML-Datei gespeichert, quasi als kleine Datenbank. Mit ReadXML() und WriteXML() habe ich die Daten in ein DataSet geladen bzw. in eine XML-Datei geschrieben. Das ging wunderbar. Mit der Zeit ist das Programm gewachsen und ich sollte die Daten auf einem Server auslagern, so dass mehrere Personen damit abreiten können. Das ging mit ein paar kniffen auch noch. Dummerweise ist die Datei jetzt auf 31 MB gewachsen und enthält etwa 3700 Datensätze. Das Einlesen und Schreiben der XML-Datei dauert mittlerweile jeweils etwa 20 Sekunden. Nun meine Frage: gibt es eine Möglichkeit das zu beschleunigen? Oder bietet sich eine Datenbank an? Wenn ja welche? Reicht eine Access Datenbank? Muss ich dabei etwas besonderes beachten? Vielen Dank im Voraus! Zitieren
Guybrush Threepwood Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Oder bietet sich eine Datenbank an? Ja. Ich würde da einfach nen MS SQL Server Express installieren und fertig Zitieren
Sacaldur Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Oder bietet sich eine Datenbank an? ja, weil [...], so dass mehrere Personen damit abreiten können. Reicht eine Access Datenbank? bedingt, weil [...], so dass mehrere Personen damit abreiten können. Access kann nicht einzelne datensätze sperren, sondern immer nur die gesamte Tabelle deswegen kann es sein, dass du eine andere Datenbank verwenden müsstest grundsätzlich ist es aber egal, welche du verwendest du solltest aber auch kein DBMS wählen, welches dazu gedacht ist, in eine Anwendung integriert zu werden (wie SQLite) jede Instanz des DBMS sperrt die gesamte Datenbank, sodass kein Zugriff mehr von anderen Instanzen deiner Anwendung mehr besteht Zitieren
flashpixx Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Ich kenne mich mit C# nicht aus, aber es gibt z.B. XML-Datenbank So wie Du es schilderst scheinst Du die Daten komplett einzulesen, d.h. einen kompletten DOM Baum des XMLs im Speicher zu halten bzw zu lesen, evtl wäre das Parsen via Simple API for XML schneller Zitieren
Pixie Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Hast Du ausprobiert, ob es mit LINQ to XML schneller geht? Wenn nicht, würd ich auch eine DB nehmen. Zitieren
Mr. Tommes Geschrieben 12. Oktober 2011 Autor Geschrieben 12. Oktober 2011 Nein, habe eine Access Datenbank getestet mit OLEDB. Das war aber noch langsamer. Wollte jetzt mal MS SQL Server 2008 Express auf einem Server installieren und das ausprobieren. Zitieren
lilith2k3 Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 LINQ ist der C# Weg, wenn es um XML-Parsing geht. Stichwort »XDocument«. Allerdings ist es vergeudete Liebesmüh, sowas mit C# Boardmitteln auswerten zu wollen. Eine ordentliche Datenbank mit einem Webservice davor wäre eine architektonisch saubere Lösung. Zitieren
flashpixx Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Eine ordentliche Datenbank mit einem Webservice davor wäre eine architektonisch saubere Lösung. Ein Webservice ist in den meisten Fällen wieder ein Nadelöhr, so dass man sich direkt nativ an die Datenbank hängen sollte (sofern möglich) Zitieren
SilentDemise Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Wenn du es nicht zwingend als verteilte anwendung bauen willst(was bei so einem kleinen Projekt wohl kaum Sinn macht) würde ich das auch direkt an die DB klemmen. Warum die Zeremonie mit nem Webservice? Zitieren
lilith2k3 Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Ein Webservice ist in den meisten Fällen wieder ein Nadelöhr Grundsätzlich ja. so dass man sich direkt nativ an die Datenbank hängen sollte (sofern möglich) Was dadurch nicht unbedingt gerechtfertigt würde. So groß sind die Einbußen nicht. Im Übrigen läßt sich das recht fix umsetzen: Introducing WCF WebHttp Services in .NET 4 - The .NET Endpoint - Site Home - MSDN Blogs HowTo: JSON / AJAX – Webservices mit WCF erstellen | Code-Inside Blog Wenn du es nicht zwingend als verteilte anwendung bauen willst(was bei so einem kleinen Projekt wohl kaum Sinn macht) würde ich das auch direkt an die DB klemmen. Warum die Zeremonie mit nem Webservice? Weil Du a) offen für Erweiterungen bleibst und eine Abstraktionsschicht mehr in Deiner Anwendung hast; was letztendlich Deine Lösung flexibel hält. Zitieren
streffin Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 (bearbeitet) Die Gretchenfrage ist da denke ich WIE man auf die Daten zugreifen möchte. Wenn man über eine Intranet Seite, oder mehrere Tools darauf zugreifen möchte, würd ich definitiv auch einen Webservice aufsetzen, der sich dann auf die Datenbank connectet. Dann hätte man eine einheitliche Schnittstelle, was immer was schönes ist. (Lässt sich aber auch über ne DLL lösen die man sich schreiben könnte für den DB Zugriff, Intranet hier mal ausgeklammert) Wenn ich nur über >eine< Applikation zugreifen möchte, die mehrere User verwenden, würde ich direkt in der Applikation den DB-Zugriff implementieren. Beides ist aber schnell erledigt und nicht sonderlich komplex. Irgendwo im Netz ein XML File ablegen, und mit mehreren Usern drarauf arbeiten, das ist aber... ja wie soll mans sagen, geziehlt selbst ins Knie geschossen kommt denke ich nahe ran. Bearbeitet 12. Oktober 2011 von streffin Zitieren
SilentDemise Geschrieben 12. Oktober 2011 Geschrieben 12. Oktober 2011 Hallo? Ich meine der TE macht aktuell Zugriff auf ein file direkt auf der Platte. Ist die Diskussion gerade nicht etwas abgehoben am Thema vorbei? vom Xml File zum Fully blown Webservice? Ich denke da passen die Dimensionen aktuell nicht ;-) Zitieren
lilith2k3 Geschrieben 13. Oktober 2011 Geschrieben 13. Oktober 2011 Naja, sieh' es mal umgekehrt: 30MB XML-File als Datenbank missbrauchen - da ist "unterdimensioniert" geschmeichelt. Und wie schon erwähnt: So komplex ist ein "fully blown webservice" -was auch immer Du darunter verstehen magst- nun auch wieder nicht. Zitieren
Sacaldur Geschrieben 13. Oktober 2011 Geschrieben 13. Oktober 2011 Hallo? Ich meine der TE macht aktuell Zugriff auf ein file direkt auf der Platte. dann verstehst du wohl unter "Auslagern" etwas anderes als wir würde sie lokal auf der Platte liegen, dann könnte nur 1 Benutzer damit arbeiten es sei denn, sie wurde im Netzwerk freigegeben, wodurch sie wieder für die anderen Benutzern nicht lokal auf der Platte liegt man muss bei einer richtigen Datenbank (die von einem DBMS verwaltet wird) auch bedenken, dass diese grundsätzlich besser in der Speicherplatzverwaltung ist, als eine XML-Datei, da bei einer solchen ein Overhead durch tags und Attribute besteht (und wenn die Datei ordentlich formatiert ist auch durch die Einrückungen) Zitieren
SilentDemise Geschrieben 13. Oktober 2011 Geschrieben 13. Oktober 2011 du reißt mein Zitat aber aus dem Zusammenhang. Ich wollte damit andeuten, wenn er die nötigen Kenntnisse für WCF hätte, würde er die Frage wie oben sicherlich nicht stellen. So dass ich als nächsten Schritt erstmal ein DBMS vorschlage, ohne über einen Web Service zu gehen. Zitieren
Mr. Tommes Geschrieben 17. Oktober 2011 Autor Geschrieben 17. Oktober 2011 Hallo und Danke für die Antworten. Zur kurzen Info: Habe mir jetzt den SQL Server 2008 Express installiert und werde damit ein wenig testen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.