因项目需要暂时停止es的学习,开始学习下mongodb基本使用。
一、MongoDB 中的应用场景及设计原理
MongoDB 是一个基于分布式文件存储的数据库。由 C++语言编写。旨在为 WEB 应用提供可扩展的高性能 数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当 中功能最丰富,最像关系数据库的。在这里我们有必要先简单介绍一下非关系型数据库(NoSQL)。
1.1、什么是 NoSQL
NoSQL,指的是非关系型的数据库。NoSQL 有时也称作 Not Only SQL 的缩写,是对不同于传统的关系 型数据库的数据库管理系统的统称。NoSQL 用于超大规模数据的存储。(例如谷歌或 Facebook 每天为 他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向 扩展。
1.2、关系型数据库 PK 非关系型数据库
1.3、NoSQL 数据库分类
1.4、MongoDB 的数据结构与关系型数据库数据结构对比
1.5、MongoDB 中的数据类型
1.6、图解 MongoDB 底层原理
MongoDB 的集群部署方案中有三类角色:实际数据存储结点、配置文件存储结点和路由接入结点。 连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和 存储数据。MongoDB 的部署方案有单机部署、复本集(主备)部署、分片部署、复本集与分片混合部署。
副本集,认为就是一台存储数据的机器(mongo),一个副本集数据一定是一个完整的整体
复本集与分片混合部署 混合的部署方式如图:
mongodb 主要分为:mongo 客户端、mongos 路由器 、mongod 数据存储。
1 mongo 客户端 连接mongo的客户端
2 mongos 路由器 根据 mongod中的 config server 信息分配客户访问数据的分片。
混合部署方式下向 MongoDB 写数据的流程如图:
混合部署方式下读 MongoDB 里的数据流程如图:
写数据的过程是只写到主结点中,由主 结点以异步的方式同步到从结点中:
而读数据则只要从任一结点中读取,具体到哪个结点读取是可以指定的:
mongodb 数据存储
1、微观的维度(你看不到的一个维度)
chunk(块)-->shard(片) --> Replica Set(副本) --> Data(数据)
2、宏观的维度(你能看到的)
Field(字段) --> Document(文档) --> Collection(集合) --> DataBase(数据库)
对于 MongoDB 的分片,假设我们以某一索引键(ID)为片键,ID 的区间[0,50],划分成 5 个 chunk, 分别存储到 3 个片服务器中,如图所示:
假如数据量很大,需要增加片服务器时可以只要移动 chunk 来均分数据即可。 配置结点: 存储配置文件的服务器其实存储的是片键与 chunk 以及 chunk 与 server 的映射关系,用上面的数据表 示的配置结点存储的数据模型如下表:
路由结点: 路由角色的结点在分片的情况下起到负载均衡的作用。
1.7、MongoDB 的应用场景和不适用场景
1、适用场景 对于 MongoDB 实际应用来讲,是否使用 MongoDB 需要根据项目的特定特点进行一一甄别,这就要求我 们对 MongoDB 适用和不适用的场景有一定的了解。
根据 MongoDB 官网的说明,MongoDB 的适用场景如下:
1)网站实时数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及 高度伸缩性。
2)数据缓存:由于性能很高, MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载。
3)大尺寸、低价值数据存储:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很 多时候程序员往往会选择传统的文件进行存储。
4)高伸缩性场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB 的路线图中已经包 含对 MapReduce 引擎的内置支持。
5)对象或 JSON 数据存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询。
2、不适用场景 了解了 MongoDB 适用场景之后,还需要了解哪些场景下不适合使用 MongoDB,具体如下:
1)高度事务性系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂 事务的应用程序。
2)传统的商业智能应用:针对特定问题的 BI 数据库会对产生高度优化的查询方式。对于此类应用, 数据仓库可能是更合适的选择。
3)需要复杂 SQL 查询的问题。 相信通过上面的说明,你已经大致了解了 MongoDB 的使用规则,需要说明一点的是,MongoDB 不仅仅 是数据库,更多的使用是将 MongoDB 作为一个数据库中间件在实际应用中合理划分使用细节,这一点对 于 MongoDB 应用来讲至关重要