- 方便加字段
- 使用json schema来限制
- 高可用和横向扩展
命令
- show dbs
- use database
- show collections
- db.fsyncLock():模拟同步延迟
添删改查
SQL到MongoDB映射表 — MongoDB Manual 3.4
聚合
管道和步骤
工具:
复制集cp
- 基于raft(cp)
- 和writeConcern参数有关
数据模型
lookup关联查询:
频繁小数据
合并用数组存储
大文档,很多字段,很多索引
解决方法:列转行
增加版本字段
统计大数据,近似计算
预聚合,方便统计
事务
writeConcern:写到几个节点算成功
journal:是否落盘
readPreference从哪一个节点读
readConcern数据隔离性
- 默认local
- majority:mvcc实现
多文档事务支持
- 下订单,扣款。
分片
索引
- b树
Mysql是关系型数据库,最常用的是数据遍历操作(join),而MongoDB它的数据更多的是聚合过的数据,不像Mysql那样表之间的关系那么强烈,因此MongoDB更多的是单个查询。
为什么MongoDB使用B-Tree,Mysql使用B+Tree ? - 掘金
- explain查看执行计划
日志
journal
MySQL的redo log和MongoDB的journal日志都是数据库存储引擎层面的WAL(Write-Ahead Logging)预写式日志,记录的是数据的物理修改,是提高数据系统持久性的一种技术。
MongoDB与MySQL关于写确认的异同 - SegmentFault 思否
oplog
MySQL的binlog和MongoDB的oplog都是数据库层面的写操作对应的逻辑日志,主要用于实现数据在主备之间的同步复制以及增量备份和恢复。
对比es
MongoDB和Elasticsearch的各使用场景对比_时间都哪去了的博客-CSDN博客_mongodb和es各自使用场景
- es修改Mapping的代价非常高
- 大部分场景下性能方面完爆es
- mongodb可以事务,可以join