MongoDB

MongoDB
Rainbow Bubbles介绍
最近阿里有来公司推销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)的选举策略主要基于投票和数据新旧程度。当现任主节点宕机或不可用时,集群会自动触发选举,选出一个新的主节点来处理写操作。以下是选举的具体过程和策略:
- 选举触发:
- 主节点故障:当现任主节点宕机、网络故障无法连接,或者主动降级为secondary 时,会触发选举。
- 副本集配置变更:对副本集进行reconfig 操作,也会触发选举。
- 主动降级:如果一个主节点发现有优先级更高且数据更新的secondary 节点,并且数据落后不超过10 秒,主节点会主动降级为secondary,从而触发选举。
- 选举过程:
投票:
副本集中的每个节点都有投票权,通常是1 票。
多数派:
节点需要获得“大多数”成员的支持才能当选主节点。“大多数”指的是(N/2) + 1,其中N 是副本集中参与投票的节点总数。
数据新旧:
在获得多数票的情况下,数据最新(oplog时间戳最新)的节点优先当选。
节点状态:
参与选举的节点必须处于secondary 或arbiter 状态,并且能够与其他节点通信。 - 选举条件:
数据同步:
参与选举的节点数据必须是最新的,通常通过oplog (操作日志) 的时间戳来判断。
心跳检测:
节点之间会进行心跳检测,确保节点是可用的。
优先级:
每个节点可以设置优先级,优先级高的节点更容易当选为主节点。优先级为0 的节点不会主动发起选举。
网络分区:
在发生网络分区的情况下,只有与多数投票节点保持连接的分区才有可能选举出主节点。
数据落盘
实践
总结
1. 优点
- 数据结构简单,不需要固定数据结构
- 查询api是基于V8引擎
- 容易扩展
2.
评论
匿名评论隐私政策