AggOperator Query TupleRouterM DBBufferC RandomLPSR QueryResult Selperator Tuple TinyDBAttr TimerC MainC NetworkC AttrGlobal AttrTemp AttrPot AttrPhoto AttrVoltage AttrAccel AttrMag ADC Components TinyAlloc PotC GenericComm ParsedQuery AdminHistórico
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.4: ¿Agregar? 1.6: ¿Agregar? 1.5: Operador de selección 1.7: Operador de agregación Epoch NoSí No 1.1 Identificar consultas Arribo de resultados hijos D D
1.2: Muestrear datos 1.3: Llenar tuplas e insertar en histórico 1.4: ¿Agregar? 1.4: ¿Agregar? 1.6: ¿Agregar? 1.5: Operador de selección 1.7: Operador de agregación Epoch NoSí No 1.1 Identificar consultas Arribo de resultados hijos D D
Arribo de mensaje de consulta Fin Crear representación compacta de consulta ¿Todos los mensajes? No Sí Arribo de mensaje de consulta Fin Crear representación compacta de consulta ¿Todos los mensajes? No Sí ¿Identificad or distinto de cero? Encender variable de control No Sí
¿Variable de control? ¿Idle? ¿Agregar? …
1.3: Llenar tuplas e insertar en Histórico 1.3: Llenar tuplas e insertar en Histórico 1.4: ¿Agregar? 1.4: ¿Agregar? 1.7: Operador de agregación NoSí 2.1 ¿idle? 2.1 ¿idle? … epoch No Enviar No Sí 1.5: Operador de selección 1.6: ¿Radio? 1.6: ¿Radio?
Slots libres Slots llenos Slots libres Siguiente libre Siguiente ocupado Inicio Siguiente lleno Siguiente libre Inicio
Muestrear datos ¿Agregar? Guardar EEPROM Guardar EEPROM 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 ¿Idle? No Sí Enviar
Epoch 1. Procesar consultas 2. Entrega de tuplas
Epoch 2.1 ¿Radio? 2.1 ¿Radio? No 2.3 ¿Idle? 2.3 ¿Idle? No Sí D D 2.2 Guardar EEPROM 2.4 Enviar Sí
Epoch 2.1 ¿Radio? 2.1 ¿Radio? No 2.4 ¿Idle? 2.4 ¿Idle? No Sí D D 2.2 Guardar EEPROM 2.6 Enviar Sí 2.3 ¿Agregación? 2.3 ¿Agregación? 2.5 ¿Variable de control? 2.5 ¿Variable de control? No Sí No
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 No S S
Muestrear ¿Agregar? Guardar EEPROM/RAM 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 ¿Idle? No Sí Enviar
Nueva inserción ¿Grano == 1?
PC QB1 Light QB2 Temp QB líder QB líder QB3 Light QB4 Temp QB5 Light QB6 Temp Mote 1 Mote 2 Mote 3 QB líder QB líder QB líder QB líder
ADMINISTRADOR DE HISTÓRICO IAdministraciónH
D.1: ¿Radio? D.1: ¿Radio? Guardar EEPROM/RAM F: ¿Idle? F: ¿Idle? Enviar Sí No SíNo A.2: Muestrear datos A.3: Llenar tuplas C: ¿Agregar? C: ¿Agregar? C.2: Operador de selección C.1: Operador de agregación Epoch No Sí No B.1 ¿Consulta dispara ahora? Por cada consulta Fin ¿Resultados hijos? ¿Agregar?
uint8_t qid; //1 uint8_t numFields; //2 uint16_t epochDuration uint16_t clocksPerSample; int16_t clockCount; //11 bool hasAgg:1; // -- are there aggregates in this query char bufferType; //see Buffer.h:BufferType //25 uint8_t bufferId; //26 -- output buffer id
Red de sensores Recolector Aplicación Persistencia
1 *1*1
AggOperator Query TupleRouterM DBBufferC QueryResult Selperator Tuple TinyDBAttr TimerC NetworkC TinyAlloc ParsedQuery QueryProcessor StdControl RadioQueue TinyDB
epoch 1epoch 2epoch 3… epoch 65,535 … 2048 << 650,000