MongoDB的介绍与服务安装

源自 中国大学mooc >大数据技术原理与应用 >第五讲 NoSQL数据库

一、NoSQL的兴起

1、NoSQL简介

1.1 发展历史(摘自维基百科)

NOSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。

2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NOSQL的概念,这时的NOSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NOSQL最普遍的解释是“非关联型的”,强调键-值存储面向文档数据库的优点,而不是单纯的反对RDBMS。

总结:NOSQL(Not Only SQL),即 不仅仅是SQL,泛指非关系型的数据库,不保证关系数据的ACID特性。

1.2 NoSQL数据库特点

  • NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。(灵活的可扩展性)
  • 灵活的数据模型
  • 与云计算紧密结合

补充什么是数据模型:

模式是对数据的抽象,所以说数据的结构就是模式!

数据模型是对模式的抽象,所以说模式的结构就是数据模型!比如关系模型、层次模型、网状模型。

2 NoSQL兴起的原因

2.1 关系数据库已经无法满足Web2.0的需求。主要表现在以下几个方面:

  1. 无法满足海量数据的管理需求
  2. 无法满足数据高并发的需求
  3. 无法满足高可扩展性和高可用性的需求

MySQL集群是否可以完全解决问题?

2.2 “One size fits all” 模式不适用于截然不通的业务场景

关系模型用于数据分析时强调高吞吐,用于在线业务强调低延时,对于这两种不同的结构用同一套模型来抽象是不合适的

Hadoop针对数据分析,MongoDB、Redis等针对在线业务,两者都抛弃了关系模型。

2.3 关系数据库完善的事务机制和高效的查询机制到了Web2.0时代成了鸡肋

  1. Web2.0网站系统通常不要求严格的数据库事务
  2. Web2.0不要求严格的读写实时性
  3. Web2.0通常不包含复杂的SQL查询

3、NoSQL与关系数据库的比较

3.1  关系数据库

优势:以完善的关系代数理论为基础,有严格的标准,支持事务ACID特性,借助索引机制实现高效查询,技术成熟,有专业公司的技术支持。

劣势:可扩展性差,不支持海量数据存储,数据模型死板,无法友好支持Web2.0应用,事务机制影响系统整体性能。

3.2  NoSQL数据库

优势:可以支持海量数据存储,灵活的数据模型友好的支持Web2.0应用,强大的横向扩展能力。

劣势:缺乏数学理论基础,复杂查询性能低,大都不实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队技术支持,维护较困难。

3.3  总结

两者各有优缺点,无法相互取代,只是应用场景不同罢了

关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证事务强一致性。

NoSQL数据库应用场景:互联网企业、传统业务非关键业务。

4、NoSQL的四大类型

列存储:按列存储,方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

key-value存储:可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

文档存储:文档存储一般用类似json的格式存储,存储的内容是文档型的。可以看作是键值存储的升级版。

图存储:图形关系的最佳存储。

4.1 不同数据库比较分析

5、NOSQL的三大基石

5.1 CAP定理(源自菜鸟教程)

又称为布鲁尔定理,对于分布式计算来来说不可能满足以下三点:

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

5.2 BASE

BASE的基本含义是基本可用(Basically Available)、软状态(Soft-state)、最终一致性(Eventually Consistency):

二、MongoDB服务的安装 

1、MongoDB的简介

MongoDB数据库是一种NOSQL数据库,是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB将数据存储为一个文档,数据结构由键值对组成。

MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组、文档数组。

2、MongoDB概念解析

基本概念是文档、集合、数据库

3、MongoDB的安装

如同许多软件安装步骤一样

4、MongoDB的配置

1、配置环境变量

MongoDB文件的bin目录下有两个命令

  • mongod 启动服务器
  • mongo   启动客户端(即连接服务器)

配置环境变量的目的:是为了在任何路径下都可以找到并使用这两个命令。

右键此电脑点击属性>高级系统设置>环境变量>编辑Path

2、启动MongoDB服务

因为启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。

如下创建所需文件夹:

D:\software\mongodb\data\db  存放数据库文件

D:\software\mongodb\data\log  存放日志文件,

因为我们配置了环境变量,所以可以在任何路径下使用mongod、mongo命令。

  1. 打开CMD输入命令 mongod --dbpath D:\software\mongodb\data\db 来启动服务器

      2. 再打开一个输入命令  mongo 来连接服务器

    3.上面已经说明连接成功,也可以在浏览器中输入 http://localhost:27017 ,如果显示如下界面,表示服务启动成功。

3、配置本地Windows MongoDB服务

3.1 原因

将MongoDB以Windows服务的方式安装,这样以后就可以以服务的方式来启动,不然每次都需要到CMD命令行中输入mongod来启动

3.2 步骤

方法一:

1、mongodb安装根目录下创建配置文件:mongo.config文件并输入以下内容:

dbpath=D:\software\mongodb\data\db #数据
logpath=D:\software\mongodb\data\log\MongoDB.log
logappend=true #错误日志采用追加模式
journal=true #启用日志文件
quiet=true #过滤无用的日志信息
port=27017  #默认端口号

2、重点:接下来就开始输入命令安装服务

输入命令:mongod --config D:\software\mongodb\mongo.config --install --serviceName "MongoDB"

意思是根据刚创建的mongo.config配置文件安装服务,名称为MongoDB,到时"服务"里mongodb的名称就是"MongoDB"

切记:这里是通过管理员身份允许的CMD,不然不成功,亲试。

3、启动服务

通过 net start MongoDB来启动服务 ,net stop MongoDB关闭服务

4、 win+R打开运行输入services.msc

发现在本地服务中多了一项服务MongoDB服务,表示mongoDB服务安装成功。

方法二:

mongod --dbpathD:\software\mongodb\data\db --logpath D:\software\mongodb\data\log\MongoDB.log --install --serviceName "MongoDB"

5、mongod.exe - MongoDB服务启动工具

mongod.exe是mongodb服务的启动工具。

我们可以通过mongod --help查看mongod的所有参数说明,以下是部分常用参数的中文解释。

基本配置参数

参数说明
--dbpath arg# 指定数据库路径
--port arg#指定服务端口号,默认端口27017
--bind_ip arg# 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath arg# 指定MongoDB日志文件,注意是指定文件不是目录
--logappend# 使用追加的方式写日志
--fork# 以守护进程的方式运行MongoDB,创建服务器进程
--auth# 启用验证
--keyFile arg# 集群的私钥的完整路径,只对于Replica Set 架构有效
--journal# 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--serviceName指定服务名称
--install指定作为一个Windows服务安装。

Replica set(副本集)选项:

 

参数说明
--replSet arg# 设置副本集名称

Sharding(分片)选项

--configsvr# 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
--shardsvr# 声明这是一个集群的分片,默认端口27018

示例

 ./mongod -shardsvr -replSet shard1 -port 16161 -dbpath /data/mongodb/data/shard1a -oplogSize 100 -logpath /data/mongodb/logs/shard1a.log -logappend -fork -rest

上述参数都可以写入 mongod.conf 配置文档里例如:

 dbpath = /data/mongodb
 logpath = /data/mongodb/mongodb.log
 logappend = true
 port = 27017
 fork = true
 auth = true
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值