Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
riak-js Mathias Meyer, @roidrage, Riak Meetup NYC
Slide 2
Slide 2 text
travis-ci.org
Slide 3
Slide 3 text
riakhandbook.com
Slide 4
Slide 4 text
riak-js
Slide 5
Slide 5 text
simple node.js library for riak
Slide 6
Slide 6 text
simple node.js library for riak
Slide 7
Slide 7 text
heavily used in riak handbook
Slide 8
Slide 8 text
ancient history
Slide 9
Slide 9 text
first commit
Slide 10
Slide 10 text
2 march 2010
Slide 11
Slide 11 text
frank06/riak-js
Slide 12
Slide 12 text
javascript
Slide 13
Slide 13 text
port to coffeescript
Slide 14
Slide 14 text
rewritten in javascript
Slide 15
Slide 15 text
mostlyserious/riak-js
Slide 16
Slide 16 text
senchalabs/riak-js
Slide 17
Slide 17 text
mostlyserious/riak-js
Slide 18
Slide 18 text
apply(roidrage)
Slide 19
Slide 19 text
october 2011
Slide 20
Slide 20 text
v0.4.1
Slide 21
Slide 21 text
api changes
Slide 22
Slide 22 text
november 2012
Slide 23
Slide 23 text
v0.9.0
Slide 24
Slide 24 text
simple interface
Slide 25
Slide 25 text
riak = require('riak-js').getClient()
Slide 26
Slide 26 text
riak.get('users', 'roidrage')
Slide 27
Slide 27 text
user = {name: 'Mathias Meyer'} riak.save('users', 'roidrage', user)
Slide 28
Slide 28 text
riak.get('users', 'roidrage', function(error, data) { console.log(data); } )
Slide 29
Slide 29 text
riak.get('users', 'roidrage', function(error, data) { if (error.notFound) { console.log('User doesn't exist!'); } } )
Slide 30
Slide 30 text
meta
Slide 31
Slide 31 text
riak.get('users', 'roidrage', {r: 1});
Slide 32
Slide 32 text
riak.get('users', 'roidrage', function(error, data, meta) { console.log(meta.vclock); } )
Slide 33
Slide 33 text
reusable
Slide 34
Slide 34 text
riak.get('users', 'roidrage', function(error, user, meta) { user.city = 'Berlin'; riak.save('users', 'roidrage', user, meta); } )
Slide 35
Slide 35 text
links
Slide 36
Slide 36 text
riak.save('users', 'roidrage', user, {links: [{bucket: 'users', key: 'tsantero', tag: 'bromance'}] });
Slide 37
Slide 37 text
riak.walk('users', 'roidrage', [['users', '_', 'bromance']])
Slide 38
Slide 38 text
map reduce
Slide 39
Slide 39 text
riak.mapreduce.add('users'). map('Riak.mapValuesJson'). run()
Slide 40
Slide 40 text
riak.mapreduce.add('users'). map(function(obj) { return [obj.values[0]]; }). run()
Slide 41
Slide 41 text
javascript!
Slide 42
Slide 42 text
riak.mapreduce.add('users'). map(function(v) { return [v.values[0].name]; }). reduce('Riak.reduceSort'). run()
Slide 43
Slide 43 text
search
Slide 44
Slide 44 text
riak.saveBucket('users', {search: true})
Slide 45
Slide 45 text
riak.save('users', 'roidrage', {name: 'Mathias Meyer'});
Slide 46
Slide 46 text
riak.search.find('users', 'name:Mathias*')
Slide 47
Slide 47 text
search — map reduce
Slide 48
Slide 48 text
riak.mapreduce.search('users', 'name:Mathias*'). map('Riak.mapValuesJson'). run()
Slide 49
Slide 49 text
secondary indexes
Slide 50
Slide 50 text
riak.save('users', 'roidrage', {name: 'Mathias Meyer'}, {index: {name: 'Mathias Meyer', born: 1977}});
Slide 51
Slide 51 text
riak.query('users', {born: 1977})
Slide 52
Slide 52 text
riak.query('users', {born: [1977, 1980]})
Slide 53
Slide 53 text
instrumentation
Slide 54
Slide 54 text
riak.registerListener({ 'riak.request.end': function(event) {}, 'riak.request.start': function(event) {} });
Slide 55
Slide 55 text
metrics
Slide 56
Slide 56 text
riak.registerListener({ 'riak.request.end': function(event) { var duration = event.finished_at - event.started_at, name = 'riak.request.' + event.method.toLowerCase(); metrics.timing(name, runtime); } });
Slide 57
Slide 57 text
related: http://www.paperplanes.de/2012/12/27/a-plea-for-client-library-instrumentation.html
Slide 58
Slide 58 text
the future
Slide 59
Slide 59 text
protocol buffers
Slide 60
Slide 60 text
custom agents
Slide 61
Slide 61 text
reconciling conflicts
Slide 62
Slide 62 text
riak.get('users', 'roidrage', function(error, data, meta) { if (meta.status == 300) { // merge siblings } } )
Slide 63
Slide 63 text
riak.onConflict(function(siblings) { return siblings.reduce(...); })
Slide 64
Slide 64 text
riak cs
Slide 65
Slide 65 text
yokozuna