MongoDB

MongoDB是一款非常常用的面向文档型非关系数据库(基于分布式文件存储的数据库)。由C++语言编写,主要应用在微博、博客、IM等的消息存储业务中,由于存储的数据与金融等行业比起来并不是那么重要,而且对事务也没什么要求,所以在这种场景下,MongoDB要比关系型数据库更适合,因为传统的关系型数据库的每次操作都会有ACK(ACK确认字符:在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接收无误),而MongoDB的设计去掉了这个步骤,大大提高了存储的性能,而且MongoDB的设计考虑了设备故障经常出现的场景,所以在设计时就做了容灾和故障转移方面方案。

特点:高性能、易部署、易使用,存储数据非常方便。
MongoDB复(副)本集与分片:
每个复(副)本集中存储的数据是相同的,相当于主备方式的数据冗余,目的是为了容灾。

分片是为了数据的拓展,按照片键进行结点划分,数据根据片键存储到对应的服务器上。

MongoDB部署方案

MongoDB的集群部署方案中有三类角色:实际数据存储结点、配置文件存储结点和路由接入结点。

连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和存储数据。MongoDB的部署方案有单机部署、复本集(主备)部署、分片部署、复本集与分片混合部署。

混合的部署方式如图:

混合部署方式下向MongoDB写数据的流程如图:

混合部署方式下读MongoDB里的数据流程如图:

对于复本集,又有主和从两种角色,写数据和读数据也是不同,写数据的过程是只写到主结点中,由主结点以异步的方式同步到从结点中:

而读数据则只要从任一结点中读取,具体到哪个结点读取是可以指定的:

对于MongoDB的分片,假设我们以某一索引键(ID)为片键,ID的区间[0,50],划分成5个chunk(块),分别存储到3个片服务器中,如图所示:

假如数据量很大,需要增加片服务器时可以只要移动chunk来均分数据即可。

配置结点:

存储配置文件的服务器其实存储的是片键与chunk以及chunk与server的映射关系,用上面的数据表示的配置结点存储的数据模型如图:

路由结点:

路由角色的结点在分片的情况下起到负载均衡的作用。

 

转载于:https://my.oschina.net/u/3359365/blog/1560578

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值