Slide 1

Slide 1 text

RIVER https://github.com/andykent/river

Slide 2

Slide 2 text

A RECAP...

Slide 3

Slide 3 text

REALTIME DATA ANALYSIS OVER UNBOUNDED STREAMS

Slide 4

Slide 4 text

WHEN YOU’VE GOT A HOSEPIPE WHAT YOU WANT IS A CREEK

Slide 5

Slide 5 text

WHEN YOU WANT MORE THAN A CREEK WHAT YOU NEED IS A RIVER

Slide 6

Slide 6 text

RIVER IS A BACKWARDS DATABASE

Slide 7

Slide 7 text

DATABASE “SELECT COUNT(1) FROM events”

Slide 8

Slide 8 text

RIVER “SELECT COUNT(1) FROM events”

Slide 9

Slide 9 text

MORE THAN A BACKWARDS DATABASE

Slide 10

Slide 10 text

RIVER INSERT 1 “SELECT COUNT(1) FROM events.win:time(10)”

Slide 11

Slide 11 text

RIVER REMOVE 1 INSERT 2 “SELECT COUNT(1) FROM events.win:time(10)”

Slide 12

Slide 12 text

RIVER REMOVE 2 INSERT 1 “SELECT COUNT(1) FROM events.win:time(10)”

Slide 13

Slide 13 text

RIVER REMOVE 1 INSERT 0 “SELECT COUNT(1) FROM events.win:time(10)”

Slide 14

Slide 14 text

CONTEXTS river = require('river') ctx = river.createContext() ctx.push('coords', {x:1, y:2}) ctx.push('coords', {x:3, y:4})

Slide 15

Slide 15 text

QUERIES query = ctx.addQuery("SELECT x FROM coords") query.on("insert", console.log) query.on("remove", console.log)

Slide 16

Slide 16 text

EXAMPLE

Slide 17

Slide 17 text

TWEET SOURCES SELECT source, COUNT(1) AS i FROM tweets.win:length(1000) GROUP BY source HAVING i > 10

Slide 18

Slide 18 text

SELECT source, COUNT(1) AS i FROM tweets.win:length(1000) GROUP BY source HAVING i > 10 PARSED QUERY QUERY PLAN COMPILED QUERY

Slide 19

Slide 19 text

SELECT source, COUNT(1) AS i FROM tweets.win:length(1000) GROUP BY source HAVING i > 10 PARSED QUERY QUERY PLAN MINIFICATION LENGTH BASED REPLAY AGGREGATION PROJECTION FILTER STREAM SELECTION COMPILED QUERY

Slide 20

Slide 20 text

RATE LIMITING SELECT accounts.email AS contact_email, FLOOR(COUNT(1)/60) AS req_sec FROM requests.win:time(60) JOIN accounts ON requests.token = accounts.token GROUP BY requests.token HAVING req_count > 2

Slide 21

Slide 21 text

ESPER

Slide 22

Slide 22 text

THE FUTURE...

Slide 23

Slide 23 text

PATTERN MATCHING SELECT * FROM stream[a -> b -> c]

Slide 24

Slide 24 text

SERVER WRAPPER

Slide 25

Slide 25 text

PARTITIONING

Slide 26

Slide 26 text

PERSISTENCE

Slide 27

Slide 27 text

SQL-PARSER https://github.com/forward/sql-parser

Slide 28

Slide 28 text

RIVER https://github.com/andykent/river