JSONへのログインがパフォーマンスに与える影響


22

JSONでのロギングに関する記事が増えています。NodeJSブログでも見つけることができます。誰もがそんなに好きなのですか?より多くの操作が関与しているのを見ることができます:

  • いくつかの新しいオブジェクトが作成されます。
  • オブジェクトの文字列化。文字列の長さを計算するか、複数の文字列を割り当てます。
  • 作成されたすべてのがらくたをGCします。

JSONログと通常の文字列ログを使用するときのパフォーマンスのテストはありますか?人々はエンタープライズプロジェクトでJSON(ロギング用)を使用していますか?

回答:


36

JSONロギングを使用すると、形式が時間とともに変更された場合でも、プログラムでログファイルを解析できます。

良い例は、Apacheログです。デフォルトでは、Apacheはcommonaccess.logの形式を使用します。

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

これらのログファイルの1つを取得し、そこから統計情報を計算するオフラインパーサーを構築したとします。

しばらくすると、アプリケーションにサブドメインを導入virtual_hostし、ログに追加します(サブドメインの1つで問題が発生した場合にデバッグできるように)。

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

パーサーはを使用しませんvirtual_hostsが、それでもパーサーを以下に適合させる必要があります。

  • 新しいログ形式を受け入れます(ログ形式%vの先頭に注意してください)
  • 古いログ形式を引き続きサポート(古いログファイルの場合)

ただし、JSONでログインすると、パーサー追加されたフィールドに気付くことさえなく、古いログだけでなく新しいログも喜んで解析できます。そして、他のパーサーは、追加されたフィールドが存在する場合、それを利用でき ます

そしてもちろん JSONのregexps解析は、文字列ログの解析に書き込むよりも簡単です。


10
完璧な例。
フロリアンマーゲイン

27

マシンがその限界に近づいて動作し、そのような問題が実際に問題になる場合、より深刻な問題が発生している可能性があります。これにより何らかの違いが生じる例外的な状況もありますが、多くのアプリケーション(ほとんどの場合)は、JSON、単純なテキスト、またはレコードをデータベースに記録する場合の違いがまったく関係ないマシンで実行されます。とにかくほとんどの場合、オブジェクト、文字列、その他の変換を行う必要があります(生のバイナリをログに記録しますか?)。それを見ることができないかもしれません。

このためにパフォーマンス評価が必要な場合は、コードを実行するマシン上で、毎日使用するプログラミング環境で自分で評価する必要があります。大きなオーバーヘッドが発生する場合や、何らかのオーバーヘッドが発生する場合は、多くのことに依存します。たとえば、Ruby on RailsでWebサイトを作成する場合、ほとんどの場合、データはハッシュになります。これをJSONに変換すると、内部表現は作成するものからそれほど遠くないため(ほとんどの場合、 Railsコードがそのようなオブジェクトやデータ構造を常に放り投げるために)。

利点は、ツールによっても異なります。ライブラリにJSONが組み込まれている場合は、JSONを簡単に読み取って、何らかの形式で表示できます。繰り返しますが、例として、Webサイトの管理インターフェイスがあり、JSONに保存されたログ情報を表示したい場合、RubyでHTMLとして1行のコードでこれを読み取って表示できます。


1
私はあなたがについてはあまり気にしない賭けマイクロ秒を捨てを ...
Rhymoid

@Rhymoidいいえ、私は時間を使って実際の問題を解決することを好みます。
トーステンミュラー16年

3
@Rhymoid確かに、マイクロ秒を捨てるのが悪い状況があります。また、プログラマーの99.9%が、そうではない場所でコードを書くと思います。たとえば、ほとんどのWebフレームワークは、必要以上のことを行いますが、オーバーヘッドがあります。しかし、これにはテストとセキュリティの完全なスイートが付属しているうえ、自分でコーディングするのに何百時間も節約できます。私の会社がゼロからの構築に費やしていない余分なコストのために、必要に応じてハードウェアの2倍の資金を提供することができます(とにかく自分で構築できるものよりも高速かもしれませんが...)最終的に、マイクロ秒は重要ではありません。
corsiKa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.