二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

    • 认识了解MongoDB
      • 1,数据库管理系统
        • 1,什么是数据?
        • 2,什么是数据库管理系统?
        • 3,常见数据库管理系统?
      • 2,NoSQL 是什么?
        • 1,NoSQL 简介
        • 2,NoSQL 数据库四大家族
        • 3,NoSQL 的优势
        • 4,NoSQL 与 RDBMS 对比
      • 3,MongoDB 简介
        • 1,MongoDB 是什么
        • 2,MongoDB 的特性
        • 3,关系型数据库与 mongodb 对比
        • 4,MongoDB 数据存储格式
        • 5,MongoDB 的优势
        • 6,高可用的复制集群
        • 7,水平扩展
        • 8,各存储引擎的对比
        • 9,数据库功能和性能对比
        • 10,MongoDB 适用场景
        • 11,MongoDB 慎用场景
        • 12,什么时候该 MongDB
    • CentOS-7部署MongoDB
    • MongoDB增删改查基本操作
    • MongoDB日常运维之用户管理
    • MongoDB索引方面的学习实践
    • MongoDB关联查询的学习以及实践
  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • MongoDB
二丫讲梵
2019-07-06
目录

认识了解MongoDB

文章发布较早,内容可能过时,阅读注意甄别。

原文地址:http://t.cn/AiOcP9Cy

向原作者致敬,写的如此详细且细致,这里认真拜读且有所改动。

# 1,数据库管理系统

image

在了解 MongoDB 之前需要先了解先数据库管理系统

# 1,什么是数据?

数据(英语:data),是指未经过处理的原始记录。

一般而言,数据缺乏组织及分类,无法明确的表达事物代表的意义,它可能是一堆的杂志、一大叠的报纸、数种的开会记录或是整本病人的病历纪录。数据描述事物的符号记录,是可定义为意义的实体,涉及事物的存在形式。是关于事件之一组离散且客观的事实描述,是构成讯息和知识的原始材料。

# 2,什么是数据库管理系统?

数据库管理系统(英语:database management system,缩写:DBMS) 是一种针对对象数据库,为管理数据库而设计的大型电脑软件管理系统。

具有代表性的数据管理系统有:Oracle、Microsoft SQL Server、Access、MySQL 及 PostgreSQL 等。通常数据库管理师会使用数据库管理系统来创建数据库系统。

现代 DBMS 使用不同的数据库模型追踪实体、属性和关系。在个人电脑、大型计算机和主机上应用最广泛的数据库管理系统是关系型 DBMS(relational DBMS)。在关系型数据模型中,用二维表格表示数据库中的数据。这些表格称为关系。

数据库管理系统主要分为俩大类:RDBMS、NOSQL

关于 RDBMS 的更多信息参考:http://www.cnblogs.com/clsn/category/1131345.html

# 3,常见数据库管理系统?

常见的数据库管理系统,及其排名情况如下:

image

  • 图:数据库管理系统使用情况世界排名
  • 数据来源:https://db-engines.com/en/ranking

# 2,NoSQL 是什么?

# 1,NoSQL 简介

NoSQL 是对不同于传统的关系数据库的数据库管理系统的统称。

两者存在许多显著的不同点,其中最重要的是 NoSQL 不使用 SQL 作为查询语言。其数据存储可以不需要固定的表格模式,也经常会避免使用 SQL 的 JOIN 操作,一般有水平可扩展性的特征。

NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库。

2009 年,Last.fm 的 Johan Oskarsson 发起了一次关于分布式开源数据库的讨论,来自 Rackspace 的 Eric Evans 再次提出了 NoSQL 的概念,这时的 NoSQL 主要指非关系型、分布式、不提供 ACID 的数据库设计模式。

2009 年在亚特兰大举行的 “no:sql(east)” 讨论会是一个里程碑,其口号是 “select fun, profit from real_world where relational=false;”。因此,对 NoSQL 最普遍的解释是 “非关联型的”,强调 Key-Value Stores 和文档数据库的优点,而不是单纯的反对 RDBMS。

基于 2014 年的收入,NoSQL 市场领先企业是 MarkLogic,MongoDB 和 Datastax。基于 2015 年的人气排名,最受欢迎的 NoSQL 数据库是 MongoDB,Apache Cassandra 和 Redis.

# 2,NoSQL 数据库四大家族

NoSQL 中的四大家族主要是:列存储、键值、图像存储、文档存储,其类型产品主要有以下这些。

image

# 3,NoSQL 的优势

高可扩展性、分布式计算、没有复杂的关系、低成本

架构灵活、半结构化数据

# 4,NoSQL 与 RDBMS 对比

  • NoSQL
    • 代表着不仅仅是 SQL
    • 没有声明性查询语言
    • 没有预定义的模式
    • 键 – 值对存储,列存储,文档存储,图形数据库
    • 最终一致性,而非 ACID 属性
    • 非结构化和不可预知的数据
    • CAP 定理
    • 高性能,高可用性和可伸缩性
  • RDBMS
    • 高度组织化结构化数据
    • 结构化查询语言(SQL) (SQL)
    • 数据和关系都存储在单独的表中。
    • 数据操纵语言,数据定义语言
    • 严格的一致性
    • 基础事务

# 3,MongoDB 简介

# 1,MongoDB 是什么

image

MongoDB 并非芒果的意思,而是源于 Humongous(巨大)一词。

# 2,MongoDB 的特性

MongoDB 的 3 大技术特色如下所示:

image

除了上图所示的还支持:

二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。

