Iniciar sesión JSON Effect on Performance

22

Veo más y más artículos sobre cómo iniciar sesión en JSON. También puedes encontrar uno en el blog de NodeJS. ¿Por qué a todos les gusta tanto? Solo puedo ver más operaciones involucradas:

  • Se están creando un par de objetos nuevos.
  • Cadena de objetos, que implica calcular la longitud de la cadena o múltiples asignaciones de cadena.
  • GCing toda la basura que se creó.

¿Existe alguna prueba de rendimiento cuando se utiliza el registro JSON y el registro de cadena regular? ¿La gente usa JSON (para iniciar sesión) en proyectos empresariales?

Pijusn
fuente

Respuestas:

36

El registro JSON le permite analizar el archivo de registro mediante programación, incluso si el formato ha cambiado a tiempo .

Un buen ejemplo son los registros de Apache. Por defecto, Apache usa el commonformato para access.log:

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

Supongamos que ha creado un analizador sin conexión que toma uno de esos archivos de registro y calcula algunas estadísticas a partir de él.

En algún momento, introduce subdominios en su aplicación e incluye virtual_hosten sus registros (solo para que pueda depurar si aparecen problemas con uno de los subdominios):

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

Su analizador no utiliza el virtual_hosts, pero aún necesita adaptar su analizador a:

  • aceptar el nuevo formato de registro (observe %vel encabezado del formato de registro)
  • todavía admite el formato de registro anterior (para archivos de registro anteriores)

Pero si inicia sesión en JSON , su analizador ni siquiera notará el campo agregado y podrá analizar felizmente los registros nuevos y los registros antiguos. Y algún otro analizador puede hacer uso de los campos agregados si existen .

Y, por supuesto, para usted , analizar JSON es más fácil que escribir regexpspara analizar registros de cadenas.

Laas
fuente
10
Ejemplo perfecto.
Florian Margaine
27

Si su máquina funciona tan cerca de sus límites que tales problemas realmente serían importantes, lo más probable es que tenga problemas más serios. Si bien puede haber situaciones excepcionales en las que esto hace alguna diferencia, muchas aplicaciones (tal vez la mayoría) se ejecutan en máquinas para las cuales la diferencia si registra JSON, texto simple o registros en una base de datos no importa en absoluto. Los objetos, las cadenas y otras conversiones deben hacerse en la mayoría de los casos de todos modos (a menos que registre binarios sin formato), tal vez no lo vea, porque usa clases predeterminadas que lo manejan en segundo plano (como si escribiera en una base de datos).

Si necesita evaluaciones de rendimiento para esto, deberá realizarlas usted mismo en la máquina en la que desea ejecutar su código y con el entorno de programación que utiliza todos los días. Si hay una gran sobrecarga o alguna depende de muchas cosas. Si escribe un sitio web en Ruby on Rails, por ejemplo, sus datos en la mayoría de los casos son hash, convertir eso a JSON le cuesta casi nada, ya que la representación interna no está muy lejos de lo que desea escribir (y es típico para que el código de Rails arroje objetos y estructuras de datos todo el tiempo).

Las ventajas dependen nuevamente de sus herramientas. Si tiene JSON integrado en sus bibliotecas, puede leerlo fácilmente y mostrarlo de alguna forma. Una vez más, como ejemplo: suponiendo que tuviera una interfaz de administración para su sitio web y quiera mostrar cierta información de registro almacenada en JSON, puede leer y mostrar esto como HTML en Ruby en una sola línea de código en algunos casos.

Thorsten Müller
fuente
1
Apuesto a que no te importa tirar microsegundos ...
Rhymoid
@ Rhymoid no, prefiero usar mi tiempo para resolver problemas reales.
thorsten müller
3
@Rhymoid Hay situaciones en las que tirar microsegundos es malo, seguro. También creo que el 99.9% de los programadores van a escribir código donde no es así. Por ejemplo, la mayoría de los frameworks web hacen más de lo que necesito, y eso tiene una sobrecarga. Pero, viene con un conjunto completo de pruebas y seguridad, además de que me ahorra cientos de horas codificándolo yo mismo. Por el costo adicional que mi compañía no gasta en construirlo desde cero, podrían financiar el doble del hardware si lo necesitaran (aunque probablemente también sea más rápido que cualquier cosa que yo pueda construir de todos modos ...) En última instancia, los microsegundos no importan.
corsiKa