当前位置: 首页 > news >正文

MongoDB 数据库(一):MongoDB的介绍与安装

目录

  • 一、MongoDB数据库的介绍与安装
    • 1.1 NoSQL数据库简介
    • 1.2 MongoDB 简介
      • 1.2.1 再议业务应用场景
      • 1.2.2 为什么要使用 MongoDB
      • 1.2.3 适用场景
  • 二、安装和使用MongoDB客户端
    • 2.1 Windows 安装 MongoDB
    • 2.2 Linux-Centos7 安装 MongoDB
    • 2.3 安装Studio 3T

一、MongoDB数据库的介绍与安装

1.1 NoSQL数据库简介

最常见的数据库可以分为下面的两种类型:

  1. RDBMS(关系型数据库): 常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL;
  2. NoSQL(非关系型数据库): 常见的非关系型数据库有 MongoDB、Redis、Cassandra、Hbase、Neo4j 等。

NoSQL 全称为 Not only SQL,它仅仅是一个概念,用来表示非关系型数据库,本文中将要介绍的 MongoDB 就是非关系型数据库的一种。相对于 RDBMS(关系型数据库),NoSQL 具有以下优点:

  1. 易扩展:NoSQL 数据库种类繁多,但它们都有一个共同的特点,那就是都去掉了关系型数据库的关系型特性,数据与数据之间没有关系,这样就非常容易扩展,无形之间也在架构的层面上带来了可扩展的能力;
  2. 大数据量,高性能:NoSQL 数据库都具有非常高的读写性能,尤其是在处理庞大数据时表现优秀;
  3. 灵活:NoSQL 随时都可以存储任意类型的数据,无须提前为要存储的数据建立字段;
  4. 高可用:NoSQL 在不太影响性能的情况下,就可以方便地实现高可用的架构,比如 Cassandra、HBase 模型,通过复制模型也能实现高可用。

为什么使用 NoSQL? 随着互联网的不断发展,传统的关系型数据库在处理超大规模数据以及开发高并发应用时已经显得力不从心了,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的问题,特别是大数据应用的难题。

体系框架:NoSQL 整体框架分为四层,由下至上分别为 数据持久层(data persistence)、整体分布层(data distribution model)、数据逻辑模型层(data logical model)、和接口层(interface), 层次之间相辅相成,协调工作。

1、数据持久层: 数据持久层定义了数据的存储形式,主要包括基于内存、硬盘、内存与硬盘相结合、订制可插拔四种形式。

基于内存形式的数据存取速度最快,但可能会造成数据丢失
基于硬盘的数据可能保存很久,但存取速度较基于内存的形式慢
内存和硬盘相结合的形式,结合了前两种形式的优点,既保证了速度,又保证了数据不丢失
订制可插拔则保证了数据存取具有较高的灵活性

2、数据分布层: 数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL 可选的机制比较多,主要有三种形式:

CAP 支持: 可用于水平扩展
多数据中心支持: 可以保证在横跨多数据中心时也能够平稳运行
动态部署支持: 可以在运行着的集群中动态地添加或删除节点

3、数据逻辑层: 数据逻辑层表述了数据的逻辑表现形式,与关系型数据库相比,NoSQL 在逻辑表现形式上相当灵活,主要有四种形式:

键值模型: 这种模型在表现形式上比较单一,却有很强的扩展性
列式模型: 这种模型相比于键值模型能够支持较为复杂的数据,但扩展性相对较差
文档模型: 这种模型对于复杂数据的支持和扩展性都有很大优势
图模型: 这种模型的使用场景不多,通常是基于图数据结构的数据定制的

4、接口层: 接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了五种选择,分别是 Rest、Thrift、Map/Reduce、Get/Put 和特定语言 API,使得应用程序在与数据库交互时更加方便。

NoSQL 分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。NoSQL 数据库在以下的这几种情况下比较适用:

