Ver Mensaje Individual
  #13  
Antiguo 23-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por Angel Fernández Ver Mensaje
Volviendo a mi aplicación y contestando un poco a delphius (gracias también por tu valiosa aportación) sí podría hacer una tabla para humedad y temperatura porque los datos que recogen estos sensores son muy parecidos (rango de 0 a 100 en humedad, de 0 a 400 en temperatura en ºK. En cambio el dato de lluvia y encharcamiento es boleano sí/no por lo que también podría ponerlos en otra tabla juntos. Una sola tabla para todo, podría ser, pero sería un poco raro. Quizá dos tablas: una para temperatura y humedad y otra para lluvia y encharcamiento. Pero entonces se me plantea una cosa. ¿Es mejor una sola tabla con cientos de millones de datos o varias tablas con decenas de millones de datos? Me refiero mejor en cuanto a velocidad.
En cuanto a por qué guardar un dato cada minuto, en realidad es lo que están haciendo ahora mismo y lo están guardando en ¡ficheros de excel! Con 34000 datos el fichero va cojo y lento de narices. Evidentemente estos datos no se pueden manejar, simplemente guardar para tener un histórico. La idea es hacer consultas por hora y día, de los que extraer conclusiones y resultados más abordables.
Angel Fernández, por el tema Linux no puedo opinar, hay mentes entrenadas y sabias en el tema... yo quisiera exponer un poco de mi punto de vista.

Disculpa que lo diga, pero me resulta un poco de desperdicio estar ingresando información que es redundante. A lo que voy es que puedes implementar una regla del tipo:

Código Delphi [-]
If Dato.Humedad <> DatoAnterior.Humedad
   then begin 
            grabar(Dato.Humedad);
            DatoAnterior.Humedad = Dato.Humedad;
          end;

La explicación es simple: se compara el dato leído con el anterior (puede estar en una variable) y si son distintos guardarlos. El truco está entonces en que tu tabla guardará siempre y cuando se ha detectado un cambio (que no sea la hora claro está). Con esto consigues algo por el estilo:

HORA DATO
00:00 xxx
00:40 xxy

¿Que significa esto? que durante 40 min no se han detectado cambios.

Podrías diseñar tu sistema de manera que al migrar chequee las fechas y haga un análisis de los repetidos y te evitas la redundancia.
Es lo mismo tener esto:

00:00 xxx
...
00:39 xxx
00:40 xxy

Que tener esto:
00:00 xxx
00:40 xxy

¿Donde está el truco? En que se debe hacer una simple resta entre las horas para dectar los tiempos en que los datos han variado. Si se necesita saber los tiempos, dejaselo que te lo calcule, si fácilmente esa información puede ser "recuperada" a partir de otra. No se si me entiende...

La matemática es muy simple, y exacta.

Veamos con un ejemplo: supongamos que deseamos obtener el promedio de la temperatura de los primeros 6 minutos del día:
00:00 10
00:01 15
00:02 15
00:03 20
00:04 17
00:05 18
00:06 15

Promedio: (10+15+15+20+17+18+15)/6 = 18,33

Con la versión simplificada:
HORA DATO DIF_MIN
00:00 10 1 // la diferencia de min con el día anterior...
00:01 15 1
00:03 20 2 // 3-1
00:04 17 1
00:05 18 1
00:06 15 1

Promedio: (10x1+15x2+...+15x1)/6 = 18,33

Puede que te resulte complicado entenderme, pero si te fijas bien, el modelo "extendido" puede convivir con la versión "simplificada" si llevas ese campo DIF_MIN,

00:00 10 1
00:01 15 1
00:02 15 1
...
00:06 15 1

Y la matemática sigue cumpliendose... En teoría, no habría problemas en hacer convivir tus datos viejos con los nuevos (si es eso lo que te puede asustar). Por lo que las estadísticas y las operaciones que hagas no se verían afectadas por los repetidos.

Ahora tal vez tu me dirás, que deberá chequearse en la base de datos siempre el último valor... pero eso no es cierto, si no entendí mal nada impide que nos quedemos en alguna variable con los últimos datos cargados y allí mismo compararlos y hacer la carga de ser necesario. Y es en esta etapa cuando podemos hacer el cálculo de las diferencias, ya que contamos con dicha información.

Con esto te evitas tener que consultar la base de datos minuto a minuto y no haces lento al servidor al pedir que te haga esos cálculos de diferencia de minutos.

Realmente espero que se entienda mi idea.

Cuando se desee armar una consulta, se pueden hacer los ajustes para que los muestre como si siguieran trabajando con excel (si deseas), el truco aquí es trabajr gracias a ese dichoso campo DIF_MIN. Independientemente si se trata de una o 5 tablas, este esquema funciona.

Igualmente sigue haciendo falta análisis en el tema, pero creo que la idea está.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 23-02-2008 a las 01:42:22.
Responder Con Cita