MongoDB at FrozenRails
- 2. Non-relational
Operational Stores
(“NoSQL”)
New Gen. OLAP RDBMS
(vertica,
aster,
greenplum) (Oracle,
MySQL)
- 3. NoSQL Really Means:
non-‐relational,
next-‐generation
operational
datastores
and
databases
- 4. no
joins
+ no
complex
transactions
Horizontally Scalable
Architectures
- 5. no
joins
+ no
complex
transactions
New Data Models
- 7. Data Models
Key
/
Value
memcached,
Dynamo
Tabular
BigTable
Document
Oriented
MongoDB,
CouchDB
- 9. JSON-style Documents
represented
as
BSON
{“hello”:
“world”}
x16x00x00x00x02hello
x00x06x00x00x00world
x00x00
http://bsonspec.org
- 10. Flexible “Schemas”
{“author”:
“eliot”,
{“author”:
“mike”,
“text”:
“...”,
“text”:
“...”}
“tags”:
[“mongodb”]}
- 14. Replication
master slave
master
master slave
slave slave slave master master
slave master
- 15. Auto-sharding
Shards
mongod mongod mongod
...
Config mongod mongod mongod
Servers
mongod
mongod
mongod
mongos mongos ...
client
- 18. Less Good At
highly
transactional
ad-‐hoc
business
intelligence
problems
that
require
SQL
- 19. A Quick Aside
_id special
key
present
in
all
documents
unique
across
a
Collection
any
type
you
want
- 22. New Post
post
=
{:author
=>
“mike”,
:date
=>
Time.new,
:text
=>
“my
blog
post...”,
:tags
=>
[“mongodb”,
“ruby”]}
db[“posts”].save(post)
- 23. Embedding a Comment
c
=
{:author
=>
“eliot”,
:date
=>
Time.new,
:text
=>
“great
post!”}
db[“posts”].update({:_id
=>
post[:_id]},
{:$push
=>
{:comments
=>
c}})
- 26. Posts Since April 1
april_1
=
Time.utc(2010,
4,
1)
db[“posts”].find(:date
=>
{:$gt
=>
april_1})
- 28. Posts With a Tag
db[“posts”].find(:tags
=>
“mongodb”)
...and Fast
(multi-‐key
indexes)
db[“posts”].create_index(“tags”)
- 29. Indexing / Querying
on Embedded Docs
(dot
notation)
db[“posts”].create_index(“comments.author”)
db[“posts”].find(“comments.author”
=>
“eliot”)
- 31. Basic Paging
page
=
2
page_size
=
15
db[“posts”].find.limit(page_size)
.skip(page
*
page_size)
- 32. Migration: Adding Titles
(just
start
adding
them)
post
=
{:author
=>
“mike”,
:date
=>
Time.new,
:text
=>
“another
blog
post...”,
:tags
=>
[“mongodb”],
:title
=>
“MongoDB
for
Fun
and
Profit”}
post_id
=
db[“posts”].save(post)
- 33. Advanced Queries
$gt,
$lt,
$gte,
$lte,
$ne,
$all,
$in,
$nin
$not,
$mod,
$size,
$exists,
$type,
$elemMatch
db[“posts”].find(:$where
=>
“this.author
==
‘mike’
||
this.title
==
‘foo’”)
- 36. Download MongoDB
http://www.mongodb.org
and
let
us
know
what
you
think
@mdirolf
@mongodb
Editor's Notes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Collection (logical groupings of documents)
Indexes are per-collection
-
-
-
-
-
-
-
-
-
-
-
-
-
- blog post
twitter