1:replica set
数据冗余(保证数据不丢失)+主节点切换(服务可用)
Primary/Secondary/其他类型节点(为了投票选primary、数据备份、延迟复制等)
读写都是primary,保证强一致性
读写分离:写必须primary读secondary,此时保证的是最终一致性而非强一致性
read preference和write concern
如何复制?联想下mysql的主从复制如何实现?复制到一半断电了怎么办?
replica set oplog
如何选举?联想下分布式系统的选举算法(redis、zookeeper各自是如何实现)?
http://docs.mongodb.org/manual/core/replica-set-elections/#replica-set-elections
paxos?
2:分片
数据量太大单节点存储不够、单节点读写压力过大
query routers:请求入口,可以有多个,做负载均衡。接受请求再请求shard然后再返回结果给请求者
config servers:存储分片的元数据,每个shard存储的数据key范围。replica set防止单点故障
shards:存储分片数据 replica set防止数据丢失
如何分片?
将shard key映射到chunk,然后将chunk存储到指定的shard
shard key的选择
range based sharding
hash based sharding
分片的split和rebalanc?
某些范围的shard key对应的数据越来越多 对应chunk越来越大,当超过指定大小max之后,会split chunk(两个大小为max的chunk),就会造成某些shard上的chunk越来越多
然后就会启动rebalance,平衡每个shard上的chunk的数量
rebalance过程中的读写如何保证?