Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2008
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 21
Angel Fernández Va por buen camino
Muchas gracias Luis por tu ofrecimiento, muy amable. Lo que ocurre es que la tabla es propiedad de mi cliente que, aunque aún no me ha pagado, no estoy seguro de que le gustara la idea.

Puedo explicar un poco de qué va: Dado que se recoge un dato cada minuto esto supone una cantidad inmensa de datos. Se estudiaron varias posibilidades, tomar la media cada 5 minutos, cada 10, etc. pero al final se decidió tomar todos los datos y si luego sobraban mejor que si faltaban.

He creado unos índices para luego agrupar los datos cada hora por ejemplo. La tabla tiene una columna que le llamo HORA_INT y que convierte la fecha y hora en un formato integer tal que así:

Fecha: 01/01/2008 Hora: Entre 10:00 y 10:59 --> Columna HORA_INT= 2008010110
Fecha: 01/01/2008 Hora: Entre 11:00 y 11:59 --> Columna HORA_INT= 2008010111
etc.

Esta columna tiene un índice.

Con un campo calculado obtengo un dato "Rango de tiempo" que por ejemplo, HORA_INT=2008010110 lo convertiría en "De 10:00 a 10:59"
Con un proceso similar, tengo varios índices: DIA_INT, SEMANA_INT, 5MINUTOS_INT, ETC. Así, si quiero un dato cada día por ejemplo, agrupo los datos por días obteniendo la media, el máximo y el mínimo.

Fecha Rango de Tiempo Sensor Media Máximo Mínimo
-------------------------------------------------------------
01/01/2008 De 10:00 a 10:59 01 15.00 16.00 14.00
01/01/2008 De 11:00 a 11:59 01 16.00 16.00 14.00
01/01/2008 De 12:00 a 12:59 01 17.00 16.00 14.00
01/01/2008 De 13:00 a 13:59 01 18.00 16.00 14.00

etc.


Con estos índices obtengo algo que yo entiendo como "razonablemente rápido". Una consulta en un rango de fechas de 3 meses, para 31 sensores, agrupados por hora, tarda algo menos de 2 minutos y devuelve 40.000 registros con los que elaboro un gráfico. Mi ordenador es un amd a 3000, mononúcleo con 2,5 GB de ram con win xp sp2.

Para elaborar el gráfico me iría bien saber qué sensores no tienen ningún dato en el rango de fechas de la consulta.

En fín, espero haberme expresado bien.

Un saludo.
Responder Con Cita
  #2  
Antiguo 21-10-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Con que componentes trabajas??? es que 2 ó 3 minutos en una consulta es un tiempo muy largo..... yo por ejemplo he llegado a tener (y se que no es tan alto como el volumen que maneja) clientes con tablas que superan los 2 millones y los resultados de velocidad son similares a cuando hay pocos datos...
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #3  
Antiguo 21-10-2008
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 21
Angel Fernández Va por buen camino
Cita:
Empezado por RONPABLO Ver Mensaje
Con que componentes trabajas??? es que 2 ó 3 minutos en una consulta es un tiempo muy largo..... yo por ejemplo he llegado a tener (y se que no es tan alto como el volumen que maneja) clientes con tablas que superan los 2 millones y los resultados de velocidad son similares a cuando hay pocos datos...
Utilizo los componentes FIBPLUS. La consulta la lanzo desde desde un FIBDATASET. Realmente, lo que más tiempo lleva es cuando hay que agrupar por hora, día, etc y tiene que calcular medias, máximos y mínimos.

¿Qué componentes utilizas tú? Desde luego estoy muy interesado en la velocidad.
Responder Con Cita
  #4  
Antiguo 21-10-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Pues yo utilizó unos que deben de correr más lento que los tuyos... los MDOLib ya que tiene mucho tiempo sin actualizar....

Descarga algún programa para analizar las consultas y mira que te dice, si de verdad está usando los indices que quieres... Yo uso uno llamado DataBase WorkBench, tiene una versión trial, con ella podrás mirar los análisis de las consultas.... y hay otros que te pueden servir...
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #5  
Antiguo 24-10-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Cita:
Empezado por Angel Fernández Ver Mensaje
...Para elaborar el gráfico me iría bien saber qué sensores no tienen ningún dato en el rango de fechas de la consulta....
Quizás para ese resultado te vendría bien una consulta con EXISTS:

Código SQL [-]
Select *
from CatSensores CS
where not exists(
select *
from tablasensores TS
where TS.IDSENSOR = CS.IDSENSOR
and fecha between fecha1 and fecha2)

tambien opino que podrías utilizar una tabla "temporal" para vaciar los resultados de tu primer consulta y trabajar con esos datos.

Espero que en algo te sea de ayuda. Saludos
Responder Con Cita
  #6  
Antiguo 25-10-2008
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 21
Angel Fernández Va por buen camino
Gracias boreg por tu ayuda.

Sin embargo, el problema es que lanzar una segunda consulta haría lento el proceso (la primera consulta tarda entre 1 y 2 minutos).

Y lo de la tabla temporal tendría que recorrer todos los datos y también sería lento (en ocasiones, la consulta me devuelve varias decenas de miles de resultados).

En realidad lo de la tabla temporal es algo que me llama la atención desde hace tiempo pero que no llego a utilizar bien del todo. A veces he usado la memorytable de las rxlib pero es muy lento porque hay que recorrer todos los datos de la consulta, no acepta un dataset como origen de datos.
¿Hay algún componente de tabla temporal que recoga los resultados de un dataset?

Un saludo.
Responder Con Cita
  #7  
Antiguo 03-11-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Código SQL [-]
select first 1 fecha, hora, dato
from tablasensores
where fecha between fecha1 and fecha2 and sensor = 1
union
select first 1 fecha, hora, dato
from tablasensores
where fecha between fecha1 and fecha2 and sensor = 2
union
select first 1 fecha, hora, dato
from tablasensores
where fecha between fecha1 and fecha2 and sensor = 3

Pruba con algo asi. Y sando case o luego lansas la consulta sobre esta misma conculta o usando with.

No tomen esta consulta a ala ligera hay varias consultas. pero se esta usando first 1 Aqui hay muchos beneficios.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #8  
Antiguo 06-11-2008
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 21
Angel Fernández Va por buen camino
Gracias rastafarey.

Tu código tiene buena pinta. Ya lo pruebo a ver qué tal.

Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como saber numero de registros de una tabla usando un clientdataset? acl_gandalf Conexión con bases de datos 11 26-06-2023 19:09:19
Saber el número de registros llenos en un campo mmmbopzombie Tablas planas 2 28-11-2005 09:54:31
Query, como saber el numero de Registros ? Pascual Montes Conexión con bases de datos 5 09-12-2004 17:14:17
Saber cuantos registros origino la consulta JorgeBec SQL 1 12-11-2004 16:48:17
Saber el numero de registros consultados estudiante SQL 2 13-05-2003 00:12:09


La franja horaria es GMT +2. Ahora son las 16:37:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi