Eingebettete nicht-relationale (nosql) - Daten speichern
Ich bin denken über die Verwendung/Umsetzung von irgendeine Art von eine embedded-Schlüssel-Wert (oder ein Dokument) speichern für meinen Windows-desktop-Anwendung. Ich möchte in der Lage sein zu speichern verschiedene Arten von Daten (GPS-tracks wäre ein Beispiel) und natürlich können diese Daten Abfragen. Die Menge der Daten wäre eine solche, es könne nicht alle werden in den Speicher geladen, gleichzeitig.
Ich bin denken über die Verwendung von sqlite als storage-engine für key-value-store, so etwas wie y-serial, aber geschrieben .NET. Ich habe auch schon gelesen FriendFeed ist die Verwendung von MySQL zum speichern von schema-weniger Daten, das ist ein guter Zeiger auf, wie Sie mit RDBMS für nicht-relationalen Daten. sqlite scheint eine gute option wegen seiner Einfachheit, Portabilität und Bibliothek Größe.
Meine Frage ist, ob es irgendwelche anderen Optionen für eine eingebettete nicht-relationalen datenspeicher? Es muss nicht verteilbar sein und es müssen keine Transaktionen unterstützt, aber es hat aus zugegriffen werden .NET und es sollte einen kleinen download-Größe.
UPDATE: ich habe gefunden einen Artikel mit dem Titel SQLite als ein Schlüssel-Wert-Datenbank vergleicht mit sqlite, Berkeley DB, die eine eingebettete Schlüssel-Wert-Speicher-Bibliothek.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Windows hat ein integriertes embedded-non-relational speichern. Es heißt ESENT und dient dazu, mehrere Windows-Anwendungen, einschließlich Active Directory-und Windows-Desktop-Suche.
http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx
Wenn Sie wollen .NET-Zugang können Sie die ManagedEsent Schicht auf CodePlex.
http://managedesent.codeplex.com/
Das Projekt hat eine PersistentDictionary Klasse, die eine Schlüssel-Wert-Speicher, implementiert das IDictionary-interface, sondern wird unterstützt durch eine Datenbank.
Werfen Sie einen Blick auf RavenDB. Es sieht aus, als ob es eingebettet werden kann und ist schemaless und arbeitet mit .NET
Aus der website:
Ich würde persönlich gehen für SQLite mit NHibernate (und Fluent NHibernate). NHibernate kann erzeugen der Datenbank-schema automatisch für Ihre Klassen, so brauchen Sie nur angeben, welche Klassen, die Sie wollen, um fortzubestehen, und das ist ganz einfach mit Fluent NHibernate. Darüber hinaus können Sie nach bestimmten Objekten suchen und Sie brauchen nicht, um das laden aller Daten in den Speicher.
Anwendung der KISS-Prinzip zu deinem problem würde ich dir empfehlen die Verwendung von Dateien.
Als in dem Dateinamen ist der Schlüssel.
Inhalt der Datei ist der Wert.
Windows-Ordner ist der index.
Einfach, schnell, effizient, flexibel und absolut sicher (vorausgesetzt, die Narren haben niedrige Intelligenz).
Könnte Sie erstellen Sie eine einfache sqlite-Datenbank mit zwei Spalten:
und Daten werden json-Daten.
Könnten Sie auch einen Schlüssel erstellen Tabelle, die wäre:
wäre indiziert keyname und keyvalue für eine schnelle Suche.
Einer einzelnen db-Datei könnte eine Sammlung, und Sie können mehrere db-Dateien für mehrere Kollektionen.
Könnten Sie Ordner "dbs" zu entsprechen, mongodb Hierarchie der db->collection->document
Dies ist eine alte Frage, aber ich dachte, ich möchte hinzufügen, eine Antwort in den Fall, dass jemand stolpert über Sie. Meine Firma hat gerade veröffentlicht eine open-source-embedded-XML-Datenbank für die .NET-Plattform namens Nxdb. Es ist unter der Apache-2.0-Lizenz und hat in der Entwicklung und intern für mehrere Jahre. Es ist im Grunde eine Bindung an eine cross-kompiliert (mit IKVM) version von BaseX (eine fantastische Java-XML-Datenbank) zusammen mit zusätzlichen Funktionen für den embedded-Einsatz-Fall und der .NET-Umgebung. Die Projekt-Seite ist hier: https://dracorp.assembla.com/spaces/nxdb
XML eignet sich gut für diese Art von Daten speichern, gegeben, dass, solange die Inhalte, die Sie versuchen zu speichern, ist serializable, um text, den Sie speichern können komplexe hierarchische Bäume. In der Tat, wenn Sie direkt auf die Datenbank zugreifen, wird man nicht einmal selbst Anfassen "XML". Es kann auch abgefragt werden, mit XQuery eine leistungsfähige und komplette query-Sprache.
Vielen Dank für deine freundliche Erwähnung y_serial... genauer gesagt, es ist ein Python-Modul:
warehouse Python-Objekte mit SQLite
"Serialisierung + Dauer :: in ein paar Zeilen code, komprimieren und kommentieren von Python-Objekten in SQLite; dann später abrufen, Sie chronologisch von keywords ohne SQL. Die meisten nützlich "standard" - Modul für eine Datenbank zum speichern von schema-weniger Daten."
http://yserial.sourceforge.net
Meiner Erfahrung SQLite ist eine schnellere und zuverlässigere Wahl, als den meisten Datenbanken (einschließlich PostgresQL, Berkeley DB) für die Mehrzahl der Projekte-und natürlich muss es nicht ein server-daemon.
yserial ist sehr einfach zu implementieren (und viel schneller als die "Dateiname ist der Schlüssel /Inhalt der Datei ist der Wert" - Ansatz 😉
Können Sie versuchen, diese https://github.com/mdsoftware/mData. Kleines, kostenloses und sehr ungewöhnlich. Lisp-ähnliche Daten-Abfrage-Sprache, Ausdruck, compiler, high-performance binäre Serialisierung, alles inklusive.