Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Learn You Some Riak

Learn You Some Riak

An intro to Riak talk given at the Atlanta Ruby Users Group on April 11, 2012.

The focus of the talk was on some simple Riak usage with the Ruby driver, some high-level overview of how Riak works, reasons you might want to use Riak in your application, and demo off a sample toy app for pulling tweets of the Twitter Firehose for analysis using Riak MapReduce queries.

Will Farrington

April 11, 2012
Tweet

More Decks by Will Farrington

Other Decks in Programming

Transcript

  1. Learn
    You
    Some
    Riak

    View Slide

  2. @wfarr
    github.com/wfarr

    View Slide

  3. Learn
    You
    Some
    Riak

    View Slide

  4. Story
    Time

    View Slide

  5. View Slide

  6. TL; DR

    View Slide

  7. TL; DR
    Disclaimer: You should totally read this paper as
    soon as you get home and bask in its glory.

    View Slide

  8. Dynamo

    View Slide

  9. Buckets,
    Keys,
    Values

    View Slide

  10. Fault-
    Tolerant

    View Slide

  11. Masterless

    View Slide

  12. What is this
    magic?

    View Slide

  13. CAP
    Theorem

    View Slide

  14. Consistency

    View Slide

  15. All Nodes
    See Data at
    the Same
    Time

    View Slide

  16. Availability

    View Slide

  17. Every DB Request
    Gets a Response
    for Success or
    Failure,
    Guaranteed

    View Slide

  18. Partition
    Tolerance

    View Slide

  19. Your DB keeps
    working despite
    arbitrary message
    loss or failure of a
    part of the system

    View Slide

  20. All Good for
    Different Things

    View Slide

  21. You Only Get To
    Have 2 of the 3

    View Slide

  22. Dynamo Chooses
    Availability and
    Partition Tolerance

    View Slide

  23. What
    is
    Riak?

    View Slide

  24. Riak is a
    Dynamo

    View Slide

  25. Bucket-
    Key: Value

    View Slide

  26. Entries
    abc object
    bcd object
    cde object
    def object
    Logs
    abc object
    bcd object
    cde object
    def object

    View Slide

  27. The Ring

    View Slide

  28. View Slide

  29. VNodes

    View Slide

  30. View Slide

  31. Querying

    View Slide

  32. Map
    Reduce

    View Slide

  33. Riak::MapReduce.new(client)

    View Slide

  34. mr.filter("tweets") do
    matches "^testeroftests-"
    end

    View Slide

  35. fn = "function (v) {
    return [
    JSON.parse(v.values[0].data).text
    ];
    }"

    View Slide

  36. mr.map(fn, :keep => true)

    View Slide

  37. mr.run

    View Slide

  38. Search

    View Slide

  39. Full-text
    Search

    View Slide

  40. Lucene
    Syntax

    View Slide

  41. client.search "tweets",
    "retweeted:true"

    View Slide

  42. Supports
    Manual
    Indexing

    View Slide

  43. client.index "tweets",
    {
    id: "abcde",
    text: "#webscale"
    }

    View Slide

  44. Supports
    Auto
    Indexing

    View Slide

  45. t = client[‘tweets’]
    t.is_indexed?
    t.enable_index!
    t.disable_index!

    View Slide

  46. Queries
    Nodes
    Intelligently

    View Slide

  47. Tradeoffs

    View Slide

  48. Consistency
    Availability
    Partition Tolerance

    View Slide

  49. Consistency
    Availability
    Partition Tolerance

    View Slide

  50. The Good

    View Slide

  51. Riak gets to be
    masterless

    View Slide

  52. Riak gets to be
    fault-tolerant

    View Slide

  53. Riak gets to be
    easy to scale

    View Slide

  54. Riak gets to be
    easy to manage

    View Slide

  55. The Bad

    View Slide

  56. Riak is “only”
    eventually
    consistent

    View Slide

  57. Understand Your
    Tradeoffs

    View Slide

  58. Your Tradeoffs
    Might Not Be
    Someone Else’s

    View Slide

  59. There is no
    silver bullet

    View Slide

  60. View Slide

  61. “The most boring
    database you’ll
    ever run in
    production.”
    @pharkmillups

    View Slide

  62. Boring
    Makes
    Devs Happy

    View Slide

  63. Boring
    Makes
    Ops Happy

    View Slide

  64. Boring
    is
    Awesome

    View Slide

  65. Devs
    Ops

    View Slide

  66. Ops
    Devs

    View Slide

  67. Example
    Use
    Cases

    View Slide

  68. Session
    Storage

    View Slide

  69. Private
    S3-like
    Storage

    View Slide

  70. Huge
    Amounts
    of Rich
    Media

    View Slide

  71. Caching
    Layer

    View Slide

  72. Simple
    Horizontal
    Scaling

    View Slide

  73. Logging
    Systems

    View Slide

  74. Maybe Not
    Use
    Cases

    View Slide

  75. Realtime

    View Slide

  76. Replacing
    Stuff
    That Isn’t
    Broken

    View Slide

  77. You Can
    Use
    Multiple
    Databases!

    View Slide

  78. Who
    Already
    Uses
    Riak?

    View Slide

  79. View Slide

  80. View Slide

  81. Demo

    View Slide

  82. Let’s
    Pretend...

    View Slide

  83. View Slide

  84. Single
    Server

    View Slide

  85. Nope

    View Slide

  86. Sharding

    View Slide

  87. Nope

    View Slide

  88. “building a
    distributed
    system ass first”
    @jnewland

    View Slide

  89. Go
    Horizontal

    View Slide

  90. View Slide

  91. Madness?

    View Slide

  92. Nope
    just big data

    View Slide

  93. Scenario

    View Slide

  94. Questions?

    View Slide

  95. Thanks!
    Will Farrington
    speakerdeck.com/u/wfarr
    github.com/wfarr/tweetscale

    View Slide