但是其也有些许的缺点,例如:

  • 多表关联: 仅仅支持 Left Outer Join
  • SQL 语句支持: 查询为主,部分支持
  • 多表原子事务: 不支持
  • 多文档原子事务:不支持
  • 16MB 文档大小限制,不支持中文排序 ,服务端 Javascript 性能欠佳

# 3,关系型数据库与 mongodb 对比

存储方式对比

在传统的关系型数据库中,存储方式是以表的形式存放,而在 MongoDB 中,以文档的形式存在。

image

数据库中的对应关系,及存储形式的说明

image

MongoDB 与 SQL 的结构对比详解

SQL Terms/Concepts MongoDB Terms/Concepts
database database
table collection
row document or BSON document
column field
index index
table joins embedded documents and linking
primary keySpecify any unique column orcolumn combination asprimary key. primary keyIn MongoDB, the primary key isautomatically set to the _id field.
aggregation (e.g. group by) aggregation pipelineSee the SQL to Aggregation MappingChart.

# 4,MongoDB 数据存储格式

  • JSON 格式

JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。

MongoDB 使用 JSON(JavaScript ObjectNotation)文档存储记录。

JSON 数据库语句可以容易被解析。

Web 应用大量使用,NAME-VALUE 配对

image

  • BSON 格式

BSON 是由 10gen 开发的一个数据格式,目前主要用于 MongoDB 中,是 MongoDB 的数据存储格式。BSON 基于 JSON 格式,选择 JSON 进行改造的原因主要是 JSON 的通用性及 JSON 的 schemaless 的特性。

二进制的 JSON,JSON 文档的二进制编码存储格式

BSON 有 JSON 没有的 Date 和 BinData

MongoDB 中 document 以 BSON 形式存放

例如:

> db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});
1

# 5,MongoDB 的优势

MongoDB 是开源产品

On GitHub Url:https://github.com/mongodb

Licensed under the AGPL,有开源的社区版本

起源 & 赞助 by MongoDB 公司,提供商业版 licenses 许可

这些优势造就了 mongodb 的丰富的功能:

JSON 文档模型、动态的数据模式、二级索引强大、查询功能、自动分片、水平扩展、自动复制、高可用、文本搜索、企业级安全、聚合框架 MapReduce、大文件存储 GridFS

# 6,高可用的复制集群

自动复制和故障切换

多数据中心支持滚动维护无需关机支持最多 50 个成员

image

# 7,水平扩展

这种方式是目前构架上的主流形式,指的是通过增加服务器数量来对系统扩容。在这样的构架下,单台服务器的配置并不会很高,可能是配置比较低、很廉价的 PC,每台机器承载着系统的一个子集,所有机器服务器组成的集群会比单体服务器提供更强大、高效的系统容载量。

image

这样的问题是系统构架会比单体服务器复杂,搭建、维护都要求更高的技术背景。分片集群架构如下图所示:

image

# 8,各存储引擎的对比

MySQL InnoDB MySQL NDB Oracle MongoDB MAPI MongoDB WiredTiger
事务 YES YES ES NO NO
锁粒度 ROW-level ROW-level ROW-level Collection-level Document-level
Geospatial YES YES YES YES YES
MVCC YES NO YES NO NO
Replication YES YES YES YES YES
外键 YES YES(From 7.3) YES NO NO
数据库集群 NO YES YES YES YES
B-TREE 索引 YES YES YES YES YES
全文检索 YES NO YES YES YES
数据压缩 YES NO YES NO YES
存储限制 64TB 384EB NO NO NO
表分区 YES YES YES YES (分片) YES (分片)

# 9,数据库功能和性能对比

由下图可以看出 MongoDB 数据库的性能扩展能力及功能都较好,都能够在数据库中,站立一足之地。

image

# 10,MongoDB 适用场景

网站数据、缓存等大尺寸、低价值的数据

在高伸缩性的场景,用于对象及 JSON 数据的存储。

image

# 11,MongoDB 慎用场景

慎用场景 原因
PB 数据持久存储大数据分析数据湖 Hadoop、Spark 提供更多分析运算功能和工具,并行计算能力更强 MongoDB + Hadoop/Spark
搜索场景:文档有几十个字段,需要按照任意字段搜索并排序限制等 不建索引查询太慢,索引太多影响写入及更新操作
ERP、CRM 或者类似复杂应用,几十上百个对象互相关联 关联支持较弱,事务较弱
需要参与远程事务,或者需要跨表,跨文档原子性更新的 MongoDB 事务支持仅限于本机的单文档事务
100% 写可用:任何时间写入不能停 MongoDB 换主节点时候会有短暂的不可写设计所限

# 12,什么时候该 MongDB

应用特征 Yes/No?
我的数据量是有亿万级或者需要不断扩容
需要 2000-3000 以上的读写每秒
新应用,需求会变,数据模型无法确定
我需要整合多个外部数据源
我的系统需要 99.999% 高可用
我的系统需要大量的地理位置查询
我的系统需要提供最小的 latency
我要管理的主要数据对象 <10

在上面的表格中进行选择,但有 1 个 yes 的时候:可以考虑 MongoDB;当有 2 个以上 yes 的时候:不会后悔的选择!

微信 支付宝
#MongoDB
上次更新: 2024/07/04, 22:40:37
MySQL中order by的学习使用
CentOS-7部署MongoDB

← MySQL中order by的学习使用 CentOS-7部署MongoDB→

最近更新
01
学习周刊-总第212期-2025年第21周
05-22
02
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
03
学习周刊-总第211期-2025年第20周
05-15
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式