0
Ruby &
                                                       ^
                              Hands on with MongoDB
      ...
Wednesday, October 28, 2009
x
                                  No SQL?


                                     x




Wednesday, October 28, 2009
When does NOSQL make sense?
               ★ Your data is stored and retrieved mainly by primary key, without
            ...
Key value stores
                    Project Voldemort

                                                               me ...
Tokyo Cabinet: Popular with Rubyists, Big in Japan




Wednesday, October 28, 2009
Tokyo Cabinet: Popular with Rubyists, Big in Japan

               ★ Lightning fast
               ★ Works best for at obj...
More document-oriented solutions



Wednesday, October 28, 2009
Wednesday, October 28, 2009
CouchDB

               Apache CouchDB is a distributed, fault-tolerant and
               schema-free document-oriented d...
Erlang + Javascript



Wednesday, October 28, 2009
Map + reduce



Wednesday, October 28, 2009
Very cool



Wednesday, October 28, 2009
Plenty o’ Ruby to go around



Wednesday, October 28, 2009
Ruby libraries for CouchDB

                CouchRest
                Basic model

                                       ...
Document stores:
                                                      a lmost*
                                 Throw out...
SQL                                             CouchDB

                              Prede ned, explicit schema         ...
SQL                                           CouchDB

                              Prede ned, explicit schema           ...
Wednesday, October 28, 2009
because this is BIG




Wednesday, October 28, 2009
Wednesday, October 28, 2009
Runs like Hayes.
                              Hits like Mays.




Wednesday, October 28, 2009
MongoDB
                              x




Wednesday, October 28, 2009
Let's just skip to here already!



                              x




Wednesday, October 28, 2009
Introducing
               ★ Built For Speedcan be very fast

               ★ Dynamic Queries and Indexes
               ...
MongoDB is great for
                   ★ Websites
                   ★ Caching
                   ★ High volume, low valu...
Not as great for
                   ★ Highly transactional
                   ★ Ad-hoc business intelligence
             ...
Installation
                   ★ mkdir -p /data/db
                   ★ download pre-built for OSX and unzip to /usr/loca...
what's in the box?
               Contents of mongo/bin
                   ★ mongod - The MongoDB server
                 ...
Some new terms



Wednesday, October 28, 2009
When I say

                         database


Wednesday, October 28, 2009
When I say     think

                         database    database


Wednesday, October 28, 2009
When I say     think

                         database    database
                                     Well that one isn...
Databases in MongoDB
                   ★ Made up of multiple collections
                   ★ Are created on-the- y when ...
When I say

                         collection


Wednesday, October 28, 2009
When I say       think

                         collection    table


Wednesday, October 28, 2009
Collections in MongoDB
                   ★ Schema-less    but typed!


                   ★ For grouping documents into s...
When I say

                         document


Wednesday, October 28, 2009
When I say     think

                         document    record or row


Wednesday, October 28, 2009
Document
                   ★ Stored in a collection
                   ★ Can have _id key that works like primary keys in...
