Ich bin auf der Suche nach einem persistenten Key-Value-Speicher für .NET. Die Anforderungen sind:
- Der Speicher wird für Objekte verwendet, die durch Zeichenketten identifiziert werden und mehrere optionale (benannte) Eigenschaften mit Werten haben, die nur Byte-Arrays sind. Für eine SQL-Lösung würde ich es als eine String -> id-Tabelle und mehrere id -> Blob-Tabellen modellieren.
- Die erwartete Datenmenge beträgt mehrere Megabyte (mehr als 10 Mb ist derzeit unwahrscheinlich, aber eine Skalierung auf 100 Mb wäre ein netter Bonus)
- Geringes Gewicht - vorzugsweise einteilig, auf jeden Fall ohne externe Anwendungen
- Es wird häufiger gelesen als geschrieben, mindestens um den Faktor 100.
- Schneller Lese-/Schreibzugriff - Ich erwarte In-Memory-Speicher und Lazy Writes bei der Aktualisierung der Daten; ich kann selbst regelmäßig asynchrone Schreibvorgänge auslösen; Bonuspunkte, wenn der Speicher dies tut.
- Atomare E/A - die Datenbank sollte nicht zusammenbrechen, wenn der Prozess mitten im Schreiben beendet wird; ansonsten sind die Daten nicht kritisch, d. h. es ist keine zusätzliche Redundanz erforderlich.
Derzeit denke ich, dass SQLite hier funktionieren wird; allerdings scheint es ein wenig übertrieben zu sein - ich brauche nur Key-Value-Speicher, nicht volle SQL-Unterstützung. Ich habe auch von bdb gehört, und von libdb-dotnet Bindung - es scheint mehr leichtgewichtig zu sein, aber ich weiß nicht, die Leistung/Konsistenz Eigenschaften.
Kann jemand hier etwas empfehlen? Zusätzliche Referenzen sind willkommen (d.h. es wäre großartig, wenn es etwas in .NET Framework gibt, das die Aufgabe erledigen kann), sowie Erfahrungen mit SQLite oder libdb-dotnet (oder bdb im Allgemeinen) oder einer selbstentwickelten Lösung, wenn es schmerzlos war.