数据模型比较简单;
对灵活性要求很强的系统;
对数据库性能要求较高;
不需要高度的数据一致性;
对于给定 key,比较容易映射复杂值的环境。

1.2 MongoDB 简介

MongoDB 是一个开源的、可扩展的、跨平台的、面向文档的非关系型数据库,它由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

在 MongoDB 中支持以类似 json 的 bson(一种计算机数据交换格式) 格式来存储数据,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象语言中函数调用,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还可以对数据建立索引。MongoDB官网: https://www.mongodb.com/

1.2.1 再议业务应用场景

传统的关系型数据库(如MySQL),在数据操作的 三高 需求以及应对 Web2.0及Web3.0 的网站需求面前,显得力不从心。三高 需求:

High performance - 对数据库高并发读写的需求
Huge Storage - 对海量数据的高效率存储和访问的需求
High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。

MongoDB 可应对 三高 需求。具体的应用场景如:

社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问
物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有
的变更读取出来
物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
视频直播,使用 MongoDB 存储用户信息、点赞互动信息等

这些应用场景中,数据操作方面的共同特点是:

数据量大
写入操作频繁(读写都很频繁)
价值较低的数据,对事务性要求不高

对于这样的数据,我们更适合使用 MongoDB 来实现数据的存储。什么时候选择 MongoDB? 在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:

应用不需要事务及复杂 join 支持
新应用,需求会变,数据模型无法确定,想快速迭代开发
应用需要2000-3000以上的读写QPS(更高也可以)
应用需要TB甚至 PB 级别数据存储
应用发展迅速,需要能快速水平扩展
应用要求存储的数据不丢失
应用需要99.999%高可用
应用需要大量的地理位置查询、文本查询

如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。

1.2.2 为什么要使用 MongoDB

市面上的数据库软件众多,我们为什么要选择 MongoDB 呢?换句话说就是 MongDB 有什么优势呢?下面列举了几点原因。

1、面向文档。 由于 MongoDB 是 NoSQL 类型的数据库,它不是像关系类型数据库那样以固定的格式存储数据,而是将数据存储在文档中,这使 MongoDB 非常灵活,可以适应实际的商业环境和需求。

2、临时查询。 MongoDB 支持按字段、范围和正则表达式查询并返回文档中的数据

3、索引。 可以创建索引以提高 MongoDB 中的搜索性能,文档中的任何字段都可以建立索引

4、复制。 MongoDB 支持高可用性的副本集。副本集由两个或多个 MongoDB 数据库实例组成,每个副本集成员可以随时充当主副本或辅助副本的角色,主副本是与客户端交互并执行所有读/写操作的主服务器。辅助副本使用内置复制维护主副本种的数据。当主副本失败时,副本集将自动切换到辅助副本,然后将辅助副本作为主服务器;

5、负载平衡。 MongoDB 可以在多台服务器上运行,以平衡负载或复制数据,以便在硬件出现故障时保持系统正常运行。

1.2.3 适用场景

MongoDB 的主要目标是在键/值存储方式和传统的 RDBMS(关系型数据库) 系统之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,MongoDB 适用于以下场景:

1、网站数据。 MongoDB 非常适合实时的插入、更新与查询数据,并具备网站实时存储数据所需的复制及高度伸缩的特性

2、缓存。 由于性能很高,MongoDB 也适合作为信息基础设施的缓存层,在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载

3、庞大的、低价值的数据。 使用传统的关系型数据库存取大量数据时,数据库的运行效率往往并不尽人意,而 MongoDB 的出现使这个问题迎刃而解,MongoDB 非常适合庞大数据的存储

4、高伸缩性的场景。 MongoDB 内置了 MapReduce 引擎,因此非常适合由数十或数百台服务器组成的数据库

5、用于对象及 JSON 数据的存储。 MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询。

说了这么多 MongoDB 的好处,但它也不是万能的,比如以下这几个地方就不适合使用 MongoDB:

1、高度事务性的系统: 例如银行或会计系统,传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序