Document Storage (BSON)
                         { author: 'joe',
                              created: Date('03-28-2009'...
Document Storage (BSON)
                         { author: 'joe',
                              created: Date('03-28-2009'...
Document Storage (BSON)                            B is for Binary

                         { author: 'joe',
            ...
That looks like JSON




Wednesday, October 28, 2009
So does this




                              jason.to_json
Wednesday, October 28, 2009
Where's the Ruby?




Wednesday, October 28, 2009
Querying
               db.collection.find({'first_name': 'John'}) # finds all Johns

               db.collection.find({'...
More
               Querying
               $in, $nin, $all, $ne, $gt, $gte, $lt, $lte, $size, $where

               :fie...
10 Gen projects on the hub
                   ★ mongo-ruby-driver http://github.com/mongodb/mongo-ruby-
                  ...
MongoMapper               from @jnunemaker

                   ★ Mongo is not MySQL
                   ★ DSL for modeling ...
MongoMapper               from @jnunemaker

                   ★ Mongo is not MySQL
                   ★ DSL for modeling ...
Features
         ★ Typecasting
         ★ Callbacks (ActiveSupport Callbacks)
         ★ Validations
         ★ Connectio...
Example
              class User
                include MongoMapper::Document
                key :name, String, :require...
MongoDB fun
                   ★ Capped collections (think memcache, actually used for replication)
                   ★ U...
So, is it ready for Prime Time?
                   ★ Disqus
                   ★ SourceForge
                   ★ TweetCon...
Lessons learned in production                         the fine print

                   ★ The laws of computing are still...
How can you help?
                   ★ We need an awesome admin GUI
                   ★ Port some plugins (might get easi...
Resources              an d thanks for having me!

                 http://mongodb.org
                 http://www.10gen.c...
Upcoming SlideShare
Loading in...5
×

Hands on with Ruby & MongoDB

11,543

Published on

Slides from talk at Austin on Rails on using MongoDB with Ruby.

Published in: Technology, Education
3 Comments
35 Likes
Statistics
Notes
  • Write a comment...
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • l like
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • i like this slide style
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
11,543
On Slideshare
0
From Embeds
0
Number of Embeds
36
Actions
Shares
0
Downloads
285
Comments
3
Likes
35
Embeds 0
No embeds

No notes for slide

Transcript of "Hands on with Ruby & MongoDB"

  1. 1. Ruby & ^ Hands on with MongoDB Austin on Rails October 27, 2009 WYNNNETHERLAND Wednesday, October 28, 2009
  2. 2. Wednesday, October 28, 2009
  3. 3. x No SQL? x Wednesday, October 28, 2009
  4. 4. When does NOSQL make sense? ★ Your data is stored and retrieved mainly by primary key, without complex joins. ★ You have a non-trivial amount of data, and the thought of managing lots of RDBMS shards and replication failure scenarios gives you the fear. http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/ Wednesday, October 28, 2009
  5. 5. Key value stores Project Voldemort me ver y cool Ringo Scalaris So space Kai ojects in this Dynomite MemcacheDB pr ThruDB CouchDB Cassandra HBase Hypertable Redis Tokyo Cabinet/Tyrant http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/ Wednesday, October 28, 2009
  6. 6. Tokyo Cabinet: Popular with Rubyists, Big in Japan Wednesday, October 28, 2009
  7. 7. Tokyo Cabinet: Popular with Rubyists, Big in Japan ★ Lightning fast ★ Works best for at objects ★ Tokyo Tyrant for network access http://www.igvita.com/2009/02/13/tokyo-cabinet-beyond-key-value-store/ Wednesday, October 28, 2009
  8. 8. More document-oriented solutions Wednesday, October 28, 2009
  9. 9. Wednesday, October 28, 2009
  10. 10. CouchDB Apache CouchDB is a distributed, fault-tolerant and schema-free document-oriented database accessible via a RESTful HTTP/JSON API. http://couchdb.apache.org/ Wednesday, October 28, 2009
  11. 11. Erlang + Javascript Wednesday, October 28, 2009
  12. 12. Map + reduce Wednesday, October 28, 2009
  13. 13. Very cool Wednesday, October 28, 2009
  14. 14. Plenty o’ Ruby to go around Wednesday, October 28, 2009
  15. 15. Ruby libraries for CouchDB CouchRest Basic model om t he RelaxDB Fr ils talk on Ra CouchPotato CouchFoo A ustin ActiveCouch http://www.slideshare.net/brianthecoder/couchdb Wednesday, October 28, 2009
  16. 16. Document stores: a lmost* Throw out everything you learned about DB design * more on this later Wednesday, October 28, 2009
  17. 17. SQL CouchDB Prede ned, explicit schema Dynamic, implicit schema Collection of named documents with varying Uniform tables of data structure Normalized. Objects spread across tables. Denormalized. Docs usually self contained. Data Duplication reduced. often duplicated. Must know schema to read/write a complete Must know only document name object Dynamic queries of static schemas Static queries of dynamic schemas http://damienkatz.net/files/What is CouchDB.pdf http://damienkatz.net/files/What is CouchDB.pdf Wednesday, October 28, 2009
  18. 18. SQL CouchDB Prede ned, explicit schema Dynamic, implicit schema Collection of named documents with varying Uniform tables of data structure Normalized. Objects spread across tables. Duplication reduced. TheDenormalized. Docs usually selfdetails devil'soften duplicated.contained. Data in the Must know schema to read/write a complete Must know only document name object Dynamic queries of static schemas Static queries of dynamic schemas http://damienkatz.net/files/What is CouchDB.pdf http://damienkatz.net/files/What is CouchDB.pdf Wednesday, October 28, 2009
  19. 19. Wednesday, October 28, 2009
  20. 20. because this is BIG Wednesday, October 28, 2009
  21. 21. Wednesday, October 28, 2009
  22. 22. Runs like Hayes. Hits like Mays. Wednesday, October 28, 2009
  23. 23. MongoDB x Wednesday, October 28, 2009
  24. 24. Let's just skip to here already! x Wednesday, October 28, 2009
  25. 25. Introducing ★ Built For Speedcan be very fast ★ Dynamic Queries and Indexes ★ Replication and Failover ★ Sharding ★ Map / Reduce Wednesday, October 28, 2009
  26. 26. MongoDB is great for ★ Websites ★ Caching ★ High volume, low value ★ High scalability stash the hash ★ Storage of program objects and JSON Wednesday, October 28, 2009
  27. 27. Not as great for ★ Highly transactional ★ Ad-hoc business intelligence ★ Problems requiring SQL Wednesday, October 28, 2009
  28. 28. Installation ★ mkdir -p /data/db ★ download pre-built for OSX and unzip to /usr/local/ ★ cp -R /usr/local/pathtomongo/bin /usr/local/bin Ruby driver for MongoDB ★ sudo gem install mongo Native C ★ sudo gem install mongo_ext extensions ( go turbo! ) ★ sudo gem install mongo_mapper Wednesday, October 28, 2009
  29. 29. what's in the box? Contents of mongo/bin ★ mongod - The MongoDB server ★ mongo - the JavaScript interactive shell ★ mongoexport - export data as JSON or csv ★ mongoimport - As advertised was? ★ mongodump - Like mysqldump why? What did you think it ★ mongorestore - Restore from mongodump les ★ mongos - Auto-sharding module (getting better with every build) Wednesday, October 28, 2009
  30. 30. Some new terms Wednesday, October 28, 2009
  31. 31. When I say database Wednesday, October 28, 2009
  32. 32. When I say think database database Wednesday, October 28, 2009
  33. 33. When I say think database database Well that one isn't new... Wednesday, October 28, 2009
  34. 34. Databases in MongoDB ★ Made up of multiple collections ★ Are created on-the- y when rst referenced Wednesday, October 28, 2009
  35. 35. When I say collection Wednesday, October 28, 2009
  36. 36. When I say think collection table Wednesday, October 28, 2009
  37. 37. Collections in MongoDB ★ Schema-less but typed! ★ For grouping documents into smaller query sets (speed) ★ Indexable by one or more key ★ Are created on-the- y when rst referenced ★ Capped collections: Fixed size, older records dropped after limit reached Wednesday, October 28, 2009
  38. 38. When I say document Wednesday, October 28, 2009
  39. 39. When I say think document record or row Wednesday, October 28, 2009
  40. 40. Document ★ Stored in a collection ★ Can have _id key that works like primary keys in MySQL ★ Supports relationships: subdocument or db reference Wednesday, October 28, 2009
  41. 41. Document Storage (BSON) { author: 'joe', created: Date('03-28-2009'), title: 'Yet another blog post', text: 'Here is the text...', tags: [ 'example', 'joe' ], comments: [ { author: 'jim', comment: 'I disagree' }, { author: 'nancy', comment: 'Good post' } ] } http://www.mongodb.org/display/DOCS/BSON Wednesday, October 28, 2009
  42. 42. Document Storage (BSON) { author: 'joe', created: Date('03-28-2009'), title: 'Yet another blog post', text: 'Here is the text...', tags: [ 'example', 'joe' ], comments: [ { author: 'jim', comment: 'I disagree' }, { author: 'nancy', comment: 'Good post' } ] } Sure wish JSON did this... http://www.mongodb.org/display/DOCS/BSON Wednesday, October 28, 2009
  43. 43. Document Storage (BSON) B is for Binary { author: 'joe', created: Date('03-28-2009'), title: 'Yet another blog post', text: 'Here is the text...', tags: [ 'example', 'joe' ], comments: [ { author: 'jim', comment: 'I disagree' }, { author: 'nancy', comment: 'Good post' } ] } Sure wish JSON did this... http://www.mongodb.org/display/DOCS/BSON Wednesday, October 28, 2009
  44. 44. That looks like JSON Wednesday, October 28, 2009
  45. 45. So does this jason.to_json Wednesday, October 28, 2009
  46. 46. Where's the Ruby? Wednesday, October 28, 2009
  47. 47. Querying db.collection.find({'first_name': 'John'}) # finds all Johns db.collection.find({'first_name': /^wynn/i}) # regex db.collection.find_first({'_id':1}) # finds first with _id of 1 db.collection.find({'age': {'$gte': 21}}) # finds possible drinkers db.collection.find({'author.first_name':'John'}) # subdocument db.collection.find({$where:'this.age >= 6 && this.age <= 18'}) Wednesday, October 28, 2009
  48. 48. More Querying $in, $nin, $all, $ne, $gt, $gte, $lt, $lte, $size, $where :fields (like :select in active record) :limit, :offset for pagination :sort ascending or descending [['foo', 1], ['bar', -1]] count and group (uses map/reduce) db.collection.mapReduce(mapfunction,reducefunction[,options]); Wednesday, October 28, 2009
  49. 49. 10 Gen projects on the hub ★ mongo-ruby-driver http://github.com/mongodb/mongo-ruby- driver ★ mongorecord http://github.com/mongodb/mongo-activerecord- ruby Wednesday, October 28, 2009
  50. 50. MongoMapper from @jnunemaker ★ Mongo is not MySQL ★ DSL for modeling domain should also teach you Mongo ★ It sounded fun ★ Just released version 0.5.6 Wednesday, October 28, 2009
  51. 51. MongoMapper from @jnunemaker ★ Mongo is not MySQL ★ DSL for modeling domain should also teach you Mongo ★ It sounded fun ★ Just released version 0.5.6 I voted for "Nunemapper" Wednesday, October 28, 2009
  52. 52. Features ★ Typecasting ★ Callbacks (ActiveSupport Callbacks) ★ Validations ★ Connection and database can differ per document ★ Create and Update with single or multiple ★ Delete and Destroy and _all counterparts Be careful. Ordering can be tricky. ★ Find: id, ids, :all, : rst, :last ★ Associations Wednesday, October 28, 2009
  53. 53. Example class User include MongoMapper::Document key :name, String, :required => true, :length => 5..100 key :email, String, :required => true, :index => true key :age, Integer, :numeric => true key :active, Boolean, :default => true one :address many :articles end Included as module, not subclassed (this may change soon). class Address include MongoMapper::Document key :street, String key :city, String key :state, String, :length => 2 key :zip, Integer, :numeric => true, :length => 5 end Wednesday, October 28, 2009
  54. 54. MongoDB fun ★ Capped collections (think memcache, actually used for replication) ★ Upserts db.collection.update({'_id':1}, {'$inc': {'views':1}}) ★ Multikeys (think tagging and full text search) ★ GridFS and auto-sharding Wednesday, October 28, 2009
  55. 55. So, is it ready for Prime Time? ★ Disqus ★ SourceForge ★ TweetCongress, GovTwit -- Floxee.com ★ TweetSaver.com ★ Mozilla Ubiquity Herd Ask these folks! Wednesday, October 28, 2009
  56. 56. Lessons learned in production the fine print ★ The laws of computing are still in effect ★ Indexes are important no matter what the salesman told ya about performance ★ Data modeling. Deep or Wide? The answer is yes! ★ MongoDB and MongoMapper are in active development Very responsive yet very volatile changes! Wednesday, October 28, 2009
  57. 57. How can you help? ★ We need an awesome admin GUI ★ Port some plugins (might get easier with ActiveModel support coming soon) ★ Build something cool Wednesday, October 28, 2009
  58. 58. Resources an d thanks for having me! http://mongodb.org http://www.10gen.com the very cool company behind MongoDB http://groups.google.com/group/mongomapper http://groups.google.com/group/mongodb-user http://squeejee.com Questions? I'm @pengwynn on Twitter http://wynnnetherland.com the very new blog Wednesday, October 28, 2009
  1. A particular slide catching your eye?

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

×