MongoDB概述与部署(一)

简介: 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

目录
相关文章
|
9月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引知识概述
本文介绍MongoDB索引相关知识,包括其在查询中的重要作用。索引可避免全集合扫描,显著提升查询效率,尤其在处理海量数据时。通过B树数据结构存储字段值并排序,支持相等匹配、范围查询及排序操作。文中还提供了官方文档链接以供深入学习。
159 0
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
1173 5
|
存储 NoSQL MongoDB
【赵渝强老师】部署MongoDB复制集
本文介绍了如何在单个节点上搭建MongoDB复制集环境,通过监听不同端口实现多节点配置。详细步骤包括创建数据目录、编辑配置文件、启动节点、初始化复制集、查看状态以及测试主从库的读写操作。文中还提供了视频讲解和代码示例,帮助读者更好地理解和操作。
319 0
|
存储 NoSQL MongoDB
今日分享MongoDB一键部署脚本
今日分享MongoDB一键部署脚本
155 0
|
存储 NoSQL MongoDB
八:《智慧的网络爬虫》— MongoDB概述
【8月更文挑战第14天】本篇文章简单介绍了MongoDB的下载和安装以;其基本的操作语法,并附上每个语法的代码示例,为后续的爬虫学习打下基础
195 0
八:《智慧的网络爬虫》— MongoDB概述
|
存储 NoSQL MongoDB
01 MongoDB的概述、应用场景、下载方式、连接方式和发展历史等
文章详细介绍了MongoDB的概览、应用场景、下载与连接方式,并涵盖了MongoDB的主要特性及其在数据存储方面的优势。
264 0
|
JSON NoSQL 关系型数据库
MongoDB常用命令大全,概述、备份恢复
MongoDB常用命令大全:服务启动停止、查看状态、备份;数据库相关,集合操作,文档操作,其他常用命令;数据备份恢复/导入导出——mongodump、mongorestore;MongoDB与SQL比较
|
NoSQL Unix MongoDB
【docker 】docker-compose 部署mongoDB
【docker 】docker-compose 部署mongoDB
594 1
|
NoSQL MongoDB 数据库
docker部署mongoDB
docker部署mongoDB
494 0
|
NoSQL JavaScript Linux
【MongoDB系列相关笔记】单机部署
本文主要介绍了Windows和Linux系统中安装和启动MongoDB的步骤。
305 0

推荐镜像

更多