Mongodb Indyrb

3,301 views

Published on

Presentation for Indianapolis, IN Ruby Group.

Published in: Technology, Education
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,301
On SlideShare
0
From Embeds
0
Number of Embeds
1,186
Actions
Shares
0
Downloads
53
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide
  • find always returns a cursor that you can keep iterating through
  • Mongodb Indyrb

    1. 1. WARNING!!! When I get excited, I talk fast. Feel free to remind me to slow down.
    2. 2. FEEDBACK @jnunemaker and @mongodb
    3. 3. WHY? WHAT? HOW?
    4. 4. WHY?
    5. 5. • Scaling, schmaling • Hammer/Nail • Example (Harmony http://harmonyapp.com)
    6. 6. WHAT?
    7. 7. INTRO • Built For Speed • Document/Collection Oriented • Dynamic Queries and Indexes • Replication and Failover
    8. 8. GREAT FOR • Websites • Caching • High volume, low value • High scalability • Storage of program objects and json
    9. 9. NOT AS GREAT FOR • Highly transactional • Ad-hoc business intelligence • Problems requiring SQL
    10. 10. INSTALLATION • mkdir -p /data/db • download, unzip, mongod run • http://video.railstips.org/mongomapper-demo/
    11. 11. DATABASE • same concept as mysql • made up of collections
    12. 12. COLLECTION • Think table, but with no schema • For grouping documents into smaller query sets (speed) • Eachtop level entity in your app would have its own collection (users, articles, etc.) • Indexable by one or more key
    13. 13. DOCUMENT • Stored in a collection, think record or row • Can have _id key that works like primary keys in MySQL • Three options for relationships: embedded document, foreign keys, or db reference
    14. 14. QUERYING • db.collection.find({‘first_name’: ‘John’}) # finds all Johns • db.collection.find({‘first_name’: /^J/}) # regex • db.collection.find_first({‘_id’:1}) # finds first with _id of 1 • db.collection.find({‘age’: {‘$gt’: 21}}) # finds possible drinkers • db.collection.find({‘author.first_name’:‘John’}) # subdocument • db.collection.find({$where:‘this.age >= 6 && this.age <= 18’})
    15. 15. 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)
    16. 16. HOW?
    17. 17. HOW DO YOU USE IT WITH RUBY • mongo-ruby-driver http://github.com/mongodb/mongo-ruby- driver • activerecord adapter http://github.com/mongodb/ activerecord-mongo-adapter • mongorecord http://github.com/mongodb/mongo- activerecord-ruby
    18. 18. NUNEMAPPER (MONGOMAPPER) • Mongo is not MySQL • DSL for modeling domain should also teach you Mongo • It sounded fun • Major appreciation for ORM’s
    19. 19. FEATURES • Typecasting • Create and Update with single or multiple • Callbacks(ActiveSupport Callbacks) • Delete and Destroy and _all counterparts • Validations (using my fork of validatable) • Find: id, ids, :all, :first, :last • Connection and database • Associations can differ per document
    20. 20. 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 key :address, Address many :articles end class Address include MongoMapper::EmbeddedDocument key :street, String key :city, String key :state, String, :length => 2 key :zip, Integer, :numeric => true, :length => 5 end
    21. 21. RANDOM AWESOMENESS • 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
    22. 22. LINKS • http://railstips.org/2009/6/3/what-if-a-key-value-store-mated-with-a-relational-database-system • http://railstips.org/2009/6/27/mongomapper-the-rad-mongo-wrapper • http://railstips.org/2009/7/23/getting-started-with-mongomapper-and-rails • http://locomotivation.squeejee.com/post/117119353/mongodb-ruby-friendly-document-storage- that-doesnt-rhyme • http://mongodb.com/ • http://10gen.com
    23. 23. John Nunemaker http://orderedlist.com http://railstips.org

    ×