Mongodb my

26
nonSQL databases alexey gaziev

description

Presentation for piterrb about non-sql db with accent on mongodb

Transcript of Mongodb my

Page 1: Mongodb my

nonSQL databasesalexey gaziev

Page 2: Mongodb my

RDBMS

• Great for many apps

• Shortcomings

• Scalability

• Flexibility

Page 3: Mongodb my

Other DBMS

• Flat file

• Hierarchical

• Network

• Document-oriented

• Object-oriented

Page 4: Mongodb my

CAP Theorem

• Consistency

• Availability

• Tolerance to network Partitions

Pick two

http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

С A

P

Page 5: Mongodb my

ACID & BASE

• Atomicity

• Consistency

• Isolation

• Durability

• Basically Available

• Soft state

• Eventually consistent

Page 6: Mongodb my

ACID vs. BASE

• Strong consistency

• Isolation

• Focus on “commit”

• Nested transactions

• Availability?

• Conservative

• Difficult evolution (schema)

• Weak consistency

• Availability first

• Best effort

• Approximate answers

• Agressive (optimistic)

• Simpler!

• Faster

• Easier evolution

ACID BASE

Page 7: Mongodb my
Page 8: Mongodb my

Intro

Key/Values store

memcached

RDBMS

Depth of Functionality

Scalability & Performance

Page 9: Mongodb my

Features• Collection oriented storage: easy storage of object/

JSON -style data• Dynamic queries• Full index support, including on inner objects and

embedded arrays• Query profiling• Replication and fail-over support• Efficient storage of binary data including large objects (e.g. photos and videos)

• Auto-sharding for cloud-level scalability (currently in alpha)

• Commercial support available

Page 10: Mongodb my

Great for

• Websites

• Caching

• High volume, low value

• High scalability

• Storage of program objects and json

Page 11: Mongodb my

Not as great for

• Highly transactional

• Ad-hoc business intelligence

• Problems requiring SQL

Page 12: Mongodb my

Installation

Page 13: Mongodb my

Collection

• Think table, but with no schema

• For grouping into smaller query sets (speed)

• Each top entity in your app would have its own collection (users, articles, etc.)

• Full index support

Page 14: Mongodb my

Document

• Stored in collection, think record or row

• Can have _id key that works like primary key in MySQL

• Two options for relationships: subdocument or db reference

Page 15: Mongodb my

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' } ]}

Page 16: Mongodb my

Basics$ bin/mongod &$ bin/mongo...> use mydb> j = { name: "mongo"};{"name" : "mongo"}> t = { x : 3 };{ "x" : 3 }> db.things.save(j);> db.things.save(t);> db.things.find();in cursor for : DBQuery: example.things ->{"name" : "mongo" , "_id" : "497cf60751712cf7758+dbb"}{"x" : 3 , "_id" : "497cf61651712cf7758+dbc"}>

Page 17: Mongodb my

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’})

Page 18: Mongodb my

Querying 2

• $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)

Page 19: Mongodb my

Dynamic querying

Page 20: Mongodb my

Ruby support

• mongo-ruby-driver

• Pure Ruby, with optional C extension

• MongoRecord

• ORM like functionality

• Other mappers

Page 21: Mongodb my

Ruby basics

• Connect:

• db = Mongo.new.db(‘my-database’)

• coll = db.collection(‘players’)

• Insert:

• coll.insert (“name” => “mike”, “age” => ...

• Query:

• coll.find (“age” => 35)

Page 22: Mongodb my

Grid FS

• File storage in MongoDB

• IO-like API for Ruby

Page 23: Mongodb my

Other cool stuff

• Capped collections

• Upserts

• Multikeys

Page 24: Mongodb my

Resources

• http://spitfiresky.com/blog/recap-of-my-sdruby-presentation-on-mongodb.html

• http://railstips.org/2009/6/3/what-if-a-key-value-store-mated-with-a-relational-database-system

• http://www.mongodb.org/display/DOCS/Production+Deployments

• http://www.mongohq.com/home

Page 25: Mongodb my

Resources 2

• http://api.mongodb.org/ruby/0.15.1/index.html

• http://www.engineyard.com/blog/2009/mongodb-a-light-in-the-darkness-key-value-stores-part-5

• http://queue.acm.org/detail.cfm?id=1394128

Page 26: Mongodb my

thanks!