Procesos Batch en net

133 views
Skip to first unread message

Carina

unread,
May 29, 2014, 3:07:59 PM5/29/14
to altnet-...@googlegroups.com
Estimados,

Queria saber su opinion respecto a una aplicacion que consiste en un webservice que mediante Remoting procesa archivos (con > 45000). La versión de visual studio es 2003. Entiendo que en su momento .Net Remoting era una de las mejores alternativas.

Investigando encontré que esto también se podría realizar mediante Servicios de Windows o WCF.

Mi limitación es que la máxima versión en la que puedo desarrollar es visual studio 2008
Con respecto al acceso a  base de datos existe un limite tambien ya que se solicita no usar linqtosql ni entity  framework y con lo cual solo me queda sqlreader.

Podrán guiarme con respecto a que tecnología seria la mas adecuada para el procesamiento de archivos ??
Y teniendo en cuenta sqlreader existe alguna libreria que pueda aplicar?

Desde ya muchas gracias.-

PD: La aplicación en Visual Studio 2003 no llega a procesar los 45000 registros y se trunca el archivo en 10000.




Oscar Zárate

unread,
May 29, 2014, 5:36:17 PM5/29/14
to altnet-...@googlegroups.com
Y tenes que aceptar el proyecto? :-S


--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Fernando Pelliccioni

unread,
May 29, 2014, 5:56:01 PM5/29/14
to altnet-...@googlegroups.com
Perdón, pero no entiendo algo:  son archivos, base de datos, información via socket, o, todo junto?


Alejandro Ivan Fraenkel

unread,
May 29, 2014, 6:15:07 PM5/29/14
to altnet-...@googlegroups.com

Por lo que decis carina me estoy imaginando que estas enviando y recibiendo archivos por medio de remoting, a medida que recibis al archivo procesas o no los registros quiza metiendole algo de logica del negocio y persistis objetos en base de datos. O recibis a todo el archivo, procesas y mandas a la db.

Es asi? Esto es en tiempo real o pueden ser procesos batch que procesan a los archivos? Porque no manejar la transferencia de datos con un sftp y despues vas procesando a los archivos a medida que llegan, o alguna otra solucion mas sencilla. Con muy poco trabajo podrias tener algo implementado para empezar a medir y laburar en el refactor hasta llegar a una solucion que rinda. Tenes libertad de proponer el diseño vos?

Mi experiencia aislada con remoting es que hace años trabaje en un proyecto que transferiamos entre dos puntos gran volumen de objetos muy livianos y era mas que performante. Hoy yo lo encararia con wcf si fuera el caso. Visual studio 2008 y tener que trabajar derecho con ado.net creo que no seria un problema. De hecho creo que lograrias mejorea resultados en cuanto al rendimiento respecto a linqtosql o entityframework, vas a tener la posibilidad de controlar vos como hablas con la base de datos, prestale atencion a la concurrencia y manejo de error. Hace años estos problemas se resolvian sin todo el tooling y apis que hay hoy asi que seria cuestion de buscarle la vuelta.

Podes contar un poco mas de que se trata esto o como seria un caso de negocio?

AF

Juan Nallar

unread,
May 30, 2014, 9:05:59 AM5/30/14
to altnet-...@googlegroups.com
Si es para procesar batch, no uses ningún ORM., ADO.NET limpito te dá la major performance.
Concuerdo con la gente de antes, necesitamos un poco mas de información. yo separaría el problema en 2 partes (para empezar)
1) El envío/recepción de archivos.
      Es interno o vía web?
      Quedarían en el mismo servidor que los puede procesar, o en otro lado (considerando permisos)?
 
Dependiendo de ésto vas a definer la tecnología: Web API, web services, WCF, remoting o sockets
     
2) El procesamiento de los mismos.
     Definitivamente usaría un servicio windows, conectado a la base de datos con ADO.NET
 
 
Saludos.
 
 

Carina Correjidor

unread,
May 30, 2014, 9:50:09 AM5/30/14
to altnet-...@googlegroups.com

