Getting started with Riak
NoSQL Live · Boston, MA · March 2010



                Rusty Klophaus (@rklophaus)
            ...
Introductions
Rusty Klophaus                  Bryan Fink
 • Senior Engineer                • Engineering Manager
 • Joined...
Follow the team:
 @basho/team




       3
There are 47 different
NoSQL projects...

Where does Riak fit in?




                   4
Riak is a Dynamo-inspired
key/value datastore
built to scale predictably and easily.




                  5
Riak is a Dynamo-inspired
key/value datastore
built to scale predictably and easily.
     Your ops guy: calm, relaxed, and...
What characteristics of Riak become
important at different cluster sizes?




                  7
Single Box Riak



• NoSQL - Key/Value, Flexible Schema
• Clients in Ruby, Python, Javascript, Java, PHP, Erlang
• Develop...
Small Riak Cluster (~3 boxes)




• Distributed Queries for Performance / Capacity
• Javascript-based Map/Reduce (mini-Had...
Large Riak Cluster (10+ boxes)




•   Homogenous - No special nodes
•   Laugh in the face of machine failure
•   Scale by...
Enterprise ($$$ / ~10’s of boxes)




•   On-Call Support 24x7x365
•   Management Tools
•   SNMP Monitoring
•   Multi-site...
Enterprise ($$$ / ~10’s of boxes)




•   On-Call Support 24x7x365
•   Management Tools
•   SNMP Monitoring
•   Multi-site...
Tutorial
Get Riak
Connect with a Client
Store Data
Store an Object with Links
Linkwalking
Map/Reduce

                    ...
Get Riak
Download
 http://downloads.basho.com/riak

Start Riak
 cd riak
 bin/riak start




                      14
Connect with Python
# Code is in ./riak/client_lib/python
import riak

# Connect
client = riak.RiakClient('127.0.0.1', 809...
Store Data
mybucket = client.bucket('mybucket')

# Create an object...
obj = mybucket.new('myobject')
obj.set_data({ 'foo'...
Store an Object with Links
bands = client.bucket('bands')
albums = client.bucket('albums')
members = client.bucket('member...
Linkwalking
# Get the albums...
albums = obj.link('albums').run()

# Get the songs (assumes data is present)...
songs = ob...
Map/Reduce
# Count the number of sales...
result = obj 
    .link('albums') 
    .map("function(v) { return [v.values[0].d...
Thanks! / Questions?
Questions?
 • riak-users@lists.basho.com (Public Mailing List)
 • riak@basho.com (Core Riak Team)
 • ...
Upcoming SlideShare
Loading in...5
×

Getting Started with Riak - NoSQL Live 2010 - Boston

11,749

Published on

Riak (http://basho.com), a dynamo-inspired, open-source key/value datastore, was built to scale from a single machine to a 100+ cluster without driving you or your operations team crazy.

This presentation points out the characteristics of Riak that become important in small, medium, and large clusters, and then demonstrates the Riak API via the Python client library.

Published in: Technology

Transcript of "Getting Started with Riak - NoSQL Live 2010 - Boston"

  1. 1. Getting started with Riak NoSQL Live · Boston, MA · March 2010 Rusty Klophaus (@rklophaus) Sr. Engineer | Basho Technologies http://www.basho.com rusty@basho.com
  2. 2. Introductions Rusty Klophaus Bryan Fink • Senior Engineer • Engineering Manager • Joined in August ‘09 • Joined in February ’08 Andy Gross Mark Phillips • VP of Engineering • Community Manager • Joined in December ’07 • Joined in April ’08 2
  3. 3. Follow the team: @basho/team 3
  4. 4. There are 47 different NoSQL projects... Where does Riak fit in? 4
  5. 5. Riak is a Dynamo-inspired key/value datastore built to scale predictably and easily. 5
  6. 6. Riak is a Dynamo-inspired key/value datastore built to scale predictably and easily. Your ops guy: calm, relaxed, and wearing a party hat.
  7. 7. What characteristics of Riak become important at different cluster sizes? 7
  8. 8. Single Box Riak • NoSQL - Key/Value, Flexible Schema • Clients in Ruby, Python, Javascript, Java, PHP, Erlang • Development Interface === Production Interface • Configurable Buckets - “A Profile is not an .mp3” • Links - Lightweight Data Relations 8
  9. 9. Small Riak Cluster (~3 boxes) • Distributed Queries for Performance / Capacity • Javascript-based Map/Reduce (mini-Hadoop) • Well-Behaved HTTP • nginx proxy config - http://gist.github.com/323048 9
  10. 10. Large Riak Cluster (10+ boxes) • Homogenous - No special nodes • Laugh in the face of machine failure • Scale by adding machines • Self-Contained Installation 10
  11. 11. Enterprise ($$$ / ~10’s of boxes) • On-Call Support 24x7x365 • Management Tools • SNMP Monitoring • Multi-site Replication 11
  12. 12. Enterprise ($$$ / ~10’s of boxes) • On-Call Support 24x7x365 • Management Tools • SNMP Monitoring • Multi-site Replication 12
  13. 13. Tutorial Get Riak Connect with a Client Store Data Store an Object with Links Linkwalking Map/Reduce 13
  14. 14. Get Riak Download http://downloads.basho.com/riak Start Riak cd riak bin/riak start 14
  15. 15. Connect with Python # Code is in ./riak/client_lib/python import riak # Connect client = riak.RiakClient('127.0.0.1', 8098) 15
  16. 16. Store Data mybucket = client.bucket('mybucket') # Create an object... obj = mybucket.new('myobject') obj.set_data({ 'foo' : 1, 'bar' : 2 }) obj.store() # Read the object... obj = mybucket.get('myobject') print obj.get_data() # Or, open a web browser... http://127.0.0.1:8098/riak/mybucket/myobject 16
  17. 17. Store an Object with Links bands = client.bucket('bands') albums = client.bucket('albums') members = client.bucket('members') # Store a band, link to album and members... obj = bands.new('Winger') .add_link(albums.new('Pull', 1275922).store()) .add_link(albums.new('IV', 542731).store()) .add_link(albums.new('Karma', 200170).store()) .add_link(members.new('Kip Winger').store()) .add_link(members.new('Reb Beach').store()) .add_link(members.new('John Roth').store()) .add_link(members.new('Rod M.').store()) .store() 17
  18. 18. Linkwalking # Get the albums... albums = obj.link('albums').run() # Get the songs (assumes data is present)... songs = obj.link('albums').link('songs').run() # Get the members... members = riak.MapReduce(client) .add('bands', 'Winger') .link('members') .run() 18
  19. 19. Map/Reduce # Count the number of sales... result = obj .link('albums') .map("function(v) { return [v.values[0].data]; }") .reduce("Riak.reduceSum") .run() 19
  20. 20. Thanks! / Questions? Questions? • riak-users@lists.basho.com (Public Mailing List) • riak@basho.com (Core Riak Team) • Follow @basho/team (Basho Twitter List) Riak Resources • http://riak.basho.com • http://downloads.basho.com • ./riak/client_lib <--- Python, JS, Java, PHP libraries 20
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×