SlideShare une entreprise Scribd logo
1  sur  68
Riak with node.js
         Sean Cribbs   Mathias Meyer
             Developer Advocates




basho
Upcoming Events




        Mark Phillips, Community Manager
        mark@basho.com @pharkmillups

basho
Why Riak with node.js?




basho
Why Riak with node.js?

        • Simple to understand and use




basho
Why Riak with node.js?

        • Simple to understand and use
        • Flexible storage options



basho
Why Riak with node.js?

        • Simple to understand and use
        • Flexible storage options
        • Awesome client library (riak-js)


basho
Why Riak with node.js?

        • Simple to understand and use
        • Flexible storage options
        • Awesome client library (riak-js)
        • Fits lots of use-cases

basho
Getting Started




basho
Getting Started
         Install Riak or Riak Search:
        http://downloads.basho.com




basho
Getting Started
            Install Riak or Riak Search:
           http://downloads.basho.com

        $ npm install riak-js




basho
Getting Started
            Install Riak or Riak Search:
           http://downloads.basho.com

        $ npm install riak-js
        $ git clone git://github.com/frank06/riak-js




basho
Getting Started
            Install Riak or Riak Search:
           http://downloads.basho.com

        $ npm install riak-js
        $ git clone git://github.com/frank06/riak-js

              Website: http://riakjs.org


basho
Basic Client
        Operations


basho
Basic Operations




basho
Basic Operations
        // Get a client
        var db = require('riak-js').getClient()




basho
Basic Operations
        // Get a client
        var db = require('riak-js').getClient()

        // Fetch an object
        db.get('webinars', 'node.js',
          function(err, data) {
            console.log("Found the webinar:" +
                        sys.inspect(data))
          })




basho
Basic Operations
        // Get a client
        var db = require('riak-js').getClient()

        // Fetch an object                   typical node
        db.get('webinars', 'node.js',       callback style
          function(err, data) {
            console.log("Found the webinar:" +
                        sys.inspect(data))
          })




basho
Basic Operations
        // Get a client
        var db = require('riak-js').getClient()

        // Fetch an object                   typical node
        db.get('webinars', 'node.js',       callback style
          function(err, data) {
            console.log("Found the webinar:" +
                        sys.inspect(data))
          })

        // Store an object
        db.save('webinars', 'node.js',
                {date:"2011-03-15",
                 title: "Riak with node.js",
                 presenters: ["Sean", "Mathias"]})


basho
Basic Operations




basho
Basic Operations
        // Delete an object
        db.remove('webinars', 'node.js')




basho
Basic Operations
        // Delete an object
        db.remove('webinars', 'node.js')

        // Does this key exist?
        db.exists('frameworks', 'node.js')




basho
Basic Operations
        // Delete an object
        db.remove('webinars', 'node.js')

        // Does this key exist?
        db.exists('frameworks', 'node.js')

        // Give me them all
        db.getAll('frameworks')




basho
Basic Operations
        // Delete an object
        db.remove('webinars', 'node.js')

        // Does this key exist?
        db.exists('frameworks', 'node.js')

        // Give me them all
        db.getAll('frameworks')

        // But filter them too (uses MapReduce)
        db.getAll('frameworks',
                  { where: { language: "javascript" }})




basho
Basic Operations
        // Delete an object
        db.remove('webinars', 'node.js')

        // Does this key exist?
        db.exists('frameworks', 'node.js')

        // Give me them all
        db.getAll('frameworks')

        // But filter them too (uses MapReduce)
        db.getAll('frameworks',
                  { where: { language: "javascript" }})

        // How many are there?
        db.count('frameworks')



basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)
        function cb(err, data, META){ }




basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)




basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)

        • Request-time options




basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)

        • Request-time options
         •contentType




basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)

        • Request-time options
         •contentType
         •clientId



basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)

        • Request-time options
         •contentType
         •clientId
         • links, usermeta


basho
Meta Object
    db.save(‘bucket’, ‘key’, data, META, cb)

        • Request-time options
         •contentType
         •clientId
         • links, usermeta
         • quorums (r,w,dw), returnBody
