登录JSON对性能的影响


22

我看到越来越多的有关登录JSON的文章。您也可以在NodeJS博客上找到一个。为什么每个人都这么喜欢它?我只能看到更多的操作参与其中:

  • 正在创建几个新对象。
  • 字符串化对象,涉及计算字符串长度或多个字符串分配。
  • GC创建的所有废话。

使用JSON日志记录和常规字符串日志记录时,是否有任何性能测试?人们在企业项目中是否使用JSON(用于记录)?

Answers:


36

JSON日志记录使您能够以编程方式解析日志文件,即使格式已及时更改

一个很好的例子是Apache日志。默认情况下,Apache使用commonaccess.log格式:

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

假设您已经构建了一个脱机解析器,该解析器将使用这些日志文件之一并从中计算一些统计信息。

在某些时候,您将子域引入到您的应用程序中并包括virtual_host到您的日志中(只是这样,您可以调试子域之一是否出现问题):

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

您的解析器没有使用virtual_hosts,但是您仍然需要将解析器调整为:

  • 接受新的日志格式(请注意日志格式%v的开头)
  • 仍支持旧日志格式(适用于旧日志文件)

但是,如果您登录JSON,那么解析器甚至不会注意到添加的字段,并且可以很高兴地解析新日志和旧日志。如果添加的字段存在,其他解析器也可以使用 它们

当然,对您来说,解析JSON比编写regexps解析字符串日志要容易。


10
完美的例子。
Florian Margaine 2012年

27

如果您的计算机运行得非常接近极限,以至于这些问题确实很重要,那么您很可能会遇到更严重的问题。尽管在某些情况下这可能会有所不同,但是许多应用程序(可能是大多数)都在计算机上运行,​​如果您将JSON,简单文本或记录记录到数据库中,那么这些应用程序根本就没有关系。在大多数情况下,对象,字符串和其他转换都必须进行(除非您记录原始二进制文件?),也许您看不到它,因为您使用在后台处理它的默认类(例如,如果您写入数据库)。

如果需要对此进行性能评估,则需要在要运行代码的计算机上以及日常使用的编程环境中进行评估。开销很大还是根本取决于很多事情。例如,如果您使用Ruby on Rails编写网站,则在大多数情况下,您的数据都是哈希值,将其转换为JSON几乎不需要花钱,因为内部表示形式与您要编写的内容相差无几(这很典型)使Rails代码始终可以抛出此类对象和数据结构)。

优势再次取决于您的工具。如果您的库中内置了JSON,则可以轻松阅读并以某种形式显示。再次作为示例:假设您拥有网站的管理界面,并且想要显示一些存储在JSON中的日志记录信息,则在某些情况下,您可以在一行代码中读取并显示为Ruby中的HTML。


1
我敢打赌,您不太在乎丢掉微秒 ……
Rhymoid

@Rhymoid不,我更愿意花时间解决实际问题。
thorstenmüller16年

3
@Rhymoid当然,有些情况下丢掉微秒是不好的。我还认为99.9%的程序员将在没有编写代码的地方编写代码。例如,大多数Web框架的工作超出了我的需要,而这会产生开销。但是,随之而来的是一整套测试和安全性,此外,它还为我自己节省了数百小时的编码时间。对于我公司无需从头开始构建它的额外费用,他们可以在需要时提供两倍的硬件资金(尽管这可能比我自己可以自己构建的任何东西都要快……)最终,微秒无关紧要。
corsiKa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.