Anmelden bei JSON Auswirkung auf die Leistung


22

Ich sehe immer mehr Artikel über das Einloggen in JSON. Sie können auch einen auf NodeJS-Blog finden. Warum gefällt es allen so gut? Ich kann nur mehr Operationen sehen, die involviert sind:

  • Ein paar neue Objekte werden erstellt.
  • String-Erstellung von Objekten, wobei entweder die String-Länge oder mehrere String-Zuordnungen berechnet werden.
  • GCing all den Mist, der erstellt wurde.

Gibt es einen Leistungstest bei Verwendung der JSON-Protokollierung und der regulären Zeichenfolgenprotokollierung? Verwenden Benutzer JSON (für die Protokollierung) in Unternehmensprojekten?

Antworten:


36

Mit der JSON-Protokollierung können Sie die Protokolldatei auch dann programmgesteuert analysieren, wenn sich das Format im Laufe der Zeit geändert hat .

Ein gutes Beispiel sind Apache-Protokolle. Standardmäßig verwendet Apache das commonFormat für access.log:

"%h %l %u %t \"%r\" %>s %b"

Angenommen, Sie haben einen Offline-Parser erstellt, der eine dieser Protokolldateien verwendet und daraus einige Statistiken berechnet.

Irgendwann führen Sie Subdomains in Ihre Anwendung ein und fügen virtual_hostsie Ihren Protokollen hinzu (nur damit Sie Fehler beheben können, wenn Probleme mit einer der Subdomains auftreten):

"%v %h %l %u %t \"%r\" %>s %b"

Ihr Parser verwendet das nicht virtual_hosts, aber Sie müssen Ihren Parser noch anpassen an:

  • Akzeptieren Sie das neue Protokollformat (beachten Sie das Format %vam Anfang des Protokolls).
  • unterstützt weiterhin das alte Protokollformat (für ältere Protokolldateien)

Wenn Sie sich jedoch in JSON anmelden , bemerkt Ihr Parser das hinzugefügte Feld nicht einmal und kann sowohl die neuen als auch die alten Protokolle problemlos analysieren. Und einige andere Parser können die hinzugefügten Felder verwenden, wenn sie vorhanden sind .

Und natürlich ist das Parsen von JSON für Sie einfacher als das Schreiben regexpszum Analysieren von Zeichenfolgenprotokollen.


10
Perfektes Beispiel.
Florian Margaine

27

Wenn Ihr Computer so nahe an seinen Grenzen läuft, dass solche Probleme wirklich von Bedeutung sind, treten höchstwahrscheinlich ernstere Probleme auf. Während es Ausnahmesituationen gibt, in denen dies einen Unterschied macht, werden viele (möglicherweise die meisten) Anwendungen auf Computern ausgeführt, für die der Unterschied, ob Sie JSON, einfachen Text oder Datensätze in einer Datenbank protokollieren, überhaupt keine Rolle spielt. Objekte, Strings und andere Konvertierungen müssen in den meisten Fällen sowieso durchgeführt werden (es sei denn, Sie protokollieren rohe Binärdateien?). Möglicherweise wird dies nicht angezeigt, da Sie Standardklassen verwenden, die dies im Hintergrund behandeln (wie beim Schreiben in eine Datenbank).

Wenn Sie dazu Leistungsbewertungen benötigen, müssen Sie diese selbst auf dem Computer erstellen, auf dem Sie Ihren Code ausführen möchten, und mit der Programmierumgebung, die Sie täglich verwenden. Ob es einen großen Aufwand gibt oder überhaupt, hängt von vielen Dingen ab. Wenn Sie beispielsweise eine Website in Ruby on Rails schreiben, sind Ihre Daten in den meisten Fällen ein Hash, und die Konvertierung in JSON kostet Sie so gut wie nichts, da die interne Darstellung nicht so weit von dem entfernt ist, was Sie schreiben möchten (und dies ist typisch) für Rails-Code, um solche Objekte und Datenstrukturen ständig zu umgehen).

Die Vorteile hängen wieder von Ihren Werkzeugen ab. Wenn Sie JSON in Ihre Bibliotheken eingebaut haben, können Sie es leicht lesen und in irgendeiner Form anzeigen. Nochmals als Beispiel: Angenommen, Sie haben eine Administrationsoberfläche für Ihre Website und möchten einige in JSON gespeicherte Protokollierungsinformationen anzeigen. In einigen Fällen können Sie dies in Ruby in einer einzigen Codezeile als HTML anzeigen.


1
Ich wette, es ist dir egal , Mikrosekunden
wegzuwerfen

@ Rhymoid nein, ich nutze meine Zeit lieber, um echte Probleme zu lösen.
Thorsten Müller

3
@ Rhymoid Es gibt Situationen, in denen es mit Sicherheit schlecht ist, Mikrosekunden wegzuwerfen. Ich denke auch, dass 99,9% der Programmierer Code schreiben werden, wo dies nicht der Fall ist. Zum Beispiel leisten die meisten Web-Frameworks mehr, als ich brauche, und das hat Overhead. Aber damit verbunden sind eine ganze Reihe von Tests und Sicherheitsvorkehrungen. Außerdem spare ich mir Hunderte von Stunden damit, sie selbst zu programmieren. Für die zusätzlichen Kosten, die mein Unternehmen nicht für den Neuaufbau ausgibt, könnte es die doppelte Hardware finanzieren, wenn sie benötigt wird (obwohl es wahrscheinlich auch schneller ist als alles, was ich selbst bauen könnte ...). Letztendlich spielen Mikrosekunden keine Rolle.
corsiKa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.