锁机制
悲观锁
悲观锁并发控制
- 使用写锁来保护资源不被同时访问
- 读写操作为互斥操作
1、sql解析 2、创建一个写命令 3、从磁盘中读文档 把数据读取到内存 4、针对内存数据执行写命令 5、对内存结构做修改(仅在这一步加锁) 6、返回结果
乐观锁
MongoDB 3.0 WT MVCC机制
乐观派 lock-free并发控制
压缩算法
Snappy
遇到的坑及解决方案
大量删除数据及解决方案
背景
大量数据碎片(空洞)及解决方案
背景
数据删除完之后 会留下很多空洞 不会马上回收
早期用的MMAP 空洞数据也会加载到内存中去 比如64G内存 大量空洞数据 有效数据仅占内存10G
解决方案
搜索前85G 压缩后34G 节省了51G内存 大大提升了性能
上述步骤大致流程
1、把从库 rm -rf * 2、重启从库 3、从主库重新同步一份 从库上面完全没有碎片 4、主库上执行stepDown 主库变成从库 从库变成主库 5、删掉从库 重启 再同步 同步完了 从库就变成新的了 (删除之后同步数据 碎片数据不会同步) 注: a、一主二从 主库降权 数据最新的从库会提升为主 b、主从同步之间丢失的数据 业务系统通过补偿机制保存MongoDB