《App后台开发运维和架构实践》读书笔记 - MongoDB
8.1 优点:
读写性能高;灵活的文档模型;水平扩展
8.2 核心机制
8.2.1 MMAP(内存文件映射):出去了"内存缓冲区"这么一个环节;
文件映射到进程空间,访问的时候才会加载到物理内存;物理内存不够时,会导致Swap至磁盘,导致性能严重下降!
每分钟/每5秒,把修改过的数据flush到磁盘上(这就是修改后当时看不到变化的原因!)
8.2.2 Journal日志:两次flush之间的数据修改操作,会“一条一条"的append在Journal日志,宕机后会读这个进行数据恢复;
8.3 集合(数据表), 文档(数据行)
数组,使得每个数据行可以有不同的字段!!:
{"name":"大衣",
"price":110.00,
"params":[
{"name": "尺寸", "value":"S"},
{"name": "颜色", "value":"红"}
]
}
8.4 高可用集群
8.4.1 主从(已淘汰)
一主一从备份;一主多从分解压力,主节点负责所有写操作,从节点负责读操作;
缺点:主节点写压力大;主节点宕机后,不能自动切换副节点当主节点;
8.4.2 副本集
主节点:负责写; 副本节点:负责读; 仲裁节点:负责选举主节点
还是一主多副;
通过心跳发现主节点宕机;自动发起选举;
8.4.3 分片
Router: 接收客户端请求,路由到Shard上;
Shard: 存储实例;可主从副本集配置;
Config Servers: 存储配置信息(路由,分片,等信息),存在磁盘上的,重启可恢复。多副本备份;
参考:https://docs.mongodb.com/manual/sharding/
8.5 LBS支持
8.5.1 查找附近的人
8.5.2 查找某个范围内的坐标(矩形,圆,多边形)
8.6 MongoDB 3.0
存储架构更丰富:老版本MMAP有库锁,限制了最大并发客户端个数;新版本改为集合锁;新支持WiredTiger存储引擎,实现了数据行级别的锁,性能提升巨大;
支持压缩,省存储空间;
集群副本集,分片等方式,新增了管理工具,运维成本降低;