MongoDB概述与部署(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB概述与部署(一)

一、MongoDB概述


(1)MongoDB简介


概述:MongoDB是由C++语言编写的,是一个基于分布式文件存储的非关系型数据库。MongoDB又被称为最像关系型数据库的非关系性数据库


优势:MongoDB的优势在于可以存放海量数据,具备强大的查询功能,是一个独立的、面向集合文档形式的数据库


Mysql和MongoDB数据存储格式的对比:


Mysql 数据库—数据表—数据—行—列—表联合—主键
MongoDB 数据库—集合—文档—字段—嵌入文档—主键(MongDB的主键为_id)



410c819c521b4292aa3466bae2172e85.png

(2)MongoDB特点


  • 存储性:


面向集合(Collection-Oriented): 数据被分组存储在数据集中,这个数据集被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含多个的文档。集合的的概念就类似于关系型数据中的表,不同的是集合不需要定义任何模式

面向文档: 存储在集合中的文档,被存储为key-values键对值的形式。键用于唯一标识一个文档,为字符串类型,而值可以是各种的文件类型。这种存储形式又被称为BSON(Binary Serialized Document Format)

高效二进制数据存储: 包括大型对象,例如视频,MongoDB使用二进制格式存储数据,可以保存任何类型的数据对象


操作性:


完全索引: 可以在任意属性上建立索引,包含内部对象,建立索引后可以提高用户查询速度

强大的聚合工具: MongoDB除了提供丰富的查询功能外,还提供强大的聚合工具,比如count、group等,支持使用MapReduce完成复杂的聚合任务

支持Perl、PHP、Java、Python等现在主流开发语言的驱动程序: MongoDB提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程,实现访问MongoDB数据库


可用性:


支持复制和数据恢复: MongoDB支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能,而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失,和Mysql的主从复制一样,但不同的是MongoDB数据库的主从复制主挂了从会代替主

自动处理分片: MongoDB支持集群自动切分数据,也就是分布式,对数据进行分片可以使集群存储更多的数据,实现更大的负载,也可以保证存储的负载均衡


(3)MongoDB的适用场景


网站数据: MongoDB非常适合实时的插入、更新、查询,并且具备了网站实时数据存储的要求,例如数据复制以及高度伸缩性

缓存: 由于性能很高,MongoDB也适合作为信息基础设施的缓存层,在系统重启之后,由MongoDB搭建的持久化缓存可以避免下层的数据源过载,MongoDB会尽可能的把数据放到内存中,虽然磁盘中也有数据,但还是会全部读取到内存中

密度高、价值低的数据: 使用传统的关系型数据库在存储一些数据时可能会比较贵,在此之前很多程序员往往会选择传统的文件进行存储

高伸缩性的场景: MongoDB非常适合由数十或数百台服务器组成的数据库,也就是支持横向扩展

用于对象以及JSON数据的存储: MongoDB的BSON数据格式非常适合文档格式的存储以及查询


(4)MongoDB的非适用场景


  1. 高度事务性的系统: 例如银行或者会计系统,MongoDB是不支持事务的
  2. 传统的商业智能应用: 针对特定问题的数据库会产生高度优化的查询方式,对于此类应用,数据仓库可能才是更适合的选择
  3. 需要SQL的场景: MongoDB是非关系数据库,不支持SQL


(5)MongoDB的存储结构


  • 逻辑结构:


数据库(database): 数据库是由多个集合组成的,MongoDB默认有四个数据库,分别是config、local、admin、test。一般来说会把多个逻辑相近的集合都放在一个数据库,但是处于性能或者数据量的关系,也可能进行拆分


集合(collection): 集合是由多个文档组成的,相当于Mysql中的表,但是不同于Mysql的表,集合是没有固定结构的


文档(document): 文档是MongoDB的核心概念,也是逻辑存储的最小单元,相当于Mysql中的数据,有点类似于Python中字典的格式,键:值


集合名称={key1:value1,key2:value2…} {}里面的就是文档


  • 物理结构:


命令空间(后缀为.WT的文件): 每个表或者索引都对应一个命名空间后缀名为.WT,命名空间存储了分配和正在使用的磁盘空间,在mongodb 3.0版本以前,命令空间是.ns的文件,但是在3.0版本之后,默认的存储引擎已经改变,成为WT(wiredTiger)存储引擎,没有以前的.ns文件,都变成了.WT文件

数据文件: 存放数据的实体,并且使用预分配空间机制,数据文件是以(0,1,2,3…)结尾的,并且后面的文件的大小是前一个文件的两倍

————————————————注释————————————————


预分配空间机制: MongoDB在当前数据文件的基础上,会预分配文件,用0进行填充,数据文件每次新生成的文件的大小都会是上一个文件的两倍,这样可以保证数据文件既不浪费由保证了可用性


——————————————————————————————————


日志文件: 日志文件分为系统日志文件、journal日志文件、oplog复制操作日志文件、慢查询日志

————————————————注释—————————————————


journal日志文件: 用于MongoDB崩溃恢复的保障


oplog复制操作日志文件: 相当于Mysql中的binary log二进制文件


**慢查询日志:**记录着查询操作超过超时时间的命令


WiredTiger引擎: 也就是WT引擎,是MongoDB3.0版本之后新增的引擎,官方宣称在read、insert和复杂的update下有更高的性能。可以支撑更好的读写负载和并发量,因为对于production(生产)环境,更多的CPU可以有效提升WT引擎的性能,因为WT引擎的IO读写是多线程的。WT不像MMAPV1引擎那样会尽可能的耗尽内存,WT可以通过主配置文件中的cacheSizeGB参数来指定WT引擎使用的内存量


journal日志: journal是一个预写事务日志,是用来确保数据的持久性的,WT引擎每隔60秒(默认的)或者在写入的数据达到2G时,mongoDB将对journal文件提交一个checkpoint检测点,提交检测点后,MongoDB会将内存中的数据变更flush(刷新)到磁盘中的数据文件中,并且做一个标记点,表示标记点之前的数据已经持久存储在了磁盘中,此后的数据变更存在于内存和journal日志中。而对于write操作,会首先被持久写入juornal,然后在内存中保存变更数据,条件满足后会提交一个新的检测点,即检测点之前的数据只是在journal中持久存储,但是并没有在mongodb的数据文件中持久化。延迟持久化可以提升磁盘效率,为了确保数据的安全性,mongodb将所有的变更操作写入journal并间歇性的持久到磁盘上,对于实际数据文件将延迟写入,和WT一样journal也可以用于数据恢复


(6)内存映射存储引擎MMAP


  1. MongoDB会把数据文件映射到内存中,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能
  2. MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟内存管理器去处理,这样做的好处是简化的MongoDB的工作,但坏处是用户无法控制MongoDB占用多大的内存,一般来说虚拟内存管理器会把除了系统使用的内存之外的内存全部划给MongoDB使用
  3. MongoDB的内存使用机制(也就是持久化)让它在缓存重建方面更有优势,简单来说,重启进程,缓存依然有效


(7)MongoDB数据类型


字符串 这是用于存储数据的最常用的数据类型。MongoDB中的字符串必须为UTF-8
整型 此类型用于存储数值。整数可以是32位或64位,具体取决于服务器
布尔类型 此类型用于存储布尔值true/false值
双精度浮点数 此类型用于存储浮点值
最小键/最大键 此类型用于将值与最小和最大的BSON元素进行比较
数组 此类型用于将数组或列表或多个值存储到一个键中
时间戳 ctimestamp,当文档被修改或添加时,可以方便地进行录制
对象 此数据类型用于嵌入式文档
NULL 此类型用于存储Null值
符号 该数据类型与字符串相同;但是,通常保留用于使用特定符号类型的语言
日期 此数据类型用于以UNIX时间格式存储当前日期或时间。您可以通过创建日期对象并将日,月,年的日期进行指定自己需要的日期时间。
对象ID 此数据类型用于存储文档的ID
二进制数据 此数据类型用于存储二进制数据
代码 此数据类型用于将JavaScript代码存储到文档中
正则表达式 此数据类型用于存储正则表达式


(8)MongoDB中自带的四个数据库


MongoDB中默认有四个数据库,分别是config、admin、local、test


config: 集群中使用的,分片数据库


admin: 保存用户信息、权限的数据库


local: local的数据只存在于本地数据,不会被同步到其他数据库


test: test为MongoDB默认登录的数据库,只要不知道数据库登录,那么登录的就是test

相关实践学习
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
存储 NoSQL Linux
MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])
MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])
373 0
|
2月前
|
NoSQL Unix MongoDB
【docker 】docker-compose 部署mongoDB
【docker 】docker-compose 部署mongoDB
58 1
|
2月前
|
NoSQL MongoDB 数据库
docker部署mongoDB
docker部署mongoDB
73 0
|
2月前
|
NoSQL JavaScript Linux
【MongoDB系列相关笔记】单机部署
本文主要介绍了Windows和Linux系统中安装和启动MongoDB的步骤。
142 0
|
2月前
|
运维 NoSQL Java
Serverless 应用引擎产品使用之在函数计算上部署Java服务并访问阿里云MongoDB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
存储 NoSQL 物联网
【MongoDB】MongoDB 数据库概述
【4月更文挑战第1天】【MongoDB】MongoDB 数据库概述
【MongoDB】MongoDB 数据库概述
|
2月前
|
SQL 人工智能 NoSQL
MongoDB扩大与谷歌云的合作,助推各行业客户部署和扩展新型应用
MongoDB和谷歌云的深入合作得到了双方共同客户与合作伙伴的欢迎
|
2月前
|
NoSQL 安全 物联网
检索时间减少83%!部署MongoDB后,通用电气医疗集团狠狠提升了物联网设备的利用效率!
作为医疗技术领域的全球领导者,通用电气医疗集团选择了 MongoDB由其管理旗下物联网设备,从部署(生命周期初期,即 BoL)到报废(生命周期结束,即 EoL)的整个生命周期
1890 3
检索时间减少83%!部署MongoDB后,通用电气医疗集团狠狠提升了物联网设备的利用效率!
|
2月前
|
存储 NoSQL Linux
|
2月前
|
存储 NoSQL MongoDB
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
246 0