mongoDB笔记

**

1. mongoDB适用场景

**

  • 存储的数据为json格式
  • 实时的DML操作(可以理解为因为使用缓存的缘故)
  • 大数据量的存储
  • 应用后续需要水平扩展
  • 数据模型不确定(可以理解为mongo对collection的结构不固定,这里collection的概念对应关系型数据库中的表概念)

2.mongoDB为什么效率比Mysql高?
采用基于内存映射的存储引擎。这里肯定对内存映射是什么很疑惑,一开始我也这样。

内存映射简述:正常的对数据库进行查询数据,需要对数据进行两次复制,第一次复制,将数据从磁盘中拷贝到内核空间中(主要是内核中的Page Cache,用户不能直接寻址),第二次复制,将内核空间的数据拷贝到用户空间中。而内存映射的作用就是为了跳过内核空间这一步的复制过程。它将数据所在的磁盘地址映射到用户空间中的虚拟地址中。这里可以理解为它建立了用户空间和磁盘之间的桥梁,加快了对磁盘数据的访问。

mongodb对数据的持久化,都是先暂存在内存中,一段时间后再写入磁盘。加快了读写效率。

3.mongoDB集群

  1. 副本集
    如果学过redis集群,就类似哨兵模式,Primary负责读写数据,并将这些操作写入oplog,Secondary不断从Primary获取这个oplog,并将这些操作在自己存储的数据中实现一遍。达到一个备份目的。当Primary宕机,Secondary转Primary。默认情况Primary负责所有的读写,但是可以设置从Secondary读取数据,达到读写分离的目的。

  2. 分片(Shading)
    这个集群其实就是把一个collection砍成一段段的,均匀的布置到多个mongodb中,达到数据拆分到多个数据库中。有几个概念要了解一下
    mongos:路由,集群抽象化,提供统一入口,集群对外不可见
    configserver:配置信息存储
    shard:真正存储数据的地方
    chunk(块):一个collection拆分变成块
    分块规则:
    1.范围分块
    根据分片键的值的范围进行分块,这个分片键就是colleciton中的一个索引字段。
    优点:相连数据可能存在一个块中或相邻块中,范围性的查询就来的比较便利了。
    缺点:对一部分数据的查询,可能都集中在一个块上,如果是热点数据,会给单个shard带来压力。
    2.Hash分块
    通过计算各个分片键hash值将数据拆分。
    优点:相邻数据可能不在一个块上,达到真正的数据随机均匀分布
    缺点:范围查询效率相对较低,可能要查询所有的shard才能得出结果。

暂时先写这么多,如果有错误,望告知,谢谢!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值