Pregunta

Bien, aquí está el escenario.Tengo una utilidad que procesa toneladas de registros e ingresa información en la base de datos en consecuencia.

Funciona con estos registros en lotes de subprocesos múltiples.Cada uno de estos lotes escribe en el mismo archivo de registro para crear un seguimiento del flujo de trabajo para cada registro.Potencialmente, podríamos realizar cerca de un millón de escrituras de registros en un día.

¿Debería este registro convertirse en una base de datos que resida en otro servidor?Consideraciones:

  1. La desventaja obvia de que varios subprocesos escriban en el mismo archivo de registro es que los mensajes de registro se mezclan entre sí.En la base de datos, se pueden agrupar por ID de lote.
  2. Rendimiento: ¿qué ralentizaría más el procesamiento por lotes?escribir en un archivo local o enviar datos de registro a una base de datos en otro servidor en la misma red.En teoría, el archivo de registro es más rápido, pero ¿hay algún problema aquí?

¿Existe alguna optimización que se pueda realizar en cualquiera de los enfoques?

Gracias.

¿Fue útil?

Solución

Apoyo las otras respuestas aquí, Depende de lo que estés haciendo con los datos..

Tenemos dos escenarios aquí:

  1. La mayor parte del registro se realiza en una base de datos, ya que los usuarios administradores de los productos que creamos deben poder verlos en su pequeña y agradable aplicación con todas las comodidades.

  2. Registramos todos nuestros diagnósticos y la información de depuración en un archivo.No tenemos necesidad de "embellecerlo" realmente y, para ser honesto, ni siquiera lo necesitamos con frecuencia, por lo que simplemente registramos y archivamos en su mayor parte.

Yo diría que si el usuario está haciendo algo con él, inicie sesión en la base de datos; si es para usted, entonces un archivo probablemente será suficiente.

Otros consejos

La pregunta interesante, si decide iniciar sesión en la base de datos, es ¿dónde registra los errores de conexión de la base de datos?

Si inicio sesión en una base de datos, siempre tengo una ubicación de registro secundaria (archivo, registro de eventos, etc.) en caso de que haya errores de comunicación.Realmente facilita el diagnóstico de problemas más adelante.

Una cosa que me viene a la mente es que podría hacer que cada hilo escriba en su propio archivo de registro y luego realizar una ejecución por lotes diaria para combinarlos.

Si está iniciando sesión en una base de datos, probablemente necesite realizar algunos ajustes y optimización, especialmente si la base de datos estará a través de la red.Al menos necesitarás reutilizar las conexiones de base de datos.

Además, ¿tiene alguna necesidad específica de tener la base de datos de inicio de sesión?Si todo lo que necesita es un "grep", entonces no creo que gane mucho iniciando sesión en la base de datos.

No estoy seguro si ayuda, pero también hay una utilidad llamada Microsoft LogParser que supuestamente puedes usar para analizar archivos de registro basados ​​en texto y usarlos como si fueran una base de datos.Desde el sitio web:

Log Parser es una herramienta poderosa y versátil que proporciona acceso de consulta universal a datos basados ​​en texto, como archivos de registro, archivos XML y archivos CSV, así como fuentes clave de datos en el sistema operativo Windows®, como el registro de eventos, el registro, el registro, el registro, el registro, el registro, el registro, el registro, el registro, El sistema de archivos y Active Directory®.Usted le dice a Log Parser qué información necesita y cómo desea procesarse.Los resultados de su consulta se pueden formular personalizados en la salida basada en texto, o pueden persistir a objetivos más especializados como SQL, Syslog o un gráfico.La mayoría del software está diseñado para lograr un número limitado de tareas específicas.Log Parser es diferente ...El número de formas en que se puede usar es limitado solo por las necesidades e imaginación del usuario.El mundo es su base de datos con Log Parser.

Yo no he usado el programa, ¡pero parece bastante interesante!

¿O qué tal iniciar sesión en una cola?De esa manera, puede cambiar los encuestadores cuando desee iniciar sesión en cosas diferentes.Hace que cosas como transferir y archivar archivos de registro sean muy fáciles.También es bueno porque puedes agregar encuestadores que registren diferentes cosas, por ejemplo:

  • un encuestador que busca mensajes de error y los publica en su cuenta FogBugz
  • un encuestador que busca violaciones de acceso ('x intentó acceder a /foo/y/bar.html') a un archivo de 'intentos de piratería'
  • etc.

Base de datos: ya que mencionaste varios hilos.La sincronización y la recuperación filtrada son los motivos de mi respuesta.
Vea si tiene un problema de rendimiento antes de decidir cambiar a archivos
"Knuth:La optimización prematura es la raíz de todos los males" No llegué más lejos en ese libro...:)

Hay formas de solucionar las limitaciones del registro de archivos.

Siempre puede iniciar cada entrada de registro con una identificación de subproceso de algún tipo y extraer las identificaciones de subprocesos individuales.O un archivo de registro diferente para cada hilo.

Inicié sesión en la base de datos en el pasado, en un hilo separado con una prioridad más baja.Debo decir que la capacidad de consulta es muy valiosa cuando intentas descubrir qué salió mal.

¿Qué tal iniciar sesión en un archivo de base de datos, digamos una base de datos SQLite?Creo que puede manejar escrituras de subprocesos múltiples, aunque eso también puede tener sus propios gastos generales de rendimiento.

Creo que depende en gran medida de lo que hagas con los archivos de registro después.

De las dos operaciones, escribir en el archivo de registro será más rápido, especialmente porque sugiere escribir en una base de datos en otro servidor.

Sin embargo, si luego intenta procesar y buscar los archivos de registro de forma regular, el mejor lugar para hacerlo sería una base de datos.

Si utiliza un marco de registro como log4net, a menudo proporcionan formas simples basadas en archivos de configuración para redirigir la entrada a un archivo o base de datos.

Me gusta la respuesta de Cayo.Coloque todas las declaraciones de registro en una cola segura para subprocesos y luego procéselas desde allí.Para DB, puede agruparlos, digamos 100 declaraciones de registro en un lote y, para archivos, puede simplemente transmitirlos al archivo a medida que ingresan a la cola.

¿Archivo o base de datos?Como dicen muchos otros;Depende de para qué necesite el archivo de registro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top