MongoDB的应用场景及实现原理

MongoDB定义:

MongoDB 是一个基于分布式文件存储的数据库。由 C++语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。在这里我们有必要先简单介绍一下非关系型数据库(NoSQL)

关系型数据库与非关系型数据库对比:

mongodb数据库应用场景 mongodb的应用场景_数据

NoSQL最大的特点:

1、默认支持分布式(内置分布式解决方案)
2、高性能、高可用性和可伸缩性
在NoSQL界,MongoDB是最像关系型数据库的非关系型数据库

数据库分类:

mongodb数据库应用场景 mongodb的应用场景_Windows_02

MongoDB的数据结构与关系型数据库结构数据对比:

mongodb数据库应用场景 mongodb的应用场景_数据_03

MongoDB的数据类型:

mongodb数据库应用场景 mongodb的应用场景_mongodb数据库应用场景_04

MongoDB应用场景:

使用范围:

1、网站实时数据:例如:日志、Timeline、用户行为(代替方案:用日志)

2、数据缓存:缓存的数据,它一定是临时的(关系型数据有一份已经持久化)

3、存储大尺寸、低价值数据存储:搜索引擎的图片文件、视频文件(结构化)

4、高伸缩性场景:机器可以任意的增减

5、对象或JSON数据存储:完全可以选择用Redis

不适用范围:

1、高度事务性系统:例如:金融系统的核心数据

高机密的用户数据(只能选择传统关系型数据库)

2、传统的商业智能应用:结构化查询要求非常高,经常做关联查询统计

(如果都是单表查询,用Java程序来实现关联)

Map,List

3、需要复杂SQL查询的问题

MongoDB图解:

mongodb数据库应用场景 mongodb的应用场景_数据_05


MongoDB包含三类角色:

mongos:路由接入结点(协调中心)

mongod config:配置文件存储结点

mongod:实际数据存储结点

三个重要命令:
mongo
mongos
mongod

副本集可以认为是一台机器或者多台机器组成的一个数据的单元,又可以认为就是一台存储数据的机器(mongo),一个副本集数据一定是一个完整的整体

副本集1和副本集2的作用:解决分布式中的高可用,把一个服务部署多分(一台坏了,另一台可以顶上)

集群、高可用、Master-Slave

MongoDB写数据的流程图:

mongodb数据库应用场景 mongodb的应用场景_数据_06

MongoDB读数据的流程图:

mongodb数据库应用场景 mongodb的应用场景_数据_07


mongoDB的分布式架构:

M-S

M-A-S

MongoDB的数据修改流程图:

mongodb数据库应用场景 mongodb的应用场景_数据_08

MongoDB的数据查询流程图:

mongodb数据库应用场景 mongodb的应用场景_Windows_09

MongoDB的分片:

mongodb数据库应用场景 mongodb的应用场景_mongodb数据库应用场景_10


数据热点:

数据的平均存储问题(传一个视频,切成四份分别存在四张表里面去)

每张表存储的极限(遇到瓶颈)

mongdb的定位是存储文件或者日志这种数据的,这种数据是没有结构的,结构化程度相对比较弱一些,所以它不能通过数据本身或数据结构区分,怎么去分表,所以想到了这个方案,分片

类似于Map(拆分)Reduce(归并 )(Hadoop里面)

怎么切,那是策略

P2P? 把文件切成很多片,然后通过多线程方式下载,每个线程下一片,原来要1个小时,现在只需要1分钟

关系型数据库里面遇到这种情况分表

微观的维度(你看不到的一个维度)

chunk(块)–> shard(片)–> Replica Set(副本) --> Data(数据库)

宏观的维度(你能看到的)

Field(字段)–> Document(文档)–> Collection(集合)–> DataBase(数据库)