2010 mongo sv-shardinginternals

21
Eliot Horowitz @eliothorowitz MongoSV December 3, 2010 Sharding Internals

Transcript of 2010 mongo sv-shardinginternals

Page 1: 2010 mongo sv-shardinginternals

Eliot Horowitz@eliothorowitz

MongoSVDecember 3, 2010

Sharding Internals

Page 2: 2010 mongo sv-shardinginternals

MongoDB Sharding

• Scale horizontally for data size, index size, write and consistent read scaling

• Distribute databases, collections or a objects in a collection

• Auto-balancing, migrations, management happen with no down time

Page 3: 2010 mongo sv-shardinginternals

• Choose how you partition data

• Can convert from single master to sharded system with no downtime

• Same features as non-sharding single master

• Fully consistent

Page 4: 2010 mongo sv-shardinginternals

Range Based

• collection is broken into chunks by range

• chunks default to 64mb or 100,000 objects

MIN MAX LOCATION

A F shard1

F M shard1

M R shard2

R Z shard3

Page 5: 2010 mongo sv-shardinginternals

Architecture

client

mongos ...mongos

mongodmongod

mongod mongod

mongod

mongod...

Shards

mongod

mongod

mongod

ConfigServers

Page 6: 2010 mongo sv-shardinginternals

Shards

• Can be master, master/slave or replica sets

• Replica sets gives sharding + full auto-failover

• Regular mongod processes

Page 7: 2010 mongo sv-shardinginternals

Config Servers

• 3 of them

• changes are made with 2 phase commit

• if any are down, meta data goes read only

• system is online as long as 1/3 is up

Page 8: 2010 mongo sv-shardinginternals

mongos

• Sharding Router

• Acts just like a mongod to clients

• Can have 1 or as many as you want

• Can run on appserver so no extra network traffic

• Cache meta data from config servers

Page 9: 2010 mongo sv-shardinginternals

Writes

• Inserts : require shard key, routed

• Removes: routed and/or scattered

• Updates: routed or scattered

Page 10: 2010 mongo sv-shardinginternals

Queries

• By shard key: routed

• sorted by shard key: routed in order

• by non shard key: scatter gather

• sorted by non shard key: distributed merge sort

Page 11: 2010 mongo sv-shardinginternals

Splitting

• Take a chunk and split it in 2

• Splits on the median value

• Splits only change meta data, no data change

Page 12: 2010 mongo sv-shardinginternals

SplittingMIN MAX LOCATION

A Z shard1

T1

MIN MAX LOCATION

A G shard1

G Z shard1

T2

MIN MAX LOCATION

A D shard1

D G shard1

G S shard1

S Z shard1

T3

Page 13: 2010 mongo sv-shardinginternals

Balancing

• Moves chunks from one shard to another

• Done online while system is running

• Balancing runs in the background

• Any mongos can initiate

• All data transfer happens directly between shards

• Once initiated, mongos can go without issue

Page 14: 2010 mongo sv-shardinginternals

MigratingMIN MAX LOCATION

A D shard1

D G shard1

G S shard1

S Z shard1

T3

MIN MAX LOCATION

A D shard1

D G shard1

G S shard1

S Z shard2

T4

MIN MAX LOCATION

A D shard1

D G shard1

G S shard2

S Z shard2

T5

Page 15: 2010 mongo sv-shardinginternals

Live Migrations• Migrate initiated

• Initial data copied

• Delta copied until steady state + secondary ack

• Start commit

• Copy final delta, wait for secondary ack

• Finish commit

Page 16: 2010 mongo sv-shardinginternals

DEMO

Page 17: 2010 mongo sv-shardinginternals

Download MongoDBhttp://www.mongodb.org

andletusknowwhatyouthink@eliothorowitz@mongodb

10gen is hiring!http://www.10gen.com/jobs

Page 18: 2010 mongo sv-shardinginternals

User profiles

• Partition by user_id

• Secondary indexes on location, dates, etc...

• Reads/writes know which shard to hit

Page 19: 2010 mongo sv-shardinginternals

User Activity Stream

• Shard by user_id

• Loading a user’s stream hits a single shard

• Writes are distributed across all shards

• Can index on activity for deleting

Page 20: 2010 mongo sv-shardinginternals

Photos

• Can shard by photo_id for best read/write distribution

• Secondary index on tags, date

Page 21: 2010 mongo sv-shardinginternals

Logging

• date

• machine, date

• logger name

Possible Shard Keys