2、传统的商业智能应用: 针对特定问题的 BI(全称 Business Intelligence,中文意思为 商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值)数据库会产生高度优化的查询方式,对于此类应用,数据仓库可能是更合适的选择

3、需要复杂 SQL 查询的应用

二、安装和使用MongoDB客户端

2.1 Windows 安装 MongoDB

提示:下载前需要先注册/登陆 MongoDB 官网的账号。

要在 Windows 系统上安装 MongoDB,首先需要在 MongoDB 的官网 https://www.mongodb.com/try/download/community 下载 MongoDB 的安装包,如下图所示:
在这里插入图片描述
下载完成之后,如下图所示:
在这里插入图片描述
双击运行我们刚刚下载的 .msi 格式的 MongoDB 安装包,在弹出的窗口中单击 Next,如下图所示:
在这里插入图片描述
接受用户许可协议,并单击 Next,如下图所示:
在这里插入图片描述
单击 Custom(自定义) 按钮来自定义安装,如下图所示:
在这里插入图片描述
修改安装目录,并单击 Next,如下图所示:
在这里插入图片描述
选中 Install MongoDB as a Service,并在下面的选项中选择 Run service as Network Service user,完成后单击 Next,如下图所示:
在这里插入图片描述
取消 Install MongoDB Compass 的勾选(当然也可以选择安装它,但这样就需要花费更久的安装时间),MongoDB Compass 是一个图形界面管理工具,后面如果需要我们也可以再单独下载 (https://www.mongodb.com/try/download/compass) 和安装它,完成上述操作后单击 Next,如下图所示:
在这里插入图片描述
单击 Install 按钮开始安装。如下图所示:
在这里插入图片描述
可能会弹出以下对话框,单击 即可:
在这里插入图片描述
等待安装完成,单击 Finish 按钮退出安装程序即可完成安装,如下图所示:
在这里插入图片描述
验证安装: 不出意外的话,完成上面的一系列操作后 MongoDB 就成功安装到电脑上了。想要验证安装是否成功,可以打开 服务,如果能在服务列表中找到 MongoDB Server,就说明 MongoDB 已经安装成功。打开服务,如下图所示:
在这里插入图片描述
在这里插入图片描述

2.2 Linux-Centos7 安装 MongoDB

下载:https://www.mongodb.com/try/download/community-kubernetes-operator 选择 Linux-Centos7 版本:
在这里插入图片描述
下载好的安装包如下图所示:
在这里插入图片描述
将下载好之后的安装包上传到 Linux 机器上,如下图所示:
在这里插入图片描述
解压到当前目录:tar -zxvf mongodb-linux-x86_64-rhel70-4.4.17.tgz
移动解压后的文件夹到指定的目录中:mv mongodb-linux-x86_64-rhel70-4.4.17 /usr/local/mongodb
新建几个目录,分别用来存储数据和日志:

#数据存储目录
mkdir -p /mongodb/single/data/db
#日志存储目录
mkdir -p /mongodb/single/log

新建并修改配置文件,vim /mongodb/single/mongod.conf

systemLog:
	#MongoDB发送所有日志输出的目标指定为文件
	# #The path of the log file to which mongod or mongos should send all diagnostic logging information
	destination: file
	#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
	path: "/mongodb/single/log/mongod.log"
	#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
	logAppend: true
storage:
	#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
	##The directory where the mongod instance stores its data.Default Value is "/data/db".
	dbPath: "/mongodb/single/data/db"
	journal:
		#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
		enabled: true
processManagement:
	#启用在后台运行mongos或mongod进程的守护进程模式。
	fork: true
net:
	#服务实例绑定的IP,默认是localhost
	bindIp: 0.0.0.0
	#bindIp
	#绑定的端口,默认是27017
	port: 27017
security:
    # 添加如下权限认证配置
	authorization: enabled

启动MongoDB服务:/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf,如下图所示:
在这里插入图片描述
如果启动后不是 successfully ,则是启动失败了。原因基本上就是配置文件有问题。通过进程来查看服务是否启动了:
在这里插入图片描述
停止服务的方式有两种:快速关闭和标准关闭,下面依次说明:快速关闭方法(快速,简单,数据可能会出错)目标,通过系统的 kill 命令直接杀死进程

#通过进程编号关闭节点
kill -9 24011

杀完要检查一下,避免有的没有杀掉。如果一旦是因为数据损坏,则需要进行如下操作(了解):

删除 lock 文件: rm -f /mongodb/single/data/db/*.lock
修复数据: /usr/local/mongdb/bin/mongod --repair --dbpath=/mongodb/single/data/db

标准的关闭方法(数据不容易出错,但麻烦),目标:通过 mongo 客户端中的 shutdownServer 命令来关闭服务,主要的操作步骤参考如下:

//客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。
mongo --port 27017
//#切换到admin库
use admin
//关闭服务
db.shutdownServer()

2.3 安装Studio 3T

下载地址:

链接:https://pan.baidu.com/s/1hhoe1Dacfk19StJzAcxZ1g 
提取码:subm 
--来自百度网盘超级会员V8的分享

双击下载好的可执行文件,如下图所示:
在这里插入图片描述

接受协议,单击 Next 按钮,如下图所示:

单击 change 按钮,选择安装路径,路径选择完成之后,单击 Next 按钮,如下图所示:

单击 Install 按钮,开始安装,如下图所示:

安装完成之后,勾选运行 Studio 3T 复选框,单击 Finish 按钮,如下图所示:


在这里插入图片描述
填写个人信息,如下图所示:


在这里插入图片描述
在这里插入图片描述




在这里插入图片描述

相关文章:

  • 数商云采购管理系统:采购业务模式介绍,助力汽车零部件企业采购业务高效协同
  • 【变化检测】国土资源典型要素变化遥感智能监测关键技术及应用
  • 计算机毕设(附源码)JAVA-SSM基于的影评系统
  • Ts内置类型---下
  • 前端面试真题宝典(二)
  • 【Linux】gcc/g++ 和 gdb git工具的基本使用方式
  • 逻辑控制2——循环结构
  • 细节决定成败:探究Mybatis中javaType和ofType的区别
  • 11月最新PS2023软件来了,搭配最新Adobe 2022!支持M1
  • FPGA新起点V1开发板(三)——Quartus II软件的使用(流水灯的烧录以及sof转jic的方法记录)
  • 清华学姐三年的测试成长经历,到最后的喜提高薪offer
  • Python第五章 函数
  • 数据库视图存储过程存储函数触发器总结
  • C---指针
  • TYUT太原理工大学2022需求工程考试大题
  • @angular/forms 源码解析之双向绑定
  • bootstrap创建登录注册页面
  • Django 博客开发教程 8 - 博客文章详情页
  • ES6 学习笔记(一)let,const和解构赋值
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • javascript数组去重/查找/插入/删除
  • Promise初体验
  • Promise面试题,控制异步流程
  • Python 基础起步 (十) 什么叫函数?
  • Spring核心 Bean的高级装配
  • XForms - 更强大的Form
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 你真的知道 == 和 equals 的区别吗?
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 鱼骨图 - 如何绘制?
  • 最简单的无缝轮播
  • 你对linux中grep命令知道多少?
  • ​Python 3 新特性:类型注解
  • #Linux(make工具和makefile文件以及makefile语法)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (9)STL算法之逆转旋转
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)linux使用docker容器运行mysql
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)模仿学习-完成后台管理页面查询
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .net core 6 redis操作类
  • .NET gRPC 和RESTful简单对比
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 使窗口永不获得焦点
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .Net中ListT 泛型转成DataTable、DataSet
  • [ C++ ] STL---仿函数与priority_queue
  • [AIGC codze] Kafka 的 rebalance 机制
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计