MongoDB的应用场景及实现原理
MongoDB定义:
MongoDB 是一个基于分布式文件存储的数据库。由 C++语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。在这里我们有必要先简单介绍一下非关系型数据库(NoSQL)
关系型数据库与非关系型数据库对比:
NoSQL最大的特点:
1、默认支持分布式(内置分布式解决方案)
2、高性能、高可用性和可伸缩性
在NoSQL界,MongoDB是最像关系型数据库的非关系型数据库
数据库分类:
MongoDB的数据结构与关系型数据库结构数据对比:
MongoDB的数据类型:
MongoDB应用场景:
使用范围:
1、网站实时数据:例如:日志、Timeline、用户行为(代替方案:用日志)
2、数据缓存:缓存的数据,它一定是临时的(关系型数据有一份已经持久化)
3、存储大尺寸、低价值数据存储:搜索引擎的图片文件、视频文件(结构化)
4、高伸缩性场景:机器可以任意的增减
5、对象或JSON数据存储:完全可以选择用Redis
不适用范围:
1、高度事务性系统:例如:金融系统的核心数据
高机密的用户数据(只能选择传统关系型数据库)
2、传统的商业智能应用:结构化查询要求非常高,经常做关联查询统计
(如果都是单表查询,用Java程序来实现关联)
Map,List
3、需要复杂SQL查询的问题
MongoDB图解:
MongoDB包含三类角色:
mongos:路由接入结点(协调中心)
mongod config:配置文件存储结点
mongod:实际数据存储结点
三个重要命令:
mongo
mongos
mongod
副本集可以认为是一台机器或者多台机器组成的一个数据的单元,又可以认为就是一台存储数据的机器(mongo),一个副本集数据一定是一个完整的整体
副本集1和副本集2的作用:解决分布式中的高可用,把一个服务部署多分(一台坏了,另一台可以顶上)
集群、高可用、Master-Slave
MongoDB写数据的流程图:
MongoDB读数据的流程图:
mongoDB的分布式架构:
M-S
M-A-S
MongoDB的数据修改流程图:
MongoDB的数据查询流程图:
MongoDB的分片:
数据热点:
数据的平均存储问题(传一个视频,切成四份分别存在四张表里面去)
每张表存储的极限(遇到瓶颈)
mongdb的定位是存储文件或者日志这种数据的,这种数据是没有结构的,结构化程度相对比较弱一些,所以它不能通过数据本身或数据结构区分,怎么去分表,所以想到了这个方案,分片
类似于Map(拆分)Reduce(归并 )(Hadoop里面)
怎么切,那是策略
P2P? 把文件切成很多片,然后通过多线程方式下载,每个线程下一片,原来要1个小时,现在只需要1分钟
关系型数据库里面遇到这种情况分表
微观的维度(你看不到的一个维度)
chunk(块)–> shard(片)–> Replica Set(副本) --> Data(数据库)
宏观的维度(你能看到的)
Field(字段)–> Document(文档)–> Collection(集合)–> DataBase(数据库)