Foros del Web » Programando para Internet » ASP Clásico »

Paginando 4 millones de registros

Estas en el tema de Paginando 4 millones de registros en el foro de ASP Clásico en Foros del Web. hola, bueno me acabo de registrar para poder empezar a participar de este foro ya que me encuentro con un problema... necesito paginar 4 millones ...
  #1 (permalink)  
Antiguo 20/10/2009, 09:42
 
Fecha de Ingreso: octubre-2009
Mensajes: 3
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta Paginando 4 millones de registros

hola, bueno me acabo de registrar para poder empezar a participar de este foro ya que me encuentro con un problema...

necesito paginar 4 millones de registros, lo estoy haciendo hoy en dia pero para un resultado optimo necesito un servidor mas o menos bueno, en un pc normalito me da muchas veces un time out...

entonces buscando soluciones primero pense en traer solo los rangos que necesito en la sentencia sql . pero la base de datos no cuenta con identificador o algo que me diga de donde a donde hacer los cortes...

en internet encontre que se podria hacer una tabla virtual donde cada ves que se ingrese a la pagina esta cree una tabla virtual con un id autonumerico, esto hecho con un procedimiento de almacenado, con esta tablita yo podria saber que registros traer para cada rango de la paginacion, espero haberme explicado bien.

mi pregunta es alguien ha hecho algo parecido? creen que funcione? al hacer la tabla virtual con 4 millones de registros sera mucho el uso de ram o de recursos del pc... de ante mano gracias.

y los mas importante algomejor ya esta hecho y esta por ahí el codigo ... jeje gracias nos vemos.
  #2 (permalink)  
Antiguo 20/10/2009, 10:20
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Paginando 4 millones de registros

Estarás de acuerdo que a ningún usuario le sirven 4 millones de registros en pantalla, esta tabla, si está normalizada, debe tener algo que te permita hacer filtros (fechas, clientes, tipos, etc).

Definiendo el criterio de filtro, el servidor se tardará menos en traer lo registros y por ende en hacer la extracción de las páginas. La verdad nunca me he molestado por investigarlo pero deduzco que, para que en realidad tenga sentido la propiedad pageSize, esta debe de pedirle solo esos registros al servidor de BD, aunque si se trae todos al IIS y este hace el corte de registros el paginar no te evitaría el timeOutError, esto debiéramos de verificarlo en alguna API.

Independientemente de lo que se encontrara de la duda de arriba, lo que pudieras hacer es definir un paginado a nivel de base de datos, dependiendo de la que utilices podrás hacer “más o menos nativamente” (LIMIT en firebird, ROW_NUMBER() en SQL 2005, etc)

Otra forma “más tosca” es generar un autonumérico y usar este ID como criterio para los registros a extraer.


Saludos
  #3 (permalink)  
Antiguo 20/10/2009, 10:56
 
Fecha de Ingreso: octubre-2009
Mensajes: 3
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Paginando 4 millones de registros

el definir criterios tambien podia ser una buena opcion, pero no se me dio la posibilidad de esto, ya que en algun momento podria darse el caso de que la consulta traiga los 4 millones de registros.

recien vino un familiar y dio esta posibilidad:

DECLARE @lastoffset int,@page int, @limit int, @offset int
SELECT @page = 1
SELECT @limit = 15
SELECT @offset = ((@page-1)*@limit)
SELECT @lastoffset = @offset+1
SET ROWCOUNT @lastoffset
DECLARE @FECHA VARCHAR(18)
SELECT @FECHA = CONVERT(VARCHAR,FECHA,102) + RIGHT(REPLICATE('0', 8) + CAST(ID_AUD AS VARCHAR(8)), 8) FROM auditbd ORDER BY CONVERT(VARCHAR,FECHA,102) + RIGHT(REPLICATE('0', 8) + CAST(ID_AUD AS VARCHAR(8)), 8) DESC
SET ROWCOUNT @limit
SELECT * FROM auditbd WHERE CONVERT(VARCHAR,FECHA,102) + RIGHT(REPLICATE('0', 8) + CAST(ID_AUD AS VARCHAR(8)), 8) <= @FECHA ORDER BY CONVERT(VARCHAR,FECHA,102) + RIGHT(REPLICATE('0', 8) + CAST(ID_AUD AS VARCHAR(8)), 8) DESC;


aca la misma sentencia me envia ya los datos paginados.
en breves instantes comento como me fue con la consulta.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:08.