Kann ich YAML beschleunigen?

8

Ich habe einen kleinen Testfall gemacht, um YAML und JSON Geschwindigkeit zu vergleichen:

%Vor%

Und das Ergebnis ist:

%Vor%

Ich benutze PyYAML 3.11 mit libyaml C-Bibliothek auf ubuntu 12.04. Ich weiß, dass json viel einfacher ist als yaml, aber mit einem 223x-Verhältnis zwischen json und yaml frage ich mich, ob meine Konfiguration korrekt ist oder nicht.

Haben Sie dasselbe Geschwindigkeitsverhältnis? Wie kann ich yaml.load() beschleunigen?

    
Eric 02.01.2015, 14:28
quelle

2 Antworten

12

Sie haben wahrscheinlich bemerkt, dass die Syntax von Python für Datenstrukturen sehr ähnlich der JSON-Syntax ist.

Was passiert, ist, dass Pythons json library Pythons eingebaute Datentypen direkt in Text codiert chunks , ersetzt ' in " und löscht , hier und da (um ein wenig zu vereinfachen).

Andererseits muss pyyaml ein ganzes Repräsentationsdiagramm erstellen , bevor es in eine Zeichenfolge serialisiert wird.

Die gleiche Art von Sachen muss beim Laden rückwärts passieren.

Die einzige Möglichkeit, yaml.load() zu beschleunigen, wäre, eine neue Loader zu schreiben, aber ich bezweifle, dass dies ein großer Leistungssprung sein könnte, außer wenn Sie bereit sind, Ihre eigene Einzweck-Sorte% zu schreiben. co_de% parser, wobei der folgende Kommentar in Erwägung:

  

YAML erstellt ein Diagramm, da es sich um eine Allzweck-Serialisierung handelt   Format, das mehrere Referenzen auf dasselbe darstellen kann   Objekt. Wenn Sie wissen, dass kein Objekt wiederholt wird und nur grundlegende Typen angezeigt werden,   Sie können einen JSON-Serialiser verwenden, dieser ist weiterhin YAML.

- AKTUALISIEREN

Was ich vorher gesagt habe, bleibt wahr, aber wenn Sie YAML ausführen, gibt es eine Möglichkeit, Linux parsing zu beschleunigen. Standardmäßig verwendet Pythons Yaml den Python-Parser. Sie müssen sagen, dass Sie yaml PyYaml Parser verwenden möchten.

Sie können es so machen:

%Vor%

Dazu müssen Sie C installiert haben, zum Beispiel mit apt-get:

%Vor%

Und yaml-cpp-dev mit PyYaml auch. Aber das ist bereits aufgrund Ihrer Ausgabe der Fall.

Ich kann es momentan nicht testen, weil ich OS X benutze und LibYaml hat Probleme beim Installieren von brew , aber wenn Sie PyYaml Dokumentation , sie sind ziemlich klar, dass die Leistung wird viel besser sein.

    
Jivan 02.01.2015 14:56
quelle
0

Ja, ich habe auch bemerkt, dass JSON viel schneller ist. Ein vernünftiger Ansatz wäre also, zuerst YAML in JSON zu konvertieren. Wenn es Ihnen nichts ausmacht Ruby, dann können Sie eine große Beschleunigung erhalten und die yaml Installation komplett entfernen:

%Vor%

Hier ist ein Vergleich für 100K Datensätze:

%Vor%

Und für 1M Datensätze:

%Vor%

Wenn Sie darauf bestehen, yaml.load trotzdem zu verwenden, denken Sie daran, es in einen virtualenv zu legen, um Konflikte mit anderer Software zu vermeiden.

    
personal_cloud 17.09.2017 03:37
quelle

Tags und Links