2010-07-31 7 views
7

Wenn diese Frage Ihnen gemeinsam erscheint, entschuldige ich mich, ich habe eine schnelle Suche auf dieser Website und ein paar Google-Suchen durchgeführt und konnte keine befriedigende Antwort finden.On-Disk-Datenbankspeicher, Best Practices

Meine Frage ist das;

Ich bin erst seit 3-4 Jahren Softwareentwickler. Dies scheint mir eine Zeit zu sein, die lang genug ist, um diese Frage selbst zu beantworten, aber ich musste in meiner ganzen Zeit noch keine Software entwickeln, bei der der Hauptteil des Datenspeichers nicht in einer Online-Datenbank sein muss. Dieses Mal benötigt meine neueste Entwicklung nur, dass ihre Daten nur auf der Festplatte gespeichert werden.

Die eigentlichen Daten selbst sind leicht. In-code wird das Haupt-Asset eine Klasse mit nur wenigen, string-basierten Eigenschaften sein, die beibehalten werden müssen. Meine anfänglichen Gedanken sind auf einfache Serialisierung. Beim Schließen von Anwendungen werden neue Assets einfach serialisiert und als Datei auf der Festplatte gespeichert. Ich auch vielleicht für Backup-Zwecke (oder wenn es irgendwie eine bessere Option für eine serialisierte Klasse ist) eine XML-Datei wäre angemessen.

Ich kann mir keine eindeutigen Nachteile dieser beiden Ansätze vorstellen, es ist diese Tatsache, die mich dazu veranlasst, diese Frage öffentlich zu stellen. Meiner Erfahrung nach gibt es selten eine Lösung für ein Problem, das keine Nachteile hat.

Antwort

3

Serialisierung (Binär oder XML) ist für eine kleine Datenmenge geeignet. Das Problem bei diesem Ansatz besteht darin, dass Sie große Datenmengen erhalten (die Sie möglicherweise abfragen müssen).

Wenn Sie sich auf einer Windows-Plattform befinden und eine richtige Datenbank benötigen, können Sie die eingebettete Datenbank-Engine verwenden, die mit Windows - ESENT geliefert wird. Es ist der Backing Store von Exchange und RavenDB.

Here sind die .NET-Wrapper-Bibliotheken dafür.

ManagedEsent bietet verwalteten Zugriff auf ESENT, die in Windows integrierte, einbettbare Datenbank-Engine. ManagedEsent verwendet die Datei esent.dll, die Teil von Microsoft Windows ist, sodass keine zusätzlichen nicht verwalteten Binärdateien zum Herunterladen und Installieren vorhanden sind.

0

Eine weitere eingebettete Datenbankoption ist Sql Server Compact Edition. Die neueste Version dieser is v4 und es scheint, gegenüber früheren Versionen viel verbessert zu sein.

Es entspricht funktional der Verwendung einer XML-Datei oder einer Access-Datenbank oder sogar einer einfachen alten Textdatei, da kein Sql Server-Dienst ausgeführt oder etwas Spezielles auf dem Rechner Ihrer Anwendung installiert werden muss läuft auf.

1

Die leichteste Lösung ist natürlich die Verwendung von XML und Serialisierung. Der Hauptvorteil davon ist, dass es sehr einfach ist, wenig Code benötigt und leicht mit einem Texteditor bearbeitet werden kann. Der andere Vorteil besteht darin, mehrere Dateien zu haben, und sie werden einfach von PC auf PC übertragen.

Hier ist eine nette tutorial on XML serialization.

Wenn Ihre Anwendung jedoch viel Daten lesen, schreiben und ändern wird und es nur eine Datenquelle gibt, wäre es besser, eine Datenbank mit geringem Gewicht zu verwenden. Viele Leute mögen SQLite, während ich persönlich Firebird bevorzuge.

Siehe hierzu question for using SQLite with C# und see here for information for using Firebird with .net.

0

Ich habe Sqlite in einem Projekt verwendet und es funktioniert sehr gut und es ist einfach zu bedienen, eine Sache, die es bei der Verwendung von Sqlite zu beachten ist, dass es für die Verwendung in einer Einzelbenutzerumgebung entworfen wurde, also wenn Sie verwenden es als Datenbank für das Back-End einer Website zum Beispiel sind Sie wahrscheinlich zu finden sind, dass sie unter der geringsten Last ..

Schauen Sie sich diese Verbindung für den C# Wrapper kämpfen werden: http://sqlite.phxsoftware.com/

Ich benutze auch NHibernate und NHibernate.Linq, um mit den Daten zu interagieren, können Sie einen Build von beiden erhalten, die hier kompatibel sind: http://www.dennisdoomen.net/2009/07/nhibernate-210-ga-with-linq-and-fluent.html

NHibernate.Linq ermöglicht es Ihnen, die schöne Linq Abfragesyntax auf Ihrer SQLite db zu verwenden:

var Onepiece von s in session.Linq =(), wo s.Name == "One Piece" wählen s;