Frage

Ich bin zur Zeit sehr neugierig, wie andere Programmierer Daten in Dateien organisieren. Kann jemand für die Erstellung von Dateistrukturen keine guten Artikel oder Bücher über Best Practices empfehlen?

Zum Beispiel, wenn Sie Ihr eigenes Stück Software für welchen Zweck auch immer erstellt haben, tun lassen Sie die gespeicherten Daten im Klartext, serialisiert es, kodieren zu xml, und warum tun Sie das?

Gibt es irgendwelche Geheimnisse, die ich verpasst habe?

War es hilfreich?

Lösung

Im Allgemeinen geht die einfachste Sache, die möglicherweise funktionieren kann, zumindest auf dem ersten. Betrachten wir zum Beispiel UNIX, wo die meisten der Konfigurationsdateien sind nichts anderes als whitepace-getrennte Felder oder Felder mit einem anderen Zeichen begrenzt (wie / etc / passwd, die verwendet „:“ Trennzeichen, da die GCOS Feld Leerzeichen enthalten kann.)

Wenn Ihre Daten viel mehr Struktur benötigt, dann fragen Sie sich, „welche Tools kann ich einfach nutzen?“ Python und Ruby haben JSON und YAML, zum Beispiel.

XML ist grundsätzlich sinnvoll, wenn Sie viele XML-basiertes Material bereits haben, oder Sie erwarten, dass der XML auf eine darstellbare Form in einem Browser zu verwandeln. Ansonsten ist es in der Regel sehr Schwergewicht (Code-Größe, Komplexität) für das, was man von ihm zu erhalten.

Andere Tipps

Egal, welches Format Sie irgendeine Art von Versionsnummer erinnern wählen innen zu speichern (ich bin ziemlich sicher, dass Sie einige Änderungen einführen müssen werden).

Format hängt stark von der Anwendung und Datenmenge. Für einige Anwendungen ist XML falls für andere Anwendungen Größe structs in einer Binärdatei gespeichert fixiert sind gut.

Ich benutze viele verschiedene Formate, je nach Situation, zum Beispiel:

  • Textdatei (getrennt) für Datensätze für Matlab und R Analyse
  • Speichern
  • Binär-Dateien - für feste Größe Strukturen zu speichern (mit dynamischer Größe der Direktzugriffs eine separate Anordnung von Offsets für die Elemente ohne Aufrechterhaltung schwierig wird). Ein das Positive Sie haben Leistung und Raumeffizienz (warum die meisten Datenbanken speichern Daten im Binärformat tun?), Aber es ist nicht sehr gut für Menschen mit zu arbeiten. Denken Sie daran, die Endianess.
  • XML - in der Regel für die Konfigurationsdaten oder Daten, die ich (zusammen mit XSD) anderen Benutzern Anwendungen geben will. Die andere Seite kann schön XSLT-Transformation schreiben oder die Daten in anderer Weise verbrauchen (natürlich könnten sie gleich mit Klartext oder Binärdaten der Formatbeschreibung gegeben tun)

Wenn Sie spezielle Anforderungen haben, verwenden Sie etwas, für die es bereits eine reife Bibliothek, so können Sie vermeiden, Ihre eigenen Parsing-Code zu schreiben. Das bedeutet, XML / JSON, etc, wie die Leute gesagt haben.

