Gran volumen Datos SELECT - ADO.NET

09/11/2005 - 14:31 por Maribel Quirós | Informe spam
Buenas Tardes,

Tengo un problema con el acceso a datos y posterior tratamiento en una
aplicacion de escritorio realizada con .net.

¿ 100.000 registros son muchos para tratarlos en un DATATABLE. ?

es que he probrado de realizar la consulta con DataReader (modo conectado) y
con el DataAdapter (para rellenar el DataTable en modo desconectado) y en los
2 tarda muchisimo.

En teoria, el DataReader trabaja en la Base de Datos NO ??? como es que
tarda tanto?? es como si me los exportara de golpe ...¿PUEDE SER?

La Base de Datos es INFORMIX y se encuentra en un servidor. Actualmente
accedo a los datos a través de ODBC.

Yo trabajo con la version del Visual Studio 2002.

NO SE QUE MÁS PUEDO DETALLAR. ¿Alguien me podría ayudar?
¿Cual es la mejor manera de tratar un gran volumen de datos?
¿Con la version de ADO.NET 2.0 esto mejoraria?

Gracias.
Maribel Quirós Carrero

Preguntas similare

Leer las respuestas

#6 Jesús López
10/11/2005 - 22:17 | Informe spam
Lo mejor sería que fuera el servidor (INFORMIX) el que hiciera los cálculos
y devolviera los resultados (esos 2000 registros), en vez de traerse los
100.000 registros al cliente y hacer los cálculos ahí. Ninguna tecnología de
acceso a datos hasta el momento resuelve el problema de la lentitud de carga
de 100.000 registros leídos por el gestor de base de datos y enviados a
través de la red. Los servidores de base de datos tienen una gran capacidad
de procesamiento que hay que aprovechar, no deberían utilizarse como un
simple almacén de datos. Seguro que el SQL de informix es capaz de realizar
gran parte de los cálculos, si no todos. En caso de que INFORMIX carezca de
la capacidad para realizar los cálculos, seguramente será capaz de hacer un
precálculo inicial de manera que devuelva una cantidad menor de registros al
cliente, y el cliente termine de realizar esos cálculos que el servidor no
es capaz de hacer.

Si nos dices cuales son exáctamente los cálculos que han de realizarse,
seguramente te podríamos orientar mejor. Pero lo que está claro es que de
cualquier manera, con cualquier gestor de base de datos, con cualquier
lenguaje de programación y con cualquier tecnología de acceso a datos,
traerse 100.000 registros al cliente para procesarlos y obtener unos
resultados, siempre, siempre, siempre será lento.

Saludos:

Jesús López
MVP


"Maribel Quirós" escribió en el
mensaje news:
Buenos Días,

Los 100.000 registros proceden de una select y los necesito para realizar
una serie de cálculos, realmente el usuario no verá estos registros sino
el
resultado del cálculo (unos 2000 registros aproximadamente). No sé, pero
la
paginación creo que sirve cuando lo muestras al usuario en un datagrid. Yo
realmente los necesito todos porque hay condiciones en este calculo en el
que necesito agruparlos...

Probaré de ejecutar la select por separado, pero aún no entiendo como el
datatable se vuelve tan lento a la que hay muchos registros. He leido en
un
artículo que ADO.NET 2.0 soluciona este incoveniente, con lo que supongo
que
ADO.net 1.X tiene ese problema.

¿Hay alguna manera de incorporar la tenconologia de ADO.net 2.0 en Visual
Studio 2002?, Se que está incorporado en el Visual Studio 2005. Quizás esa
sea la solución.


Gracias,
Maribel Quirós Carrero

"Eduardo A. Morcillo [MS MVP VB]" escribió:

No me queda claro algo, los 100000 registros los tienes en el datatable o
es
la cantidad de registros que tiene la tabla en la BD? Si es lo primero lo
que deberias hacer es filtrar o paginar los registros para no cargar
tanto
el datatable (ningun usuario va a estar recorriendo semejante cantidad de
registros).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C



Respuesta Responder a este mensaje
#7 SDA
12/11/2005 - 23:24 | Informe spam
"Maribel Quirós" escribió en el
mensaje news:
Buenas Tardes,

Tengo un problema con el acceso a datos y posterior tratamiento en una
aplicacion de escritorio realizada con .net.



Tengo un problema parecido al de Mabel pero con SqlServer. Tengo que
mostrar en un datagrid datos de una tabla de clientes, a medida que el
usuario se va desplazando sobre el mismo en la segunda parte de la pantalla
se van cambiando los valores de campos de texto, check boxes, combo boxes,
etc. ligados con databinding al mismo dataview que sirve de fuente al
datagrid.

La diferencia es que la persona que diseñó originalmente la aplicación carga
en el dataset todas las tablas que tienen alguna relación con la tabla
clientes, de tal manera a mostrar las descripciones de los códigos FK
almacenados en la tabla clientes. Vale decir, en el dataset están la tabla
de clientes (que tiene poco más de 16mil registros) y por lo menos otras 10
tablas (que solo tienen el codigo PK, una descripción y pocos registros).

Esto ocasiona un terrible problema de performance, y no puedo usar la
paginación en el datagrid porque según la página de Microsoft
(http://support.microsoft.com/?scid=kb;es;305271#4) esa técnica no se puede
utilizar cuando existen tablas relacionadas en el formulario al mismo
tiempo.

Cuál sería la solución óptima para este caso ?

Desde ya, muchas gracias.

Salu2,

JL
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida