Frage

Meine Anwendung Notwendigkeit, große Mengen an speichern XML-wie hierarchische Informationen, mit folgenden Anforderungen:

  1. Schnell lesen
  2. Minimal Speicherverbrauch
  3. typisierten Daten, anstatt nur Text

Haben Sie Vorschläge für ein binäres Format, die diese Ziele erfüllt?

War es hilfreich?

Lösung

Sie nicht angeben, wenn xml ein Format Voraussetzung ist nur Sie sagen, es ist wie XML hierarchisch sein muss.

Ohne weitere Einzelheiten über die Art von Daten es schwer ist Ihnen sehr Ratschläge zu geben. Also hier ist eine kleine Liste.

  • b-Bäume gibt es eine Reihe von Bibliotheken b-Baumspeicherformate in mulitiple Sprachen unterstützen. sie haben schnelle Lookups und sind in der Natur hierarchisch aufgebaut.
  • Protokoll-Puffer von Google. Kompakte Lagerung für das Senden über den Draht optimiert. Müssen nicht zwangsläufig als Speicherformat obwohl optimiert. Sie sind typisiert obwohl und wahrscheinlich ziemlich gut als Speicherformat tun wird.
  • Zip Textformate. kompakt, und je nach dem gewählten Format eingegeben und hierarchisch in der Natur.
    • YAML (Unterstützung für einige komplexe Typisierung, hierarchisch, für Menschen lesbare)
    • JSON (weniger tippen Unterstützung, schnelle Analyse, hierarchisch, für Menschen lesbar)

Andere Tipps

Do andere Anwendungen müssen die gespeicherten Daten, oder einfach nur Ihre lesen? Braucht es ein "Standard" Format zu sein?

Schnell Infoset Anforderungen erfüllt (1) und (2), obwohl, weil es nur ein binäre Darstellung des XML-Datenmodell, es ist nur als nicht typisiert als XML. Könnte für Ihre Zwecke gut genug sein, in Abwesenheit von etwas aber sonst.

Es gibt zu wenig ausführlich in Ihren Anforderungen gute Vorschläge zu geben. Zum Beispiel sind frei Sie Ihr Speichermedium zu holen? Wird es ein Dateisystem, Datenbank oder etwas anderes sein?

Was bedeutet „Mindestspeicherverbrauch“ mean? Laufen Sie auf einer eingeschränkten Plattform? Müssen Sie Ressourcen mit anderen Anwendungen teilen? Ist ein 1 GB klein genug, Fußabdruck, wenn Ihr Computer 4 GB Arbeitsspeicher hat? Ihre Daten werden im Speicher sitzen oder nur die Teile, die Sie gerade arbeiten?

Wenn die Plattform Java ist, würde ich mit seiner Standard-Serialisierung beginnen und dann benutzerdefinierte Serialisierung untersuchen, ob ich mit der Leistung nicht zufrieden war.

Sie können auch die XML in ein Objekt Diagramm und speichern, wie Google Protocol Buffers lesen. Diese sind sehr effizient.

Wenn das Format diskutabel ist, würde ich vorschlagen, JSON, XML nicht. JSON ist tatsächlich schneller zu laden und als Standard XML.

Mehr über JSON:

http: //www.25hoursaday .com / weblog / PermaLink.aspx? guid = 060ca7c3-b03f-41aa-937b-c8cba5b7f986 http://www.25hoursaday.com/ weblog / PermaLink.aspx? guid = 39842a17-781a-45c8-ade5-58286909226b

Wikipedia Erklärung des Problems: http://en.wikipedia.org/wiki/Binary_XML

Angeblich soll die empfohlene Organisation und ihre Java- und .NET-SDK kann heruntergeladen werden unter: http://www.agiledelta.com/product_efx.html

xml ist reiner Text kann aber verwendet werden serialisierte Objekte darzustellen. Lassen Sie uns annehmen Ihre Serializer Ihre Objekte in XML serialisiert.

Sie sollten nicht versuchen, Ihre Objekte in Binärströme zu konvertieren, weil Sie Endian angehen müssten ( http: //en.wikipedia.org/wiki/Endian ) und Datenrepräsentation Probleme. Allerdings, wenn Sie darauf bestehen, müssten Sie XDR verwenden ( http://en.wikipedia.org/wiki / External_Data_Representation ) für seine Datenarchitektur Neutralität.

Andernfalls sollten Sie Ihre Objekte mit Hilfe von XML-Standard Serializer serialisiert und dann die XML-Binär / compact xml konvertieren, weil die Verfügbarkeit von Bibliotheken und SDKs. Und dann Deserialisieren von aus binären XML Dekompaktifizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top