(1.1)Mongodb简介

【1】MongoDB简介

(1.1)什么是MongoDB

MongoDB是一个文档数据库(以Json 为数据模型),由 C++语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案;

MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,数据格式是 BSON(一种类似于 JSON 的二进制形式的存储格式,简称binary Json,比起JSON多了一些元数据),和 JSON 一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型。

MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

原则上 Oracle 和 Mysql 能做的事情,MongoDB都能做(包括 ACID 事务)。

 

4.2之后,支持了跨分片多文档事务(分布式事务);

  如:一个事务写了3个文档,分别想到3个不同分片 A B C,如何保证全部正常或者全部失败;

(1.2)MongoDB与关系型数据库的概念对比

  

 

 

数据库(database):最外层的概念,可以理解为逻辑上的名称空间,一个数据库包含多个不同名称的集合;

集合(collection):相当于 SQL 中的表,一个集合可以存放多个不同的文档;

文档(document):一个文档相当于数据表中的一行,由多个不同的字段组成;

字段(field):文档中的一个属性,等同于关系型数据库中的列(column)

索引(index):独立的检索式数据结构,与SQL 的概念一致。

_id:每个文档中都有一个唯一的 _id 字段,相当于SQL 中的主键(primary key)

视图(view):可以看做一种虚拟的集合,与 SQL 中的视图类似。从MongoDB 3.4版本开始提供了视图功能,其可以通过聚合管道技术实现;

聚合操作($lookup):MongoDB 用于实现 “类似” 表连接(table join) 的聚合操作符

内容对比:

  

 

 

尽管这些概念大多与 SQL 标准定义类似,但 MongoDb 与传统 RDBMS 仍然存在不少差异,包括如下:

半结构化:

  在一个集合中,文档所拥有的字段并不是需要是相同的,而且也不需要对所用的字段进行生命。因此,MongoDB 具有很明显的半结构化特点

  除了松散的表结构,文档还可以支持多级的嵌套、数组等灵活的数据类型,非常契合面向对象的变成模型。

弱关系:

  MongoDB 没有外键的约束,也没有很强大的表连接能力。类似的功能需要使用聚合管道技术来弥补;

【2】MongoDB技术优势

MongoDB基于灵活的 Json 文档模型,非常适合敏捷式的快速开发。

与此同时具有与生俱来的高可用、高水平扩展能力;使得它在处理海量数据、高并发的情况时具有一定优势;

  • Json 结构的对象模型接近,开发代码量低
  • Json的动态模型意味着更容易响应新的业务需求
  • 复制集提供99.999%高可用
  • 分片架构支持海量数据和无缝扩容

(2.1)解决关系型数据库的复杂关联(简单直观)

如下图,复杂的关系型表 =》 变成了 Json 文档组织

  

 

 

(2.2)文档模型包含了各种类型(快速的开发)

如下图,比如有多个邮件、有多个 interests 兴趣爱好,可以用数组组成;

如果是关系型数据库,可能需要可能多表构建,然后多个兴趣爱好时需要多行存储;

  

 

 

(2.3)无感的在线加字段(灵活解决业务变化)

如果我们要加字段,加数据对于关系型数据库来说,大表加字段简直是一种灾难;

但如果用 Mongodb,如下图,我们直接可以在线无任何业务影响的加个社交字段;这里还可以用一个 version 字段来做好版本管理;

  

 

 

(2.4)集群-原生高可用

  • Replica Set - 2 to 50 个成员
  • 自动选举、恢复
  • 多中心容灾能力
  • 滚动服务 - 最小化服务终端

如下图

  

 

 

这里还可以延迟复制,比如延迟10分钟;以便解决误删、误操作等问题;

(2.5)集群-横向扩展节点能力

如下图,在应用访问过来后,由MongoOS(每个节点都有)根据元数据 config 信息,来找到请求对应要访问哪个分片;

如果是加一个节点,一个命令就可以了很方便;

  

 

【3】MongoDB 应用场景

(3.1)基本应用场景

  

 

(3.2)什么时候考虑用 MongoDB

如下列,有一点就可以考虑使用;

  

 

posted @ 2022-04-06 15:24  郭大侠1  阅读(218)  评论(0编辑  收藏  举报