2010-02-22 10 views
5

Tenemos varias opciones para iniciar sesión en nuestra aplicación de servidor .NET (C#). Vamos a usar Enterprise Library. Así que aquí están las formas de hacerlo:Comparación de rendimiento para iniciar sesión en MSMQ/archivo de texto/base de datos

1) Escribir el registro en MSMQ de forma síncrona, y luego leer MSMQ con Win Service. Queue está en la máquina local para la aplicación de servidor.
2) Escribir el registro en el disco (es decir, archivos de texto continuo) sincrónicamente.
3) Escribir el registro en la base de datos (Oracle, en nuestra aplicación) sincrónicamente.

El importe del registro puede ser bastante alto. Entonces, ¿cuál es el más eficiente? Supongo que ordenar es 1, 2, 3. ¿Tengo razón? ¿Hay algún otro factor de rendimiento, además de la velocidad de escritura, en este escenario específico? ¿Hay alguna otra opción, que no he señalado aquí, que podría ser una mejor manera?

Respuesta

4

Sin escuchar las necesidades de la aplicación en términos de registro:

Me da la sensación de que el escenario de registro MSMQ es un poco de un gran martillo para el problema.

MSMQ definitivamente será más rápido, ya que su aplicación utilizará un protocolo de comunicación de red en lugar de ocuparse de la latencia del disco y la creación de conexión DB & derribar. Sin embargo, dado que MSMQ usa el disco, la ganancia es probablemente insignificante. Entonces la pregunta es si esa cola de meta/destino de MSMQ está en la máquina local.

Stick que tenga el registro de disco

Considere la posibilidad de quedarse con el registro en un archivo en el disco con vuelcos apropiados (día/hora según sea necesario). Hay algunas soluciones si SÚPER está preocupado por las velocidades del eje: considere escribir esos archivos de registro en un disco RAM. Tenga entonces un proceso para copiar esos archivos fuera de la RAM y en el disco periódicamente como mejor le parezca.

medir el rendimiento Registro de Necesidades

Cue los chistes acerca de la optimización prematura. Mida y mida nuevamente. Simplemente no sabrá lo que necesita hasta que evalúe qué tan bien está funcionando su solución. Considere que es probable que tenga husillos de 10,000 rpm, y probablemente una solución de registro de disco funcione adecuadamente. Un poco de YAGNI podría entrar si la decisión es saltar a la solución compleja de un componente 'subcontratado' como MSMQ o una escritura de base de datos. Digo esto con sus necesidades indicadas en torno a la velocidad.

+0

Hola, gracias por la respuesta. Pregunta actualizada sobre "cola de meta/destino de MSMQ". – rovsen

1

Creo que debería considerar "Escribir registro en la base de datos de forma asincrónica". es decir, para cada elemento que desee registrar, colóquelo en la cola en la memoria y escríbalo por separado en la base de datos. No tiene sentido mantener la aplicación principal esperando a que finalice el registro siempre que el mecanismo de cola mantenga el orden de los mensajes de registro.

Además, ¿miró a log4net? Incluye numerosas opciones de registro que incluyen un potente registro giratorio en disco, registro UDP, ...

Es posible que también desee ver Splunk como una forma de buscar sus archivos de registro después de realizarlos.

1

Su clasificación de MSMQ, File y DB debe ser correcta en situaciones típicas.

Sé que está preocupado por el rendimiento, pero todavía tengo que encontrarme con un escenario en una aplicación de línea de negocio donde he lamentado el mecanismo de registro utilizado.Cuando se compara con la cantidad de tiempo dedicado a realizar la lógica comercial, el tiempo de registro no fue solo significativo.

Además, si realmente le preocupa el rendimiento, es posible que desee investigar otras opciones además de Enterprise Library. p.ej. log4net ha funcionado históricamente más rápido.

Además del rendimiento, también consideraría otros requisitos. p.ej. ¿Necesita informar o consultar en los registros? ¿Necesita un repositorio de registro central (o sería útil)? Si las respuestas a cualquiera de esas preguntas es afirmativa, entonces probablemente desee ir con una base de datos o MSMQ que alimente una base de datos.

Otras consideraciones pueden ser implementaciones o estándares existentes, complejidad general de la solución (MSMQ> archivo), compatibilidad de las diversas opciones (por ejemplo, puede que no desee utilizar MSMQ si no hay experiencia operativa).

Cuestiones relacionadas