basho
Meta Object
        function cb(err, data, META){ }




basho
Meta Object
         function cb(err, data, META){ }


        • Response-time metadata




basho
Meta Object
         function cb(err, data, META){ }


        • Response-time metadata
         • bucket, key, vclock



basho
Meta Object
         function cb(err, data, META){ }


        • Response-time metadata
         • bucket, key, vclock
         • links, usermeta


basho
Meta Object
         function cb(err, data, META){ }


        • Response-time metadata
         • bucket, key, vclock
         • links, usermeta
         • lastMod, etag, statusCode

basho
Using Meta




basho
Using Meta
        // Add a link to the object
        db.get('frameworks', 'node.js',
          function(err, data, meta){
            meta.addLink({bucket:'vm', key:'v8', tag:'vm'});
            db.save('frameworks', 'node.js', data, meta)
          })




basho
Using Meta
        // Add a link to the object
        db.get('frameworks', 'node.js',
          function(err, data, meta){
            meta.addLink({bucket:'vm', key:'v8', tag:'vm'});
            db.save('frameworks', 'node.js', data, meta)
          })

        // Set the content type
        db.save('pages', 'index.html',
                '<html><body>Hello, world!</body></html>',
                {contentType: 'html'})




basho
Querying Beyond
          Key-Value


basho
Link-walking




basho
Link-walking

        // Find friends
        db.walk('people', 'sean', [['_','friend']])




basho
Link-walking

        // Find friends
        db.walk('people', 'sean', [['_','friend']])

        // Find acquaintances of friends
        db.walk('people', 'mathias',
                [['_','friend'],
                 ['people','_']])




basho
MapReduce




basho
MapReduce
        // Execute a MapReduce query
        db.add('frameworks')         // Use all keys in bucket
          .map('Riak.mapValuesJson') // Map using a built-in
          .run(function(err, data){ // Execute the query
                 console.log(data);
               })




basho
MapReduce
        // Execute a MapReduce query
        db.add('frameworks')         // Use all keys in bucket
          .map('Riak.mapValuesJson') // Map using a built-in
          .run(function(err, data){ // Execute the query
                 console.log(data);
               })

        // Send a focused query
        db.add('frameworks', 'node.js') // Start with one key
          .link({ bucket: "vm"})        // Follow some links
          .map(function(obj){           // Map using an inline
                 var data =
                    Riak.mapValuesJson(obj)[0];
                 return [data.name]
               })
          .reduce('Riak.reduceSort')   // Sort via reduce
          .run()



basho
MapReduce




