• (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

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

      

  • 相关阅读:
    Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round)
    Codeforces Round #708 (Div. 2)
    Educational Codeforces Round 106 (Rated for Div. 2)
    ccf csp 202012-1
    带配额的文件系统 (带模拟)
    阔力梯的树
    Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)
    如何获取某个网站IP地址?
    C++开发者眼中的Java关键字abstract
    Java代码中如何获文件名和行号等源码信息?
  • 原文地址:https://www.cnblogs.com/gered/p/16106631.html
Copyright © 2020-2023  润新知