MongoDB概念学习

mongoDB官网 https://docs.mongodb.com/

一、概念

  1. 名词

    1. mysql中的表,在mongo中叫collection
    2. row,对应叫document
    3. column,对应field
  2. 文档模型 (Document)

    1. JSON/BSON格式,便于struct映射
    2. 方便的文档嵌套,无需Join
    3. 对document操作是原子的
  3. Schema灵活

    1. 无需预定义
    2. 每条document的schema可以不一样
      (相似schema的document放到一个collection里面)
    3. 支持schema-validation
  4. 丰富算子(operator)

    1. 算子也设计为BSON文档模型。
  5. 聚合功能 (Aggregation)

二、原理

  1. Replica set
    高可用的实现与一致性的配置。

    1. 包含primary和多个secondary。
    2. raft协议选主。
    3. 读参数:readConcern、readPreference
    4. 写参数:w、j
    5. 从节点拉取oplog (operation log),进行数据同步
    6. 主节点宕机,未同步数据将回滚
  2. Shard
    分片,水平扩展的实现

    1. 根据Shard Key 的不同分片方式
    2. range分片
    3. hash分片(单挑查询较多时有利)
    4. 可以一个或多个字段组合为一个Shard Key,避免Shard Key单调增长。
    5. 集群根据各shard上chunk数量不均衡情况,自动触发chunk搬迁(split / merge)
    6. chunk分裂不搬迁数据,只是更改集群的meta数据。
  3. WiredTiger引擎
    WiredTiger(WT)目前是MongoDB默认的存储引擎。

    Document Level Concurrency

    1. 多个client可以同时修改一个collection中的不同document
    2. WiredTiger采用乐观的并发控制,collection以上层级只使用intent lock
    3. 遇到冲突会自动重试
       

    Snapshots and Checkpoints

    1. WiredTiger 使用多版本并发控制(MVCC)。在操作开始时,WiredTiger 为内存中的数据提供快照。
    2. WiredTiger将快照落盘时,形成checkpoint,checkpoint可以用来恢复数据。
       

    Journal

    1. checkpoints之间的操作,WT用一个WAL去记录
      (持久化通过checkpoints和journal来保证)
       

    Cache

    1. mongoDB使用了WT和文件系统的cache
    2. 通过将热数据放入内存cache中,极大的提升查找效率。(b+树)
  4. 索引

  • 单键索引
db.students.createIndex(
    {"score":1}{ unique: true}{ sparse: true}, 
    { partialFilterExpression: { score: { $gt: 5 } }
)
  • 联合索引 (compound indexes)
db.students.createIndex( {"userid":1, "score":-1} )

db.students.find().sort( { userid: 1, score: -1 } )
db.students.find().sort( { userid: -1, score: 1 } )
  • 多值索引(Multikey indexes)
    MongoDB 自动为array中的值创建multikey索引,无需显式制定

  • 文本索引 (Text indexes)
    db.reviews.createIndex( { comments: “text” } )

  • TTL 索引
    只能对date values 字段设置
    过期后自动清除document

db.eventlog.createIndex( 
    { "lastModifiedDate": 1 }, 
    { expireAfterSeconds: 3600 }
)
  • 2d索引
  • 地理空间索引
  • 通配符索引

三、面试题链接
https://juejin.cn/post/6844904186300071943
https://mp.weixin.qq.com/s/ql5ufi5JinUdIn0MUKKauw
WT原理补充:https://blog.csdn.net/z591045/article/details/112302064

mongoDB的索引
mongoDB & WT 博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值