1:replica set
數(shù)據(jù)冗余(保證數(shù)據(jù)不丟失)+主節(jié)點(diǎn)切換(服務(wù)可用)
Primary/Secondary/其他類型節(jié)點(diǎn)(為了投票選primary、數(shù)據(jù)備份、延遲復(fù)制等)

讀寫都是primary,保證強(qiáng)一致性
讀寫分離:寫必須primary讀secondary,此時(shí)保證的是最終一致性而非強(qiáng)一致性
read preference和write concern
如何復(fù)制?聯(lián)想下mysql的主從復(fù)制如何實(shí)現(xiàn)?復(fù)制到一半斷電了怎么辦?
replica set oplog
如何選舉?聯(lián)想下分布式系統(tǒng)的選舉算法(redis、zookeeper各自是如何實(shí)現(xiàn))?
http://docs.mongodb.org/manual/core/replica-set-elections/#replica-set-elections
paxos?
2:分片
數(shù)據(jù)量太大單節(jié)點(diǎn)存儲(chǔ)不夠、單節(jié)點(diǎn)讀寫壓力過(guò)大

query routers:請(qǐng)求入口,可以有多個(gè),做負(fù)載均衡。接受請(qǐng)求再請(qǐng)求shard然后再返回結(jié)果給請(qǐng)求者
config servers:存儲(chǔ)分片的元數(shù)據(jù),每個(gè)shard存儲(chǔ)的數(shù)據(jù)key范圍。replica set防止單點(diǎn)故障
shards:存儲(chǔ)分片數(shù)據(jù) replica set防止數(shù)據(jù)丟失
如何分片?
將shard key映射到chunk,然后將chunk存儲(chǔ)到指定的shard
shard key的選擇
range based sharding

hash based sharding

分片的split和rebalanc?
某些范圍的shard key對(duì)應(yīng)的數(shù)據(jù)越來(lái)越多 對(duì)應(yīng)chunk越來(lái)越大,當(dāng)超過(guò)指定大小max之后,會(huì)split chunk(兩個(gè)大小為max的chunk),就會(huì)造成某些shard上的chunk越來(lái)越多
然后就會(huì)啟動(dòng)rebalance,平衡每個(gè)shard上的chunk的數(shù)量
rebalance過(guò)程中的讀寫如何保證?