• 方便加字段
    • 使用json schema来限制
  • 高可用和横向扩展

命令

聚合

管道和步骤

image.png
image.png
工具:
image.png

复制集cp

image.png

  • 基于raft(cp)
  • 和writeConcern参数有关

    数据模型

    image.png

    lookup关联查询:

    image.png

    频繁小数据

    合并用数组存储
    image.png

    大文档,很多字段,很多索引

    image.png
    解决方法:列转行
    image.png

    增加版本字段

    image.png

    统计大数据,近似计算

    image.png

    预聚合,方便统计

    image.png

    事务

    writeConcern:写到几个节点算成功

    image.png
    image.png

    journal:是否落盘

    image.png

readPreference从哪一个节点读

image.png
image.png

readConcern数据隔离性

image.png

  • 默认local
  • majority:mvcc实现

image.png
image.png
image.png

多文档事务支持

  • 下订单,扣款。

image.png
image.png

  • snapshot就是mvcc,可重复读。

    change stream

    需要配置:
    image.png
    image.png
    image.png
    watch收到事件
    image.png

    分页

    image.png

分片

image.png
image.png

索引

  • b树

    Mysql是关系型数据库,最常用的是数据遍历操作(join),而MongoDB它的数据更多的是聚合过的数据,不像Mysql那样表之间的关系那么强烈,因此MongoDB更多的是单个查询。

为什么MongoDB使用B-Tree,Mysql使用B+Tree ? - 掘金

  • explain查看执行计划

    日志

    journal

    MySQL的redo log和MongoDB的journal日志都是数据库存储引擎层面的WAL(Write-Ahead Logging)预写式日志,记录的是数据的物理修改,是提高数据系统持久性的一种技术。 MongoDB - 图31

MongoDB与MySQL关于写确认的异同 - SegmentFault 思否

oplog

MySQL的binlog和MongoDB的oplog都是数据库层面的写操作对应的逻辑日志,主要用于实现数据在主备之间的同步复制以及增量备份和恢复。

对比es

MongoDB和Elasticsearch的各使用场景对比_时间都哪去了的博客-CSDN博客_mongodb和es各自使用场景

  • es修改Mapping的代价非常高
  • 大部分场景下性能方面完爆es
  • mongodb可以事务,可以join

image.png