Veröffentlicht 12. Oktober 201113 j 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!
12. Oktober 201113 j Oder bietet sich eine Datenbank an? Ja. Ich würde da einfach nen MS SQL Server Express installieren und fertig
12. Oktober 201113 j 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
12. Oktober 201113 j 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
12. Oktober 201113 j Hast Du ausprobiert, ob es mit LINQ to XML schneller geht? Wenn nicht, würd ich auch eine DB nehmen.
12. Oktober 201113 j Autor 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.
12. Oktober 201113 j 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.
12. Oktober 201113 j 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)
12. Oktober 201113 j 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?
12. Oktober 201113 j 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.
12. Oktober 201113 j 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 201113 j von streffin
12. Oktober 201113 j 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 ;-)
13. Oktober 201113 j 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.
13. Oktober 201113 j 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)
13. Oktober 201113 j 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.
17. Oktober 201113 j Autor 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.