basho
MapReduce

        // Initiate MapReduce with a key-filter
        db.add({ bucket: 'emails',
                 key_filters: [["ends_with", "basho.com"]] })
           // Map with a phase-argument
          .map({ name:'Riak.mapByFields',
                 arg: { joined:'2010-01-01' })
          .run()




basho
Riak Search




basho
Riak Search

        // Turn on automatic document indexing
        db.enableIndex('documents')




basho
Riak Search

        // Turn on automatic document indexing
        db.enableIndex('documents')

        // Perform a simple search
        db.search('documents', 'title:scalable')




basho
Riak Search

        // Turn on automatic document indexing
        db.enableIndex('documents')

        // Perform a simple search
        db.search('documents', 'title:scalable')

        // Start a MapReduce query with search
        db.addSearch('documents', 'title:scalable')
        // From here, add map and reduce phases




basho
Running Tests



basho
Test Server




basho
Test Server
        // Add test server to your tests
        var TestServer = require('riak-js').TestServer




basho
Test Server
        // Add test server to your tests
        var TestServer = require('riak-js').TestServer
        var testServer = new TestServer({binDir: "/usr/local/bin"})




basho
Test Server
        // Add test server to your tests
        var TestServer = require('riak-js').TestServer
        var testServer = new TestServer({binDir: "/usr/local/bin"})
        var vows = require('vows'), assert = require('assert')




basho
Test Server
        // Add test server to your tests
        var TestServer = require('riak-js').TestServer
        var testServer = new TestServer({binDir: "/usr/local/bin"})
        var vows = require('vows'), assert = require('assert')
        suite = vows.describe("Example tests")




basho
Test Server
        // Add test server to your tests
        var TestServer = require('riak-js').TestServer
        var testServer = new TestServer({binDir: "/usr/local/bin"})
        var vows = require('vows'), assert = require('assert')
        suite = vows.describe("Example tests")

        // Bootstrap the test server
        suite.addBatch({
          'setup':{
            topic: function(){
              var cb = this.callback
              testServer.prepare(function(){ testServer.start(cb) })
            },




basho
Test Server
        // Add test server to your tests
        var TestServer = require('riak-js').TestServer
        var testServer = new TestServer({binDir: "/usr/local/bin"})
        var vows = require('vows'), assert = require('assert')
        suite = vows.describe("Example tests")

        // Bootstrap the test server
        suite.addBatch({
          'setup':{
            topic: function(){
              var cb = this.callback
              testServer.prepare(function(){ testServer.start(cb) })
            },
           'works': function(){
             assert.isTrue(testServer.started)
           }
          }})



basho
Test Server




basho
Test Server
        // Clear data before a test
        suite.addBatch({
          'stores data':{
             topic: function(){
               var cb = this.callback
               testServer.clear(function(){
                 db.save('companies', 'basho', {city:"Cambridge"}, cb)
               })
             },
             'successfully': function(err, data, meta){ }
          }})




basho
Test Server
        // Clear data before a test
        suite.addBatch({
          'stores data':{
             topic: function(){
               var cb = this.callback
               testServer.clear(function(){
                 db.save('companies', 'basho', {city:"Cambridge"}, cb)
               })
             },
             'successfully': function(err, data, meta){ }
          }})
        // Shutdown the server at the end
        suite.addBatch({
          'teardown':{
            topic: function() {
              testServer.stop(this.callback)
            },
            'works':function(){
              assert.ok(!testServer.started)
            }
          }})



basho
Demo & Code
        https://github.com/basho/riaktant




basho
Hosted on Joyent
                               http://no.de




           Demo & Code
        https://github.com/basho/riaktant




basho
Plug
        Interested in learning about support,
        consulting, or Enterprise features?
        Email info@basho.com or go to
        http://www.basho.com/
        contact.php to talk with us.
                   www.basho.com



basho
Plug
        Interested in learning about support,
        consulting, or Enterprise features?
        Email info@basho.com or go to
        http://www.basho.com/
        contact.php to talk with us.
                     www.basho.com
         mathias@basho.com
             @roidrage

          sean@basho.com
            @seancribbs
basho
Questions?



basho

Contenu connexe

Tendances

OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...
OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...
OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...NETWAYS
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMCIcinga
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3makoto tsuyuki
 
Apache Spark and DataStax Enablement
Apache Spark and DataStax EnablementApache Spark and DataStax Enablement
Apache Spark and DataStax EnablementVincent Poncet
 
Spark Cassandra Connector: Past, Present, and Future
Spark Cassandra Connector: Past, Present, and FutureSpark Cassandra Connector: Past, Present, and Future
Spark Cassandra Connector: Past, Present, and FutureRussell Spitzer
 
The Return of the Living Datalog
The Return of the Living DatalogThe Return of the Living Datalog
The Return of the Living DatalogMike Fogus
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORMYaroslav Muravskyi
 
DataSource V2 and Cassandra – A Whole New World
DataSource V2 and Cassandra – A Whole New WorldDataSource V2 and Cassandra – A Whole New World
DataSource V2 and Cassandra – A Whole New WorldDatabricks
 
Spark Programming
Spark ProgrammingSpark Programming
Spark ProgrammingTaewook Eom
 
Introducing Riak
Introducing RiakIntroducing Riak
Introducing RiakKevin Smith
 
Cassandra Community Webinar: Apache Cassandra Internals
Cassandra Community Webinar: Apache Cassandra InternalsCassandra Community Webinar: Apache Cassandra Internals
Cassandra Community Webinar: Apache Cassandra InternalsDataStax
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Gary Larizza
 
Why is My Spark Job Failing? by Sandy Ryza of Cloudera
Why is My Spark Job Failing? by Sandy Ryza of ClouderaWhy is My Spark Job Failing? by Sandy Ryza of Cloudera
Why is My Spark Job Failing? by Sandy Ryza of ClouderaData Con LA
 
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014Amazon Web Services
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Matthew Groves
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of DjangoJacob Kaplan-Moss
 
Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra Matthias Niehoff
 
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012Amazon Web Services
 

Tendances (20)

HiveServer2
HiveServer2HiveServer2
HiveServer2
 
OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...
OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...
OSDC 2014: Sebastian Harl - SysDB the system management and inventory collect...
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMC
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3
 
Apache Spark and DataStax Enablement
Apache Spark and DataStax EnablementApache Spark and DataStax Enablement
Apache Spark and DataStax Enablement
 
Spark Cassandra Connector: Past, Present, and Future
Spark Cassandra Connector: Past, Present, and FutureSpark Cassandra Connector: Past, Present, and Future
Spark Cassandra Connector: Past, Present, and Future
 
The Return of the Living Datalog
The Return of the Living DatalogThe Return of the Living Datalog
The Return of the Living Datalog
 
Apache Kite
Apache KiteApache Kite
Apache Kite
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORM
 
DataSource V2 and Cassandra – A Whole New World
DataSource V2 and Cassandra – A Whole New WorldDataSource V2 and Cassandra – A Whole New World
DataSource V2 and Cassandra – A Whole New World
 
Spark Programming
Spark ProgrammingSpark Programming
Spark Programming
 
Introducing Riak
Introducing RiakIntroducing Riak
Introducing Riak
 
Cassandra Community Webinar: Apache Cassandra Internals
Cassandra Community Webinar: Apache Cassandra InternalsCassandra Community Webinar: Apache Cassandra Internals
Cassandra Community Webinar: Apache Cassandra Internals
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'
 
Why is My Spark Job Failing? by Sandy Ryza of Cloudera
Why is My Spark Job Failing? by Sandy Ryza of ClouderaWhy is My Spark Job Failing? by Sandy Ryza of Cloudera
Why is My Spark Job Failing? by Sandy Ryza of Cloudera
 
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of Django
 
Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra
 
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
 

Similaire à Riak with node.js

MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know Norberto Leite
 
Mongo+java (1)
Mongo+java (1)Mongo+java (1)
Mongo+java (1)MongoDB
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium AppsNate Abele
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejsNick Lee
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserHoward Lewis Ship
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Single Page Applications on JavaScript and ASP.NET MVC4
Single Page Applications on JavaScript and ASP.NET MVC4Single Page Applications on JavaScript and ASP.NET MVC4
Single Page Applications on JavaScript and ASP.NET MVC4Yuriy Shapovalov
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}.toster
 
Spring data iii
Spring data iiiSpring data iii
Spring data iii명철 강
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRick Copeland
 
Riak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup GroupRiak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup Groupsiculars
 
mongodb-introduction
mongodb-introductionmongodb-introduction
mongodb-introductionTse-Ching Ho
 
San Francisco Java User Group
San Francisco Java User GroupSan Francisco Java User Group
San Francisco Java User Groupkchodorow
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasminePaulo Ragonha
 
Mongoskin - Guilin
Mongoskin - GuilinMongoskin - Guilin
Mongoskin - GuilinJackson Tian
 

Similaire à Riak with node.js (20)

Riak with Rails
Riak with RailsRiak with Rails
Riak with Rails
 
ABCD firebase
ABCD firebaseABCD firebase
ABCD firebase
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know
 
Mongo+java (1)
Mongo+java (1)Mongo+java (1)
Mongo+java (1)
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejs
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The Browser
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
 
Single Page Applications on JavaScript and ASP.NET MVC4
Single Page Applications on JavaScript and ASP.NET MVC4Single Page Applications on JavaScript and ASP.NET MVC4
Single Page Applications on JavaScript and ASP.NET MVC4
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}
 
Latinoware
LatinowareLatinoware
Latinoware
 
Spring data iii
Spring data iiiSpring data iii
Spring data iii
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
 
Riak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup GroupRiak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup Group
 
mongodb-introduction
mongodb-introductionmongodb-introduction
mongodb-introduction
 
San Francisco Java User Group
San Francisco Java User GroupSan Francisco Java User Group
San Francisco Java User Group
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
 
Mongoskin - Guilin
Mongoskin - GuilinMongoskin - Guilin
Mongoskin - Guilin
 
Spl Not A Bridge Too Far phpNW09
Spl Not A Bridge Too Far phpNW09Spl Not A Bridge Too Far phpNW09
Spl Not A Bridge Too Far phpNW09
 

Plus de Sean Cribbs

Eventually Consistent Data Structures (from strangeloop12)
Eventually Consistent Data Structures (from strangeloop12)Eventually Consistent Data Structures (from strangeloop12)
Eventually Consistent Data Structures (from strangeloop12)Sean Cribbs
 
Eventually-Consistent Data Structures
Eventually-Consistent Data StructuresEventually-Consistent Data Structures
Eventually-Consistent Data StructuresSean Cribbs
 
A Case of Accidental Concurrency
A Case of Accidental ConcurrencyA Case of Accidental Concurrency
A Case of Accidental ConcurrencySean Cribbs
 
Schema Design for Riak (Take 2)
Schema Design for Riak (Take 2)Schema Design for Riak (Take 2)
Schema Design for Riak (Take 2)Sean Cribbs
 
Riak (Øredev nosql day)
Riak (Øredev nosql day)Riak (Øredev nosql day)
Riak (Øredev nosql day)Sean Cribbs
 
Riak Tutorial (Øredev)
Riak Tutorial (Øredev)Riak Tutorial (Øredev)
Riak Tutorial (Øredev)Sean Cribbs
 
The Radiant Ethic
The Radiant EthicThe Radiant Ethic
The Radiant EthicSean Cribbs
 
Schema Design for Riak
Schema Design for RiakSchema Design for Riak
Schema Design for RiakSean Cribbs
 
Introducing Riak and Ripple
Introducing Riak and RippleIntroducing Riak and Ripple
Introducing Riak and RippleSean Cribbs
 
Round PEG, Round Hole - Parsing Functionally
Round PEG, Round Hole - Parsing FunctionallyRound PEG, Round Hole - Parsing Functionally
Round PEG, Round Hole - Parsing FunctionallySean Cribbs
 
Story Driven Development With Cucumber
Story Driven Development With CucumberStory Driven Development With Cucumber
Story Driven Development With CucumberSean Cribbs
 
Achieving Parsing Sanity In Erlang
Achieving Parsing Sanity In ErlangAchieving Parsing Sanity In Erlang
Achieving Parsing Sanity In ErlangSean Cribbs
 
Of Rats And Dragons
Of Rats And DragonsOf Rats And Dragons
Of Rats And DragonsSean Cribbs
 
Erlang/OTP for Rubyists
Erlang/OTP for RubyistsErlang/OTP for Rubyists
Erlang/OTP for RubyistsSean Cribbs
 
Content Management That Won't Rot Your Brain
Content Management That Won't Rot Your BrainContent Management That Won't Rot Your Brain
Content Management That Won't Rot Your BrainSean Cribbs
 

Plus de Sean Cribbs (15)

Eventually Consistent Data Structures (from strangeloop12)
Eventually Consistent Data Structures (from strangeloop12)Eventually Consistent Data Structures (from strangeloop12)
Eventually Consistent Data Structures (from strangeloop12)
 
Eventually-Consistent Data Structures
Eventually-Consistent Data StructuresEventually-Consistent Data Structures
Eventually-Consistent Data Structures
 
A Case of Accidental Concurrency
A Case of Accidental ConcurrencyA Case of Accidental Concurrency
A Case of Accidental Concurrency
 
Schema Design for Riak (Take 2)
Schema Design for Riak (Take 2)Schema Design for Riak (Take 2)
Schema Design for Riak (Take 2)
 
Riak (Øredev nosql day)
Riak (Øredev nosql day)Riak (Øredev nosql day)
Riak (Øredev nosql day)
 
Riak Tutorial (Øredev)
Riak Tutorial (Øredev)Riak Tutorial (Øredev)
Riak Tutorial (Øredev)
 
The Radiant Ethic
The Radiant EthicThe Radiant Ethic
The Radiant Ethic
 
Schema Design for Riak
Schema Design for RiakSchema Design for Riak
Schema Design for Riak
 
Introducing Riak and Ripple
Introducing Riak and RippleIntroducing Riak and Ripple
Introducing Riak and Ripple
 
Round PEG, Round Hole - Parsing Functionally
Round PEG, Round Hole - Parsing FunctionallyRound PEG, Round Hole - Parsing Functionally
Round PEG, Round Hole - Parsing Functionally
 
Story Driven Development With Cucumber
Story Driven Development With CucumberStory Driven Development With Cucumber
Story Driven Development With Cucumber
 
Achieving Parsing Sanity In Erlang
Achieving Parsing Sanity In ErlangAchieving Parsing Sanity In Erlang
Achieving Parsing Sanity In Erlang
 
Of Rats And Dragons
Of Rats And DragonsOf Rats And Dragons
Of Rats And Dragons
 
Erlang/OTP for Rubyists
Erlang/OTP for RubyistsErlang/OTP for Rubyists
Erlang/OTP for Rubyists
 
Content Management That Won't Rot Your Brain
Content Management That Won't Rot Your BrainContent Management That Won't Rot Your Brain
Content Management That Won't Rot Your Brain
 

Dernier

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 

Dernier (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 

Riak with node.js

  • 1. Riak with node.js Sean Cribbs Mathias Meyer Developer Advocates basho
  • 2. Upcoming Events Mark Phillips, Community Manager mark@basho.com @pharkmillups basho
  • 3. Why Riak with node.js? basho
  • 4. Why Riak with node.js? • Simple to understand and use basho
  • 5. Why Riak with node.js? • Simple to understand and use • Flexible storage options basho
  • 6. Why Riak with node.js? • Simple to understand and use • Flexible storage options • Awesome client library (riak-js) basho
  • 7. Why Riak with node.js? • Simple to understand and use • Flexible storage options • Awesome client library (riak-js) • Fits lots of use-cases basho
  • 9. Getting Started Install Riak or Riak Search: http://downloads.basho.com basho
  • 10. Getting Started Install Riak or Riak Search: http://downloads.basho.com $ npm install riak-js basho
  • 11. Getting Started Install Riak or Riak Search: http://downloads.basho.com $ npm install riak-js $ git clone git://github.com/frank06/riak-js basho
  • 12. Getting Started Install Riak or Riak Search: http://downloads.basho.com $ npm install riak-js $ git clone git://github.com/frank06/riak-js Website: http://riakjs.org basho
  • 13. Basic Client Operations basho
  • 15. Basic Operations // Get a client var db = require('riak-js').getClient() basho
  • 16. Basic Operations // Get a client var db = require('riak-js').getClient() // Fetch an object db.get('webinars', 'node.js',   function(err, data) {     console.log("Found the webinar:" + sys.inspect(data))   }) basho
  • 17. Basic Operations // Get a client var db = require('riak-js').getClient() // Fetch an object typical node db.get('webinars', 'node.js', callback style   function(err, data) {     console.log("Found the webinar:" + sys.inspect(data))   }) basho
  • 18. Basic Operations // Get a client var db = require('riak-js').getClient() // Fetch an object typical node db.get('webinars', 'node.js', callback style   function(err, data) {     console.log("Found the webinar:" + sys.inspect(data))   }) // Store an object db.save('webinars', 'node.js',         {date:"2011-03-15",          title: "Riak with node.js",          presenters: ["Sean", "Mathias"]}) basho
  • 20. Basic Operations // Delete an object db.remove('webinars', 'node.js') basho
  • 21. Basic Operations // Delete an object db.remove('webinars', 'node.js') // Does this key exist? db.exists('frameworks', 'node.js') basho
  • 22. Basic Operations // Delete an object db.remove('webinars', 'node.js') // Does this key exist? db.exists('frameworks', 'node.js') // Give me them all db.getAll('frameworks') basho
  • 23. Basic Operations // Delete an object db.remove('webinars', 'node.js') // Does this key exist? db.exists('frameworks', 'node.js') // Give me them all db.getAll('frameworks') // But filter them too (uses MapReduce) db.getAll('frameworks', { where: { language: "javascript" }}) basho
  • 24. Basic Operations // Delete an object db.remove('webinars', 'node.js') // Does this key exist? db.exists('frameworks', 'node.js') // Give me them all db.getAll('frameworks') // But filter them too (uses MapReduce) db.getAll('frameworks', { where: { language: "javascript" }}) // How many are there? db.count('frameworks') basho
  • 25. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) function cb(err, data, META){ } basho
  • 26. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) basho
  • 27. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) • Request-time options basho
  • 28. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) • Request-time options •contentType basho
  • 29. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) • Request-time options •contentType •clientId basho
  • 30. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) • Request-time options •contentType •clientId • links, usermeta basho
  • 31. Meta Object db.save(‘bucket’, ‘key’, data, META, cb) • Request-time options •contentType •clientId • links, usermeta • quorums (r,w,dw), returnBody basho
  • 32. Meta Object function cb(err, data, META){ } basho
  • 33. Meta Object function cb(err, data, META){ } • Response-time metadata basho
  • 34. Meta Object function cb(err, data, META){ } • Response-time metadata • bucket, key, vclock basho
  • 35. Meta Object function cb(err, data, META){ } • Response-time metadata • bucket, key, vclock • links, usermeta basho
  • 36. Meta Object function cb(err, data, META){ } • Response-time metadata • bucket, key, vclock • links, usermeta • lastMod, etag, statusCode basho
  • 38. Using Meta // Add a link to the object db.get('frameworks', 'node.js',   function(err, data, meta){     meta.addLink({bucket:'vm', key:'v8', tag:'vm'});     db.save('frameworks', 'node.js', data, meta)   }) basho
  • 39. Using Meta // Add a link to the object db.get('frameworks', 'node.js',   function(err, data, meta){     meta.addLink({bucket:'vm', key:'v8', tag:'vm'});     db.save('frameworks', 'node.js', data, meta)   }) // Set the content type db.save('pages', 'index.html',         '<html><body>Hello, world!</body></html>',         {contentType: 'html'}) basho
  • 40. Querying Beyond Key-Value basho
  • 42. Link-walking // Find friends db.walk('people', 'sean', [['_','friend']]) basho
  • 43. Link-walking // Find friends db.walk('people', 'sean', [['_','friend']]) // Find acquaintances of friends db.walk('people', 'mathias',         [['_','friend'],          ['people','_']]) basho
  • 45. MapReduce // Execute a MapReduce query db.add('frameworks') // Use all keys in bucket   .map('Riak.mapValuesJson') // Map using a built-in   .run(function(err, data){ // Execute the query          console.log(data);        }) basho
  • 46. MapReduce // Execute a MapReduce query db.add('frameworks') // Use all keys in bucket   .map('Riak.mapValuesJson') // Map using a built-in   .run(function(err, data){ // Execute the query          console.log(data);        }) // Send a focused query db.add('frameworks', 'node.js') // Start with one key   .link({ bucket: "vm"}) // Follow some links   .map(function(obj){ // Map using an inline          var data =             Riak.mapValuesJson(obj)[0];          return [data.name]        })   .reduce('Riak.reduceSort') // Sort via reduce   .run() basho
  • 48. MapReduce // Initiate MapReduce with a key-filter db.add({ bucket: 'emails',          key_filters: [["ends_with", "basho.com"]] }) // Map with a phase-argument   .map({ name:'Riak.mapByFields',          arg: { joined:'2010-01-01' })   .run() basho
  • 50. Riak Search // Turn on automatic document indexing db.enableIndex('documents') basho
  • 51. Riak Search // Turn on automatic document indexing db.enableIndex('documents') // Perform a simple search db.search('documents', 'title:scalable') basho
  • 52. Riak Search // Turn on automatic document indexing db.enableIndex('documents') // Perform a simple search db.search('documents', 'title:scalable') // Start a MapReduce query with search db.addSearch('documents', 'title:scalable') // From here, add map and reduce phases basho
  • 55. Test Server // Add test server to your tests var TestServer = require('riak-js').TestServer basho
  • 56. Test Server // Add test server to your tests var TestServer = require('riak-js').TestServer var testServer = new TestServer({binDir: "/usr/local/bin"}) basho
  • 57. Test Server // Add test server to your tests var TestServer = require('riak-js').TestServer var testServer = new TestServer({binDir: "/usr/local/bin"}) var vows = require('vows'), assert = require('assert') basho
  • 58. Test Server // Add test server to your tests var TestServer = require('riak-js').TestServer var testServer = new TestServer({binDir: "/usr/local/bin"}) var vows = require('vows'), assert = require('assert') suite = vows.describe("Example tests") basho
  • 59. Test Server // Add test server to your tests var TestServer = require('riak-js').TestServer var testServer = new TestServer({binDir: "/usr/local/bin"}) var vows = require('vows'), assert = require('assert') suite = vows.describe("Example tests") // Bootstrap the test server suite.addBatch({   'setup':{     topic: function(){       var cb = this.callback       testServer.prepare(function(){ testServer.start(cb) })     }, basho
  • 60. Test Server // Add test server to your tests var TestServer = require('riak-js').TestServer var testServer = new TestServer({binDir: "/usr/local/bin"}) var vows = require('vows'), assert = require('assert') suite = vows.describe("Example tests") // Bootstrap the test server suite.addBatch({   'setup':{     topic: function(){       var cb = this.callback       testServer.prepare(function(){ testServer.start(cb) })     },    'works': function(){      assert.isTrue(testServer.started)    } }}) basho
  • 62. Test Server // Clear data before a test suite.addBatch({   'stores data':{      topic: function(){        var cb = this.callback        testServer.clear(function(){          db.save('companies', 'basho', {city:"Cambridge"}, cb)        })      },      'successfully': function(err, data, meta){ }   }}) basho
  • 63. Test Server // Clear data before a test suite.addBatch({   'stores data':{      topic: function(){        var cb = this.callback        testServer.clear(function(){          db.save('companies', 'basho', {city:"Cambridge"}, cb)        })      },      'successfully': function(err, data, meta){ }   }}) // Shutdown the server at the end suite.addBatch({   'teardown':{     topic: function() {       testServer.stop(this.callback)     },     'works':function(){       assert.ok(!testServer.started)     }   }}) basho
  • 64. Demo & Code https://github.com/basho/riaktant basho
  • 65. Hosted on Joyent http://no.de Demo & Code https://github.com/basho/riaktant basho
  • 66. Plug Interested in learning about support, consulting, or Enterprise features? Email info@basho.com or go to http://www.basho.com/ contact.php to talk with us. www.basho.com basho
  • 67. Plug Interested in learning about support, consulting, or Enterprise features? Email info@basho.com or go to http://www.basho.com/ contact.php to talk with us. www.basho.com mathias@basho.com @roidrage sean@basho.com @seancribbs basho

Notes de l'éditeur

  1. \n
  2. Erlang Factory SF Bay next week - Free Erlounge Thursday night\nSponsoring JSConf and NodeConf May 1-5\nPossible Riak hackathon in PDX, contact Mark about any events\n
  3. * Key-value API, mostly, over HTTP\n* key-value, search, large files || RAM, disk\n* riak-js rules\n* Demo will show a write-heavy app\n
  4. * Key-value API, mostly, over HTTP\n* key-value, search, large files || RAM, disk\n* riak-js rules\n* Demo will show a write-heavy app\n
  5. * Key-value API, mostly, over HTTP\n* key-value, search, large files || RAM, disk\n* riak-js rules\n* Demo will show a write-heavy app\n
  6. * Key-value API, mostly, over HTTP\n* key-value, search, large files || RAM, disk\n* riak-js rules\n* Demo will show a write-heavy app\n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  13. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  14. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  15. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  16. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  17. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  18. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  19. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  20. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  21. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  22. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  23. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  24. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  25. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  26. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  27. Pretty much every API function takes a callback which receives the results - will be eliding the callback except where necessary.\n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n