Ist CSV eine gute Option gegen XML und JSON für Programmiersprachen?
Im Allgemeinen verwende ich XML und JSON (oder manchmal eine reine Textdatei) als Flatfile-Speicher. Kürzlich bin ich jedoch auf eine CSV-Implementierung in PHP gestoßen . Ich habe im Allgemeinen gesehen, dass CSV für Eingaben in Excel- Dateien verwendet wird, aber ich habe es nie mit der Programmierung verwendet. Wäre es in irgendeiner Weise besser als XML oder JSON?
programming-practices
csv
Vishwas G
quelle
quelle
Antworten:
Die Antwort ist, es kommt darauf an.
CSV eignet sich hervorragend für bestimmte Anwendungsfälle. Als "Streaming" -Format für große Datasets ist das Streaming beispielsweise einfacher als bei XML / JSON, und CSV-Dateien belegen viel weniger Speicherplatz. Ich verwende es, um Datensätze im Gigabyte-Bereich zu streamen, wo andere Formate unpraktisch sind.
Es ist auch in bestimmten Branchen sehr verbreitet, wenn es um Altsysteme und Workflows geht. Versuchen Sie, JSON in MS Excel zu importieren.
Der ODI äußerte sich kürzlich zu CSV und nannte 2014 "Das Jahr der CSV".
Verwenden Sie für eine "richtige" CSV-Formatierung den CSV-Mime-Typ in Ihren HTTP-Antworten.
quelle
Mit Sicherheit nicht.
CSV ist ein Tabellenformat, das Datensätzen oder anderen Tabellendaten sehr gut zugeordnet werden kann. Es sind jedoch nicht alle Daten tabellarisch! Im Allgemeinen möchten wir Objektgraphen serialisieren . Dies kann in folgenden Fällen schwierig sein:
Wir möchten weiterhin in der Lage sein, die Objekte zuverlässig aus unserem Speicherformat zu deserialisieren.
XML
Ist in erster Linie eine erweiterbare Auszeichnungssprache . Es kann mit einem Schuhanzieher versehen werden, um auch allgemeine Datenstrukturen zu speichern. Die Sprachunterstützung für IDs bedeutet, dass komplexe Diagramme erstellt werden können, obwohl dies am besten für Bäume verwendet wird. Ein Dokument kann anhand einer Spezifikation auf Richtigkeit geprüft werden. Es gibt verschiedene Probleme mit diesem Format, die es unpraktisch machen können, wie zum Beispiel die extreme Ausführlichkeit.
JSON
Ist in erster Linie eine Art und Weise einfaches Objekt zu speichern Bäume . Es gibt keine Unterstützung für allgemeine Grafiken. JSON hat kein Konzept von Typ über Primitiven Zeichenfolge , integer , float , boolean , null und die Auflistungstypen Array und Objekt .
YAML
Am einfachsten als Erweiterung von JSON zu verstehen. Verfügt über Aliase , mit denen Objektgraphen beliebiger Komplexität erstellt werden können. Verfügt über ein Konzept von Metadaten wie Tags , die für die ordnungsgemäße Typisierung verwendet werden können.
CSV
Hat nichts außer einem einzigen Tisch. Wenn wir Objektdiagramme speichern möchten, müssten wir ein Schema wie das folgende verwenden
Es gibt viele CSV-Dialekte, bei denen Trennzeichen, Zeilenendezeichen, Anführungszeichen, Escapezeichen und viele andere Probleme nicht zutreffen, weshalb sie für allgemeine (binäre) Daten ungeeignet sind. All dies erschwert die Verarbeitung von CSV-Daten.
Grundsätzlich sind einfache Dinge mit CSV schwierig oder unmöglich, wenn es als allgemeines Serialisierungsformat verwendet wird.
Diese Kritik trifft nicht zu, wenn damit wirklich tabellarische Daten wie Arbeitszeitnachweise oder Messreihen gespeichert werden. Hier ist CSV (häufig in der Variante mit durch Tabulatoren getrennten Werten) in der Regel kompakter und benutzerfreundlicher als die anderen Datenformate.
quelle
Ich muss auch sagen, dass es davon abhängt, was Sie erreichen wollen. Bei vielen Problemen spielt es keine Rolle, für was Sie sich entscheiden, wenn das Problem klein genug ist und Ihre Auswahl gut zum vorhandenen System passt.
Es kann manchmal ein Problem sein, ein Altsystem zu nehmen und zu versuchen, das Problem in einem neuen Format zu beheben, da Sie mehr Komplexität eingeführt haben und ein neues Eingabesystem zum Debuggen haben. Ich habe dies oft gesehen, wenn neue Leute etwas anderes bevorzugen als das, was existiert, oder wenn ein neues Format erscheint und sie damit experimentieren wollen. Dies kann eine gute Idee sein oder auch nicht, es hängt von den Umständen ab.
Vor Jahren arbeitete ich an einem Datenbanksystem für Forschungsgraphen, das von CSV-Dateien verschiedener Formate abhing. Der Importeur von CSV-Dateien erstellte Diagramme für uns und es wurde jahrelang daran gearbeitet, den Code zu debuggen und zu optimieren. Es war sowohl schnell als auch flexibel und wir würden es gerne nutzen, um große Forschungsprojekte zu starten. Als XML in der Szene auftauchte, haben wir einen XML-Importer hinzugefügt, der jedoch nicht unbedingt die Geschwindigkeit verbessert oder die Komplexität zum Ausdruck bringt, und XML war sicherlich nicht besser darin, Diagrammstrukturen auszudrücken als CSV. JSON ist viel netter (und terser) als XML, aber in vielerlei Hinsicht ähnlich. Daher würde ich beim Erstellen eines neuen Importers auf diesem System ein ähnliches Ergebnis erwarten.
Zu einem bestimmten Zeitpunkt hatte ein Kunde eine riesige Datenmenge im (wie wir es nannten) "Cobol" -Format, Dateien mit Zeilen variabler Länge, die Markierungen enthielten, die angaben, wie die darauf folgenden Bytes zu interpretieren waren. Es stammte aus einer Zeit, in der die Lagerung teuer war, weshalb Kompaktheit gefragt war. Wir haben diese Daten importiert, indem wir sie sofort in das CSV-Format konvertiert und in den CSV-Importer eingespeist haben. Das war einfach und minimierte den Aufwand für das Debugging und die Wartung, die gute Dinge sind. Wenn wir diese Art von Daten die ganze Zeit importieren müssten, hätten wir sie möglicherweise direkt in das System eingebaut, um Leistungs- und Effizienzgewinne zu erzielen.
Es kommt also darauf an, was Sie tun und was das zugrunde liegende System tut. In meinem Beispiel war der CSV-Importeur solide konstruiert und zuverlässig. Ich würde zögern, Ihnen mitzuteilen, dass ein Format besser oder schlechter war, ohne zu verstehen, was in den anderen Ebenen, die ich aufbaue, vor sich geht. Ich liebe JSON und bevorzuge es, aber ich weiß, dass CSV-Dateien bei bestimmten komplexen Datenstrukturen und ausreichend großen Datenmengen auch sehr gut funktionieren können.
quelle
Nein.
CSV ist nicht wirklich ein einzelnes Format. Es gibt eine Vielzahl von Stilen für Escapezeichen, Trennzeichen und andere Formatierungsprobleme, die in vielen CSV-Dateien auftreten.
Wenn Sie dies als Flat-File-Speicher verwenden, ist JSON für Sie viel besser geeignet. JSON ordnet Objekte mit wesentlich weniger Aufwand zu und von Objekten zu, als Sie mit CSV tun müssen.
quelle
Ich würde dringend davon abraten. Ich bin möglicherweise in der Lage, irgendwann CSV auszugeben (wenn der Benutzer dies wünscht). Es ist jedoch für Speicher- / Importzwecke ungeeignet. Dies ist hauptsächlich auf die Tatsache zurückzuführen, dass "CSV" sehr schlecht definiert ist. Zeigt das "C" "Komma" oder "Zeichen" getrennt an? Wie behandelt man Textstrings, die Escape-Zeichen enthalten, wie "? Jede verdammte CSV-Implementierung behandelt Escape-Zeichen usw. unterschiedlich, was zu Dateien führt, die ex-, aber nicht importiert werden können usw.
Excel ist eine gute Demonstration: In der englischen Version wird "," als Trennzeichen verwendet. In Deutschland wird ";" verwendet. Also erstickt eine deutsche Version an englischen CSV-Dateien und umgekehrt ...
Die Hauptstärke liegt in der Lesbarkeit, die nicht unterschätzt werden sollte. Aber ich würde mich nicht darauf als Speicherformat verlassen, es ist zu spröde für diesen Zweck. Wenn Sie Dateien für Menschen exportieren müssen, könnten Sie CSV verwenden, aber selbst dann würde ich versuchen, eine Bibliothek zu verwenden, die in XLSX-Dateien schreibt (sie sind frei verfügbar).
quelle
Im Allgemeinen NO. Warum? JSON und XML sind im Grunde dazu da, die gefürchtete CSV loszuwerden. Sie sind die strukturierten Ansätze dessen, was mit CSV seit langem unstrukturiert gemacht wird. Ja, es gibt einige Anwendungsfälle, in denen CSV immer noch bevorzugt wird, aber im Allgemeinen ist es in 9 von 10 Fällen besser, CSV nicht zu verwenden.
quelle