Ein anderes nettes ist die Google-Protokollpuffer ( http://code.google.com/p/ protobuf ). Dort schreiben Sie eine gemeinsame Nachrichtendefinition und der Protokollpuffer Compiler erzeugt Objekte zum Ausfüllen, Serialisierung und Deserialisierung der Daten für Sie. Typischerweise ist das Format ist binär, aber Sie können ihre Textformat-Klasse verwenden zu JSON-like Klartext zu schreiben. Die nette Sache über protobufs ist, dass der Versionscode wird für Sie generiert. In der Version 2 Ihrer Dateiformat, alles, was Sie tun müssen, ist Felder in die Proto-Definitionsdatei hinzufügen. Die neue Version kann das alte Dateiformat lesen, und läßt nur die neuen Felder leer. Es ist nicht genau das, was protobufs wurde entworfen für, aber sie machen ein einfaches, effizientes binäres Dateiformat für benutzerdefinierte Nachrichten, und der Code für Dich generiert.

Siehe auch Facebook Thrift , jetzt in dem Apache-Inkubator.

Im Laufe der Jahre gegangen sind, indem ich mich mehr gefunden habe und mehr Favorisierung Text, wenn es einfach ist indiskutabel. CPUs sind schnell genug, um jetzt, dass wir es schnell genug dekodieren kann.

Natürlich, wenn Sie häufig müssen kleine Stücke von Informationen in einer großen Datei aktualisieren dies keine Option ist -. Aber, dass die meisten beschreibt wahrscheinlich eine Datenbank

Es wäre eine ungewöhnliche Situation an dieser Stelle, um mich mit etwas anderem als einer dieser beiden Optionen gehen zu machen.

1 für XML. Hat ein wenig Overhead, aber leicht zu analysieren, zu lesen und zu debuggen. Kann streng sein, wenn Sie ein Schema verwenden. Einfach mit XSLT zu transformieren, und sehr beweglich (in Draht oder nur in einem USB-Stick:)

Das hängt wirklich von der besonderen Situation. Sie müßten Ihre Möglichkeiten gegen die Antworten auf verschiedene Fragen zu berücksichtigen:

  • Wie viele Daten müssen Sie speichern? Sie benötigen für kompakte Darstellung optimieren?
  • Ist die Leistung der Lese- / Schreib kritisch? Benötigen Sie für Plattenzugriff und Low-Impact-Serialisierung und Deserialisierung optimieren?
  • Haben Sie Direktzugriff in der Datei benötigen? Müssen Sie die Struktur für die Suche nach innerhalb der Daten optimieren?
  • Wird diese Daten über verschiedene Systeme verwendet werden, möglicherweise mit unterschiedlichen Zeichencodierungen? Sie benötigen für die Portabilität zu optimieren?

Die Art der Daten selbst wird einen Einfluss haben. Ist es eine flache Listenstruktur? Ist es ein Baum? Ist es ein zyklisches Graph? Sind die Aufzeichnungen von festen oder variablen Breiten?

Sobald die Antworten auf diese Fragen bekannt sind, können Sie unter Ihren Optionen auswählen, es so einfach wie möglich zu halten. Oft sind die beliebtesten Optionen (XML, CSV, YAML) Ihre Zwecke anpassen. Wenn nicht, dann werden Sie haben Ihre eigene Formatierung und Ihre eigenen Schreib- und Leseverfahren zu entwickeln.

Es gibt so viele Möglichkeiten, aber die pragmatischsten hat XML sein

  • Es gibt anständige XML-Bibliotheken für nahezu jede Entwicklungsplattform
  • Die meisten Plattformen erlauben Objektgraph-Serialisierung mit ein paar Zeilen Code, so XML ist schmerzlos zu implementieren
  • Die meisten Plattformen haben eine im Speicher und / oder Streaming-Leser, so kann man wirklich große Dateien verarbeiten, ohne zu viel Speicherverbrauch
  • Die Plattform eine XSLT tranformer bieten, so dass Sie Dateien von einem Format in ein anderes verschieben kann, auch von XML nicht XML
  • Es indiziert Erweiterung für XML zu behandeln wirklich zu große Dateien
  • XML hat XSD ist das Format zu validieren, bevor Sie versuchen, es zu lesen
  • XML ist in der Lage jede einfache oder komplexe Aufgabe darstellt
  • Wenn Sie sich Sorgen über die Dateigröße sind, zip nur die endgültige XML. Diese Technik wird verwendet, in Microsoft Office usw.
  • XML ist nach wie vor Menschen lesbaren
  • XML ist ein verbreiteter Standard
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top