5. mongos
• Shard Router
Shards
• Acts just like a MongoD
mongod mongod mongod
mongod mongod mongod
...
• 1 or as many as you
Config
mongod mongod mongod want
Servers
mongod
• Can run on App
mongod
mongos mongos ...
Servers
• Caches meta-data from
mongod
client client client client
config servers
6. Config Server
• 3 of them
Shards
• Changes use 2 phase
mongod mongod mongod
mongod mongod mongod
... commit
Config
mongod mongod mongod • If any are down, meta
Servers
mongod
data goes read only
mongod
mongos mongos ...
• System is online as
mongod
client client client client
long as 1/3 is up
16. Chunks
Min Key Max Key Shard
-∞ adam@10gen.com 1
adam@10gen.com jared@10gen.com 1
jared@10gen.com scott@10gen.com 1
scott@10gen.com +∞ 1
• Stored in the config servers
• Cached in MongoS
• Used to route requests and keep cluster
balanced
27. Queries
By Shard Routed db.users.find(
{email: “jsr@10gen.com”})
Key
Sorted by Routed in order db.users.find().sort({email:-1})
shard key
Find by non Scatter Gather db.users.find({state:”CA”})
shard key
Sorted by Distributed db.users.find().sort({state:1})
merge sort
non shard
key
29. User Profiles
{
• Shard by email
name: “Jared”,
email: “jsr@10gen.com”, • Lookup by email hits
addresses: [ 1 node
{state: “CA”}
] • Index on
} {“addresses.state”:1}
30. Activity Stream
{
• Shard by user_id
user_id: “jsr@10gen.com”,
event_id: “Logged in”, • Looking up a stream
data: “…” hits 1 node
}
• Writing is evenly
distributed
• Index on {“event_id”:1}
for deletes
31. Photos
{
• What’s the right key?
photo_id: ???,
data: BinData(…) – Auto Increment?
} – MD5( data )
– Now() + MD5(data)
– Month() + MD5(data)