stream “static” twitter directed network • following following following following and followers followers followers followers user relations • do not reflect “realtime” interaction between users
stream random sample of all public tweets statuses • https://stream.twitter.com/1.1/statuses/sample.json – firehose: all public statuses – gardenhose: 10% 10% 10% 10% of all public statuses – spritzer: 1 1 1 1% % % % of all public statuses (free free free free) • response in JavaScript Object Notation (JSON)
stream expected data throughput • average of 175 million tweets sent per day • spritzer: roughly 1.750.000 tweets • ~20 tweets per second • 245M bytes per day (1.750.000 tweets x 140 chars) • 2800 bytes per second
inserts, minimal data transformation data processing and transformation: • group data by users (nodes) • build relations of users (edges) event-driven web server: • time from message arrival to visualization web client and visualization: • time decay: add new nodes/edges, remove old ones
map-reduce tasks • map-reduce implemented in server side JavaScript solving the limited resources problem: • capped collections – work in a way similar to circular buffers: once a collection fills its allocated space, it makes room for new documents by overwriting the oldest documents in the collection db.createCollection("some.capped.collection", {capped:true, size:1000000});
• tailable cursors – conceptually equivalent to the tail Unix command with the -f option (i.e. with “follow” mode.) After clients insert new additional documents into a capped collection, the tailable cursor will continue to retrieve documents while (1) { cursor = coll.find({ 'created_at': { '$gt': lastVal } }); cursor.addOption(2); // tailable cursor.addOption(32); // await data while (cursor.hasNext()){ // incremental map-reduce } }
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph graph network
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph graph network Sliding window (2 x 5s)
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph graph network Sliding window (2 x 5s)
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph graph network Sliding window (2 x 5s) Remove Remove Remove Remove Edges from Edges from Edges from Edges from Graph Graph Graph Graph
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph graph network Sliding window (2 x 5s) Remove Remove Remove Remove Edges from Edges from Edges from Edges from Graph Graph Graph Graph
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM Add Edges to Add Edges to Add Edges to Add Edges to Graph Graph Graph Graph graph network Sliding window (2 x 5s) Remove Remove Remove Remove Edges from Edges from Edges from Edges from Graph Graph Graph Graph
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM graph network Sliding window (2 x 5s) Remove Remove Remove Remove Edges from Edges from Edges from Edges from Graph Graph Graph Graph
tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets tweets t0 t1 t2 t3 … tn 5s edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM edges edges edges edges RT + UM RT + UM RT + UM RT + UM graph network Remove Remove Remove Remove Edges from Edges from Edges from Edges from Graph Graph Graph Graph
update the graph adding and removing nodes/edges • approach – event-driven: update of webpage using MongoDB tailable cursors – webserver implemented in node.js – events fired by sockets using socket.io – access to database using the node MongoDB driver
data acquisition (cURL + mongoimport) – execution of map-reduce tasks • firing of events to clients (node.js) – query to capped collection using a tailable cursor listen new events (add or removal of nodes/edges) – tutorial: http://sett.ociweb.com/sett/settMar2012.html
from server • update graph (sigma.js) with – new nodes and edges – removed nodes and edges – Perform layout of the graph using the ForceAtlas2 algorithm