Riak Intro at Munich Node.js
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Riak Intro at Munich Node.js

  • 1,251 views
Uploaded on

Introduction to Riak, riak-js and MapReduce at Munich node.js user group

Introduction to Riak, riak-js and MapReduce at Munich node.js user group

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,251
On Slideshare
913
From Embeds
338
Number of Embeds
4

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 338

http://sideshowcoder.com 329
http://www.newsblur.com 4
http://newsblur.com 4
http://cloud.feedly.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Riak and Node.js: Best served with HTTP Philipp Fehre https://github.com/sideshowcoder
  • 2. What is Riak? A Key Value store A Dynamo store!
  • 3. Distributed
  • 4. Replicated
  • 5. Fault tolerant
  • 6. Scaling Basically means add more machines
  • 7. Gains more storage more throughput lower latency
  • 8. And it is Web friendly HTTP Interface Value is irrelevant so you can store JSON Support for JavaScript functions
  • 9. When to use Riak
  • 10. Data Organization keys identify objects objects have metadata objects are grouped into buckets
  • 11. More Data Features Links Secoundary indexes Timeouts
  • 12. HTTP Riak understands simple HTTP
  • 13. Create some data curl -v -XPUT http://localhost:8098/riak/test/doc -H "Content-Type: application/json" -d '{"bar":"baz"}'
  • 14. Query by key curl -v http://localhost:8098/riak/test/doc
  • 15. Everything can be done via HTTP
  • 16. like setting properties of the bucket curl -v -XPUT -H "Content-Type: application/json" -d '{"props":{"n_val":5}}'
  • 17. or MapReduce curl -XPOST http://localhost:8098/mapred -H 'Content-Type: application/json' -d '{ "inputs":"training", "query":[{"map":{"language":"javascript", "source":"function(riakObject) { var val = riakObject.values[0].data.match(/pizza/g); return [[riakObject.key, (val ? val.length : 0)]]; }"}}]}'
  • 18. Ok but we do JavaScript
  • 19. ... or more like Node
  • 20. Using Riak from Node
  • 21. JavaScript all the way down if you want it to be!
  • 22. The Client var db = require("riak-js").getClient()
  • 23. Store an Object var obj = { val: "foo", bar: true } db.save("foos", "foo_1", obj, {}, function(err) { if(!err) console.log("stored") })
  • 24. Retrieve an Object db.get("foos", "foo_1", function(err, data, meta) { if(!err) { console.log(data) console.log(meta) } })
  • 25. Map and Reduce "MapReduce is a programming model for processing large data sets with a parallel, distributed algorithm on a cluster" -Wikipedia
  • 26. Riak MapReduce Queries provide a set of keys provide a map function provide a reduce function
  • 27. Select Keys db.mapreduce.add("foos")
  • 28. var key_filter = [["tokenize", "_", 1], ["to_lower"], ["matches", "foo"]] db.mapreduce.add({ bucket: "foos", key_filters: key_filter })
  • 29. Map a buildin db.mapreduce .add("foos") .map({ name: 'Riak.mapValueJson', keep: true }) .run()
  • 30. Map custom function var func = function(v, _keyData, arg) { var v = Riak.mapValuesJson(v)[0]; (v.val === "foo") ? return [v] : return []; } db.mapreduce.add("foos").map(func).run()
  • 31. Reduce with custom var func = function(values) { return [ values.length ] } db.mapreduce... .reduce(func) .run()
  • 32. A little more complex function(values) { return values.reduce(function(acc, v) { if(v.bar) { var curr = acc["bar"] || 0 acc["bar"] = curr + 1 } return acc; }) }
  • 33. Questions · Usergroup: www.meetup.com/Riak-Munchen/ · More on the basics: littleriakbook.com