AggOperator
description
Transcript of AggOperator
AggOperator
Query
TupleRouterMDBBufferC
RandomLPSR
QueryResult
Selperator
Tuple
TinyDBAttr TimerC
MainC
NetworkC
AttrGlobal
AttrTemp
AttrPot
AttrPhoto
AttrVoltage
AttrAccel
AttrMag
TinyAlloc
ParsedQuery
HistóricoM
AggOperator
Query
TupleRouterMDBBufferC
RandomLPSR
QueryResult
Selperator
Tuple
TinyDBAttr TimerC
MainC
NetworkC
AttrGlobal
AttrTemp
AttrPot
AttrPhoto
AttrVoltage
AttrAccel
AttrMag
TinyAlloc
ParsedQuery
ADMINISTRADOR DE HISTÓRICO
IAdministraciónH
HISTORICOMGrano : IntegerMAX_SIZE : uint16_tNUM: uint16_tCurritem: Registro
…
REGISTROepoch1: uint16_tepoch2: uint16_tlightVal: uint32_ttempVal: uint32_t
1 *
SENSORVariable : Dominio
solicitarEstado()
AdminHistoricoGrano : IntegerMAX_SIZE: uint16_t construir() insertar() agregar() recuperar()
TuplaVariable : DominioT : DateX : IntegerY : Integer
construir()
TupleRouterM
TimerC
fired()NetworkC
DBBufferC
RadioQueue
RAM
EEPROM
ADC Components
¿El atributo corresponde al histórico?
Insertar valor en el histórico
Sí
No
¿Atributo sin dato?
SíNo
Fin
…
1.2: Muestrear datos
1.3: Llenar tuplas
1.4:¿Agregar?
1.6: ¿Agregar?
1.5: Operador de selección
1.7: Operador de agregación
No Sí
Sí
No
1.1 Identificar consultas
D
1.2: Muestrear datos
1.3: Llenar tuplas e insertar
en histórico
1.4:¿Agregar?
1.6: ¿Agregar?
1.7: Operador de agregación
Epoch
No Sí
Sí
No
1.1 Identificar consultas
Arribo de resultados hijos
Nuevo mensaje de consulta
Fin
Crear representación compacta de consulta
¿Todos los mensajes?
No
Sí
Arribo de mensaje de consulta
Crear representación compacta de consulta
¿Todos los mensajes?
No
Sí
¿Identificador distinto de cero?
Encender variable de control
No
Sí
Crear tupla de resultado
¿Variable de control?
¿Idle?
¿Agregar?
…
1.3: Llenar tuplas e
insertar en Histórico
1.4:¿Agregar?
1.7: Operador de agregación
No Sí
2.1¿idle?
…
epoch
NoSí
1.5: Operador de selección
1.6:¿Radio?
Slots libres
Slots llenos
Slots llenos
Slots llenos
Slots libres
Slots libres
Siguiente libre
Siguienteocupado
Inicio
Siguiente lleno
Siguiente libre
Inicio
Muestrear datos
¿Agregar?
Evento de reloj
No
Procesar consultas
Entrega de tuplas
Llenar tupla
Arribo resultados hijos
Sí
¿Agregar?
Operador de Selección Operador de
Agregación
Sí¿Radio?
No
Epoch
1. Procesar consultas
2. Entrega de tuplas
Epoch
2.1¿Radio?
No
2.3¿Idle?
No
Sí
D
2.2 Guardar EEPROM
2.4 Enviar
Sí
2.1¿Radio?
No
2.4¿Idle?
No
Sí
D
2.2 Guardar EEPROM
2.6 Enviar
Sí 2.3¿Agregación?
2.5¿Variable
de control?
No
Sí
Sí
Muestrear datos
¿Agregar?
Evento de reloj
No
Procesar consultas
Entrega de tuplas
Llenar tupla
Arribo resultados hijos
Sí
¿Agregar?
Operador de Selección
Operador de Agregación
S
Muestrear
¿Agregar?
Evento de reloj
No
Procesar consultas
Entrega de tuplas
Llenar tupla
Arribo resultados hijos
Sí
¿Agregar?
Operador de Selección Operador de
Agregación
Sí¿Radio?
No
Nueva inserción
¿Grano == 1?
QB 1
Estación central
QB 3
QB 2
Luz
Luz
Luz
ADMINISTRADOR DE HISTÓRICO
IAdministraciónH
A.2: Muestrear datos
A.3: Llenar tuplas
C:¿Agregar?
¿Agregar?
C.2: Operador de selección
No
Sí
Sí
No
¿Resultados hijos?
¿Agregar?
uint8_t qid; //1uint8_t numFields; //2uint16_t epochDurationuint16_t clocksPerSample;int16_t clockCount; //11bool hasAgg:1; // -- are there aggregates in this querychar bufferType; //see Buffer.h:BufferType //25uint8_t bufferId; //26 -- output buffer id
qid numFields epochDuration clocksPerSample clockCount hasAgg bufferType
Red de sensores
Recolector AplicaciónPersistencia
Usuario Posición Fecha RetiroSr. López (3,5) 1/06/09 $200.00Sr. López (3,5) 5/06/09 $500.00Sr. López (4,2) 11/06/09 $100.00Sr. López (3,5) 20/06/09 $150.00Sr. López (9,6) 22/06/09 $120.00
Usuario Posición Fecha RetiroSra. López (4,2) 3/06/09 $100.00Sra. López (3,5) 5/06/09 $350.00Sra. López (4,2) 7/06/09 $450.00Sra. López (9,6) 22/06/09 $210.00
Posición Fecha Retiro Sr López Retiro Sra López(3,5) 1/06/09 $200.00 No hubo(3,5) 3/06/09 No hubo $350.00(3,5) 5/06/09 $500.00 $350.00(4,2) 7/06/09 No hubo $450.00(4,2) 11/06/09 $100.00 No hubo(3,5) 20/06/09 $150.00 No hubo(9,6) 22/06/09 $120.00 $210.00
CONSULTAqid: uint8_thasAgg: boolbuffType: uint16_t
EPOCH DURATIONVal :uint16_t
1 1
RELOJGrano: uint16_t
fireEvent()
clocksPerSamplekMIN : uint16_t
MCD()
*
1MENSAJE
field : Field
CONSULTAqid: uint8_thasAgg: boolbuffType: uint16_tED: uint16_t
MENSAJEfield : Field
* 1
TUPLA
EVENTOTime : uint32_t
RELOJ LÓGICOGrano: uint16_t
EPOCH
1
*
*
*
1
MOTE
CONSULTAqid: uint8_thasAgg: boolbuffType: uint16_tED: uint16_t
MENSAJEqid: uint8_tfield : Field
* 1
TUPLA RESULTADOnumFields : char
RELOJNow: Tiempo
setInterval()setTime()fire()
EPOCHT: Tiempo
iniciar()terminar()
1
*
1 1.. 65535
TIEMPOHigh32: uint32_tLow32: uint32_t
ESQUEMAqid: uint8_thasAgg: boolbuffType: uint16_tED: uint16_t
MENSAJEqid: uint8_tfield : Field
* 1
TUPLA RESULTADO
numFields : Char
RELOJNow: Tiempo
setInterval()setTime()fire()
EPOCHT: Tiempo
iniciar()terminar()
1
*
HISTORICOGrano: uint8_tMAX_SIZE: uint8_t
add()pack()
CONSULTAT: TiempoX: IntegerY: Integer
*
1
1
* 1
*1
1
ESQUEMAqid: uint8_thasAgg: boolbuffType: uint16_tED: uint16_t
MENSAJE
qid: uint8_tfield : Field
* 1
TUPLAnumFields : Char
RELOJNow: Tiempo
setInterval()setTime()fire()
EPOCH
T: Tiempo
iniciar()terminar()
1
*
HISTORICOGrano: uint8_tMAX_SIZE: uint8_t
CONSULTAT: TiempoX: IntegerY: Integer
*
1
ATRIBUTOName: StringValue: uint16_t
1
*
1
*1
1
CONSULTAqid: uint8_thasAgg: boolbuffType: uint16_tED: uint16_t
MENSAJE
qid: uint8_tfield : Field
* 1
TUPLAnumFields : Char
RELOJNow: Tiempo
setInterval()setTime()fire()
EPOCH
T: Tiempo
iniciar()terminar()
1
*
ATRIBUTOName: StringValue: uint16_t
1
*
*1
*
1
QueryProcessor
RadioQueue
TupleRouterM
AggOperator
Query DBBufferC
RandomLPSR
QueryResult
SelperatorTupleTinyDBAttr
TimerC
NetworkC
AttrGlobal TinyAlloc
ParsedQuery
1 2 3 … 65,535 …
ED [1,650000]
NetworkC
newMessage()
TupleRouterM
queryMessage()
Query
query
ParsedQuery
crear()
crear()
parsedQuery
Tuple
crear()
tuple
TimerC TupleRouterM
newEpoch()
TinyDBAttr
dato
Tuple
a: muestrear()
b: llenarAtributo()
llenado
{ b.Ejecución = por cada atributo}
{ a.Ejecución = por cada atributo}
SelOperator
procesarTupla()
procesada
iniciado
TimerC TupleRouterM
newEpoch()
TinyDBAttr
dato
Tuple
a: muestrear()
b: llenarAtributo()
llenado
{ b.Ejecución = por cada atributo}
{ a.Ejecución = por cada atributo}
AggOperator
procesarTupla()
NetworkC
newResult()
agregar()recibido
TimerC TupleRouterM
newEpoch()
QueryResult
creado
DBBuffer
crear()
encolar()
transmitido
NetworkC
transmitir()
transmitido
endOfEpoch()
iniciado()
terminado