Muchas gracias por todas las opiniones. Paso a detallar lo que es la logica de negocios:

Básicamente todos los días un sistema externo deja en carpetas especificas archivos txt a procesar.

La aplicación actual (se lanza de una pagina de procesos) ejecuta via remoting el proceso de estos archivos y genera como salida archivos de resultado. El motor de base de datos es Sql Server.

Actualmente el proceso de estos archivos cuando supera la cantidad de 45000 registros se tilda y no continua por lo cual hay que particionar el archivo txt en 10000 registros.Ademas tiene incorporado un framework propio de la institución(para acceso a datos).

La idea es hacer una reingenieria de este proceso teniendo en cuenta que la ultima version homologada es Visual Studio 2008 y Sql Server 2008.

Leyendo muchas de las opiniones me estan guiando para lograr algo mas estable. Desde ya muchas gracias.

Jorge González

unread,
Jun 3, 2014, 5:01:32 PM6/3/14
to altnet-...@googlegroups.com

En realidad no veo mucha relación entre la versión del visual studio con el proceso de archivos. Básicamente lo que necesitas es hacer un servicio que este escuchando los directorios y una vez que pongan los archivos procesarlos. Ahora bien, el tema de procesar grandes cantidades de información es un tema interesante porque, lo más seguro que está pasando con el sistema que tienen actual es que carga el archivo en memoria y ahí es donde el rendimiento se pierde.


Habría que ver bien los requerimientos pero lo más practico es abrir el archivo u procesarlo línea por línea o por bloques, de esa manera garantiza que no se monte el archivo completo más bien lo hacen interactivo.


Otro método es tomar el archivo y pasarlo a una tabla de SQLServer y de ahí procesarlo o también puedes usar algo de (SQL BULK INSERT)


Si pudieras usar .NET 4.0 investiga (System.IO.MemoryMappedFiles)


http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile.aspx


También puedes ver algo de (System.IO.TextReader.ReadBlock)


http://msdn.microsoft.com/en-us/library/system.io.textreader.readblock.aspx


Lo anterior es si el tiempo de procesamiento no es crítico, si necesitan procesar con mucha velocidad si hay que ver un poco más sobre procesos múltiples, eso es un poco más complicado pero igual se puede hacer.


Saludos Jorge Eldis

Carina Correjidor

unread,
Jun 3, 2014, 5:06:43 PM6/3/14
to altnet-...@googlegroups.com
Muchas Gracias Jorge. Me leiste el pensamiento. Por el tema de performance justamente estuve realizando pruebas pasando  los archivos a tablas para aplicar luego todo la logica por stored procedures.

Lo que probe con bulk es algo asi:

BULK INSERT cabecera
FROM 'C:\SEGCAB_20140131_25277639.txt'
WITH
(
   FIELDTERMINATOR = '|',
   ROWTERMINATOR = '\n'
);

A esto te referias?
Saludos.

Carina Correjidor

Jorge González

unread,
Jun 3, 2014, 5:11:12 PM6/3/14
to altnet-...@googlegroups.com

Exacto, esa es una posibilidad, habría que analizar el escenario para ver si es conveniente o no usar este método, por mi experiencia, funciona bien. Como te comentaba en el mensaje anterior todo depende de los requerimientos que están necesitando en el proceso del archivo. Si sigues teniendo problemas no dudes en escribir a ver cómo le damos la vuelta a eso.


Jorge Eldis

Alberto Arroyo Raygada

unread,
Jun 4, 2014, 9:59:04 AM6/4/14
to altnet-...@googlegroups.com
Hola en nuestros proyectos venimos usando con éxito http://www.quartz-scheduler.net/ , te recomiendo le des una mirada al framework, que apoyado a todas las recomendaciones te puede ir muy bien.
Alberto Arroyo Raygada
Desarrollador de Software
Sitio Web: http://www.cslanet.org
Celular: (511) 99752-5257


Reply all
Reply to author
Forward
0 new messages