12 Stimmen

Versionierungsfreundliches, erweiterbares Binärdateiformat

In dem Projekt, an dem ich gerade arbeite, muss eine große Datenstruktur auf der Festplatte gespeichert werden (ich denke an Dutzende von MBs). Da ich ein Optimist bin, dachte ich, dass es eine Standardlösung für ein solches Problem geben muss; bis jetzt habe ich jedoch keine Lösung gefunden, die die folgenden Anforderungen erfüllt:

  1. Unterstützung von .NET 2.0, vorzugsweise mit einer FOSS-Implementierung
  2. Versionsfreundlich (dies ist so zu verstehen, dass das Lesen einer alten Version des Formats relativ einfach sein sollte, wenn die Änderungen in der zugrunde liegenden Datenstruktur einfach sind, z. B. Hinzufügen/Löschen von Feldern)
  3. Möglichkeit eines zufälligen Zugriffs, bei dem ein Teil der Daten nach der anfänglichen Erstellung erweitert werden kann, ohne dass die bis zu diesem Zeitpunkt erstellte Sammlung deserialisiert werden muss (stellen Sie sich dies als Erweiterung der Zwischenergebnisse vor)
  4. Platz- und zeiteffizient (XML wurde angesichts dieser Anforderung als Option ausgeschlossen)

Bislang erwogene Optionen:

  • XmlSerializer : wurde abgelehnt, da die Xml-Serialisierung die Anforderungen 3 und 4 nicht erfüllt.
  • SerializableAttribute : unterstützt die Anforderungen 2 und 3 nicht.
  • Protokoll-Puffer : wurde abgelehnt durch Urteil der Dokumentation über Große Datensätze - Da in diesem Kommentar vorgeschlagen wurde, eine weitere Ebene hinzuzufügen, würde dies eine zusätzliche Komplexität bedeuten, die ich durch das Dateiformat selbst bewältigt haben möchte.
  • HDF5 , EXI : scheinen keine .net-Implementierungen zu haben
  • SQLite / SQL Server Compact-Ausgabe Die vorliegende Datenstruktur würde zu einer ziemlich komplexen Tabellenstruktur führen, die für den beabsichtigten Zweck zu schwerfällig erscheint.
  • BSON : scheint die Anforderung 3 nicht zu unterstützen.
  • Schnelles Infoset : scheint nur bezahlte .NET-Implementierungen zu haben.

Jegliche Empfehlungen oder Hinweise sind sehr willkommen. Wenn Sie glauben, dass eine der oben genannten Informationen nicht wahr ist, geben Sie mir bitte Hinweise/Beispiele, die das Gegenteil beweisen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X