MongoDB

介绍

最近阿里有来公司推销mongodb这一款产品,自己也听了这个产品会。由于之前自己也没有好好的去研究过这一篇产品,所以想借此会议听到的内容总结一篇文章,以便加强立即和记忆。

1. 什么是MongoDB

MongoDB 是一款流行的开源文档型NoSQL 数据库,它使用JSON 类似的BSON 格式存储数据,具有灵活性高、可扩展性强、性能好等特点。MongoDB 适用于需要处理大量非结构化数据、对数据模型要求灵活的应用场景。

BSON,全称Binary JSON,是一种数据格式,主要用于MongoDB数据库的存储和网络传输。它在JSON的基础上进行了扩展,采用二进制编码,支持更多的数据类型,并且具有更快的遍历速度和更小的存储空间。

2. 数据类型与传统数据类型比较

MongoDB中的记录是一个文档,是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可能包括其他文档、数组和文档数组。

  • 数据结构对比
    RDBMS MongoDB discretion
    库(database) 库(database) d
    表(table) 文档(document) Document就是一个json数据结构记录
    行/记录(row) 字段/键/域(field) 属性字段名
    主键(Primary) 对象ID(objectId) _id: Object(“”)
    索引(Index) 索引(Index) 普通索引,唯一索引,主键索引,联合索引
  • MySQL 与 MongoDB 的区别
    分别在数据的表示,查询,关系,事物的设计和定义,速度和性能等方面。
    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点可以保证服务性能稳定。
    MongoDB 为web应用提供可扩展的高性能数据存储解决方案。
    MongoDB 将数据存储为一个文档,数据结构由键值(key => value)对组成。MongoDB 文档类似JSON对象,字段值可以包含其他文档,数组及文档数组。
    MongoDB 是一个面向文档的数据库,目前由10gen开发维护,它的功能丰富齐全

架构

MongoDB 围绕三项核心设计原则(文档数据模型、分布式系统设计、一致的体验)可以帮助您更快地搭建一个优质的数据平台,以应对数据经济带来的挑战!

索引

分片

Sharding 分片集群的作用

分片是指将数据拆分,将其分散到不同的机器上。这样的好处是不需要功能强大的大型计算机也可以存储更多的数据,处理更大的负载。MongoDB的分片是将collection的数据进行分割,然后将不同的部分分别存储到不同的机器上。当collection所占空间过大时,我们需要增加一台新的机器,分片会自动将collection的数据分发到新的机器上。

集群

集群架构节点

  • 主节点
    MongoDB 在主节点上进行写操作,并且会将操作记录存到oplog中。从节点会将oplog复制到其本机并将这些操作执行。
  • 从节点
    优先级为0的成员作为备用节点和隐藏节点

节点选举

MongoDB 集群主节点(Primary)的选举策略主要基于投票和数据新旧程度。当现任主节点宕机或不可用时,集群会自动触发选举,选出一个新的主节点来处理写操作。以下是选举的具体过程和策略:

  1. 选举触发:
    • 主节点故障:当现任主节点宕机、网络故障无法连接,或者主动降级为secondary 时,会触发选举。
    • 副本集配置变更:对副本集进行reconfig 操作,也会触发选举。
    • 主动降级:如果一个主节点发现有优先级更高且数据更新的secondary 节点,并且数据落后不超过10 秒,主节点会主动降级为secondary,从而触发选举。
  2. 选举过程:
    投票:
    副本集中的每个节点都有投票权,通常是1 票。
    多数派:
    节点需要获得“大多数”成员的支持才能当选主节点。“大多数”指的是(N/2) + 1,其中N 是副本集中参与投票的节点总数。
    数据新旧:
    在获得多数票的情况下,数据最新(oplog时间戳最新)的节点优先当选。
    节点状态:
    参与选举的节点必须处于secondary 或arbiter 状态,并且能够与其他节点通信。
  3. 选举条件:
    数据同步:
    参与选举的节点数据必须是最新的,通常通过oplog (操作日志) 的时间戳来判断。
    心跳检测:
    节点之间会进行心跳检测,确保节点是可用的。
    优先级:
    每个节点可以设置优先级,优先级高的节点更容易当选为主节点。优先级为0 的节点不会主动发起选举。
    网络分区:
    在发生网络分区的情况下,只有与多数投票节点保持连接的分区才有可能选举出主节点。

数据落盘

实践

总结

1. 优点

  • 数据结构简单,不需要固定数据结构
  • 查询api是基于V8引擎
  • 容易扩展

2.