Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Alvin Richards
alvin@10gen.com
• Operations/sec go up
• Storage needs go up
• Capacity
• IOPs
• Complexity goes up
• Caching
throughput
Sunday, May 1, 2011
MongoDB Scaling - Single Node
read
node_a1
write
node_b1
node_a1
write
node_c1
node_b1
node_a1
write
shard1
node_c1
node_b1
node_a1
write
shard1 shard2
node_c1 node_c2
node_b1 node_b2
node_a1 node_a2
write
write
∞,
5)
buckets
[-‐
[5,
7) [7,
9) [9,
10)
[10,
∞)
buckets
{...} {...} {...} {...} {...} {...} {...} {...} {...} {...} {...}
db.posts.save({
title:
“My
First
blog”,
tags:
[“mongodb”,
“cool”],
comments:
[
{author:
“James”,
ts
:
new
Date()}
]
});
db.posts.ensureIndex({“comments.author”:
1})
db.posts.ensureIndex({“tags”:
1})
scan
terminate
index
on
x
• Ad-hoc partitioning
• Consistent hashing
• Amazon Dynamo
• Range based partitioning
• Google BigTable
• Yahoo! PNUTS
• MongoDB
-∞ +∞
-∞ +∞
-∞ 40 41 +∞
•Data in inserted
•Ranges are split into more “chunks”
Sunday, May 1, 2011
How MongoDB Sharding works
-∞ +∞
-∞ 40 41 +∞
41 50 51 +∞
•More Data in inserted
•Ranges are split into more“chunks”
Sunday, May 1, 2011
How MongoDB Sharding works
-∞ +∞
-∞ 40 41 +∞
41 50 51 +∞
51 60 61 +∞
-∞ +∞
-∞ 40 41 +∞
41 50 51 +∞
51 60 61 +∞
shard1
-∞ 40
41 50
51 60
61 +∞
Sunday, May 1, 2011
How MongoDB Sharding works
-∞ 40
41 50
51 60
61 +∞
Sunday, May 1, 2011
How MongoDB Sharding works
shard1
-∞ 40
41 50
51 60
61 +∞
Sunday, May 1, 2011
How MongoDB Sharding works
shard1 shard2
-∞ 40
41 50
51 60
61 +∞
Sunday, May 1, 2011
How MongoDB Sharding works
•Good
:
{server:1}
• All data for one server is in a single chunk
• Chunk cannot be split any smaller
•Better
:
{server:1,time:1}
‣
Chunk
can
be
split
by
millisecond
•Better
:
{server:1,application:1,time:1}
‣More key values to enable writes to all shards
Sunday, May 1, 2011
Sharding Features
• Variations:
•Master / slave
•Replica Sets
Member
1
Member
3
Member 2
Member
1
Member
3
Member
2
PRIMARY
Member
2
DOWN
Member
1
Member
3
PRIMARY
Member
2
DOWN
Member
1
Member
3
PRIMARY
Member
2
RECOVERING
•Automatic recovery
Member
1
Member
3
PRIMARY
Member 2
slaveOk()
- driver will send read requests to Secondaries
- driver will always send writes to Primary
Java examples
-‐
DB.slaveOk()
-‐
Collection.slaveOk()
-‐
find(q).addOption(Bytes.QUERYOPTION_SLAVEOK);
>
cfg
=
{
_id
:
"acme_a",
members
:
[
{
_id
:
0,
host
:
"sf1.acme.com"
},
{
_id
:
1,
host
:
"sf2.acme.com"
},
{
_id
:
2,
host
:
"sf3.acme.com"
}
]
}
>
use
admin
>
db.runCommand(
{
replSetInitiate
:
cfg
}
)
• Normal {priority:1}
• Passive {priority:0}
• Cannot be elected as PRIMARY
• Arbiters
• Can vote in an election
• Do not hold any data
• Hidden {hidden:True}
We’re Hiring !
alvin@10gen.com