3. * : IoT stream query
Temperature data stream
Q1 Q2Adjust the air cond.
cooling temperature
Adjust the fan speed
of the electric fan
4. * : IoT stream query
Temperature data stream
Q1 Q2Adjust the air cond.
cooling temperature
Adjust the fan speed
of the electric fan
● Long-running
● Small data streams
● Large numbers
● Various types
11. User & Application
Building Manager (User)
Building Management Application
(Android, iOS, Web, ...)
MIST
“I want to monitor a room!”
“OK… I will submit the
necessary query for you
using MIST API”
“I will give you notifications
when something happens!”
22. MIST Dataflow Query Example
public static void main(final String args[]) {
final SourceConfiguration localMQTTSourceConf =
MQTTSourceConfiguration.newBuilder()
.setTopic("snu/building302/room420/noisesensor")
.setBroker("tcp://mqtt_broker_address:1883")
.build();
... Configure MQTT source
23. MIST Dataflow Query Example
final MISTQueryBuilder queryBuilder =
new MISTQueryBuilder("room_noise_sensing");
final ContinuousStream<Integer> sensedData =
queryBuilder.mqttStream(mqttSourceConf)
.map((mqttMessage) -> new
String(mqttMessage.getPayload())))
.map(stringData ->
Integer.parseInt(stringData));
Set application name
24. final MISTQueryBuilder queryBuilder =
new MISTQueryBuilder("room_noise_sensing");
final ContinuousStream<Integer> sensedData =
queryBuilder.mqttStream(mqttSourceConf)
.map((mqttMessage) -> new
String(mqttMessage.getPayload())))
.map(stringData ->
Integer.parseInt(stringData));
MIST Dataflow Query Example
Get data from MQTT source
25. final MISTQueryBuilder queryBuilder =
new MISTQueryBuilder("room_noise_sensing");
final ContinuousStream<Integer> sensedData =
queryBuilder.mqttStream(mqttSourceConf)
.map((mqttMessage) -> new
String(mqttMessage.getPayload())))
.map(stringData ->
Integer.parseInt(stringData));
MIST Dataflow Query Example map() transforms the incoming
MQTT message into integer value
26. MIST Dataflow Query Example
sensedData
.filter(value -> value < 200)
.map(value -> new MqttMessage("Noisy".getBytes()))
.mqttOutput("tcp://mqtt_broker_address:1883",
"snu/building302/room420/monitor")
final MISTQuery query = queryBuilder.build();
Notify if the room is noisy
27. MIST Dataflow Query Example
sensedData
.filter(value -> value < 200)
.map(value -> new MqttMessage("Noisy".getBytes()))
.mqttOutput("tcp://mqtt_broker_address:1883",
"snu/building302/room420/monitor")
final MISTQuery query = queryBuilder.build();
Send the notification via MQTT
28. MIST Dataflow Query Example
sensedData
.filter(value -> value < 200)
.map(value -> new MqttMessage("Noisy".getBytes()))
.mqttOutput("tcp://mqtt_broker_address:1883",
"snu/building302/room420/monitor")
final MISTQuery query = queryBuilder.build();
Build the query
46. Instruction cache
(size = 2)
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
Event queuee
9
UDF1 UDF2 UDF3
Query1 Query2 Query3 Query4Query5 Query6 Query7 Query8 Query9
47. Instruction cache
(size = 2)
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
Event queuee
9
UDF1 UDF2 UDF3
Query1 Query2 Query3 Query4Query5 Query6 Query7 Query8 Query9
UDF1
UDF2
UDF3
Bad!
Frequent cache misses!
48. Instruction cache
(size = 2)
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
Event queuee
9
UDF1 UDF2 UDF3
Query1 Query2 Query3 Query4Query5 Query6 Query7 Query8 Query9
UDF1
UDF2
Cache misses 9 ⇒ 3!
Great!
49. Instruction cache
(size = 2)
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
Event queuee
9
UDF1 UDF2 UDF3
Query1 Query2 Query3 Query4Query5 Query6 Query7 Query8 Query9
UDF1
UDF2
Cache misses 9 ⇒ 3!
Great!
How to realize this event
processing mechanism?
72. We will make MIST as an open-source project
soon! We look forward contribution from many
developers!
Contact: mist@spl.snu.ac.kr
Software Platform Lab Site: http://spl.snu.ac.kr