抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

MongoDB简介

什么是MongoDB

什么是MongoDB

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

  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
存储结构

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点
  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。

MongoDB 下载

你可以在mongodb官网下载该安装包,地址为:https://www.mongodb.com/download-center#community。MonggoDB支持以下平台:

  • OS X 32-bit
  • OS X 64-bit
  • Linux 32-bit
  • Linux 64-bit
  • Windows 32-bit
  • Windows 64-bit
  • Solaris i86pc
  • Solaris 64

MongoDB 工具

有几种可用于MongoDB的管理工具。

监控

MongoDB提供了网络和系统监控工具Munin,它作为一个插件应用于MongoDB中。

Gangila是MongoDB高性能的系统监视的工具,它作为一个插件应用于MongoDB中。

基于图形界面的开源工具 Cacti, 用于查看CPU负载, 网络带宽利用率,它也提供了一个应用于监控 MongoDB 的插件。

GUI
  • Fang of Mongo – 网页式,由Django和jQuery所构成。
  • Futon4Mongo – 一个CouchDB Futon web的mongodb山寨版。
  • Mongo3 – Ruby写成。
  • MongoHub – 适用于OSX的应用程序。
  • Opricot – 一个基于浏览器的MongoDB控制台, 由PHP撰写而成。
  • Database Master — Windows的mongodb管理工具
  • RockMongo — 最好的PHP语言的MongoDB管理工具,轻量级, 支持多国语言.

安装

Windows

下载

下载地址:http://dl.mongodb.org/dl/win32/x86_64

选一个下载,比如[win32/mongodb-win32-x86_64-2012plus-v4.2-latest.zip]这种的,不是上面标注了debugsymbols这种名字的。

下载成功之后解压,大致的目录结构应该是这样的(不是这样就说明你下载错了):

创建目录
  • 创建data目录,并在目录里面创建一个db的目录,存咋数据库文件。
  • 创建logs目录,并且在logs里面创建一个mongo.log文件(mongo.log空着,啥都不写)

创建配置文件

创建一个mongo.conf的配置文件,在mongo.conf中添加以下内容:

1
2
3
4
5
6
dbpath=D:\Program Files\mongodb-4.2.3\data\db #数据库路径
logpath=D:\Program Files\mongodb-4.2.3\logs\mongo.log #日志输出文件路径
#logappend=true #错误日志采用追加模式
#journal=true #启用日志文件,默认启用
#quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
port=27017 #端口号默认为27017

启动

为了从命令提示符下运行 MongoDB 服务器,你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件。

1
mongod --dbpath "D:\Program Files\mongodb-4.2.3\data\db"

然后通过浏览器访问http://localhost:27017/

如果出现如下提示说明启动成功了。

加入服务

以“超级管理员身份”运行”cmd”,创建MongoDB管理服务,输入以下命令:

1
mongod --logpath "D:\Program Files\mongodb-4.2.3\logs\mongo.log" --logappend --dbpath "D:\Program Files\mongodb-4.2.3\data\db" --directoryperdb --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install

同样要使用“超级管理员身份运行

启动MongoDB服务命令
1
net start MongoDB
关闭MongoDB服务命令
1
net stop MongoDB

linux

下载MongoDB
查找MongoDB安装包

到MongoDB地址下载 https://www.mongodb.com/try/download/community linux安装包,并选择对应的版本,点击copy link得到地址就可以通过linux环境wget 进行下载了

下载MongoDB

通过wget命令下载刚才在页面copy的链接进行下载

1
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.5.tgz

解压安装包
1
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz

重名了文件夹

1
mv mongodb-linux-x86_64-rhel70-4.4.5 mongodb4.4.5

配置环境变量

这里根据自己对应的mongodb路径配置,将我们的MongoDB的bin目录配置到系统环境种

1
vi /etc/profile

在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:

1
2
#设置 Mongodb环境变量
export PATH=/usr/local/mongo/mongodb4.4.5/bin:$PATH

保存后通过下面的命令使环境变量生效

1
source /etc/profile
安装MongoDB
准备工作

Linux下安装我们使用的tgz格式的安装包安装的,没有像windows那样可以使用msi进行简易安装,所以,它这个包是不全的,我们需要进入mongodb目录再手动创建两个目录,data和log,data目录是用于存放数据的,log目录是用于存放日志文件的

1
2
3
mkdir data logs
#创建mongodb的日志文件
touch logs/mongodb.log 

创建配置文件

因为该安装包不包含配置文件,我们需要去bin目录下面写一个mongodb的配置文件

1
vi mongodb.conf

这里面的数据文件以及日志路径就是我们刚才创建的目录的路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#端口号 默认为27017
port=27017

#数据库数据存放目录
dbpath=/usr/local/mongodb304/data

#数据库日志存放目录
logpath=/usr/local/mongodb304/logs/mongodb.log

# pid存储路径
pidfilepath = /var/run/mongo.pid

#以追加的方式记录日志
logappend = true

#以后台方式运行进程
fork=true

#开启用户认证
#auth=true

#最大同时连接数
maxConns=100

#这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
bind_ip = 0.0.0.0

#每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#启用日志文件,默认启用
journal=true 

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true 
使用系统服务启动
创建启动脚本

/etc/init.d/路径下创建mongod的启动脚本

1
vi /etc/init.d/mongod

注意将MONGODB_HOME路径改为mongodb的安装路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/sh  
# chkconfig:

#MogoDB home directory
MONGODB_HOME=/usr/local/mongo/mongodb4.4.5/

#mongodb command
MONGODB_BIN=$MONGODB_HOME/bin/mongod

#mongodb config file
MONGODB_CONF=$MONGODB_HOME/bin/mongodb.conf

#mongodb PID
MONGODB_PID=/var/run/mongo.pid

#set open file limit
SYSTEM_MAXFD=65535

MONGODB_NAME="mongodb"
. /etc/rc.d/init.d/functions

if [ ! -f $MONGODB_BIN ]
then
echo "$MONGODB_NAME startup: $MONGODB_BIN not exists! "
exit
fi

start(){
ulimit -HSn $SYSTEM_MAXFD
$MONGODB_BIN --config="$MONGODB_CONF" --fork ##added
ret=$?
if [ $ret -eq 0 ]; then
action $"Starting $MONGODB_NAME: " /bin/true
else
action $"Starting $MONGODB_NAME: " /bin/false
fi

}

stop(){
PID=$(ps aux |grep "$MONGODB_NAME" |grep "$MONGODB_CONF" |grep -v grep |wc -l)
if [[ $PID -eq 0 ]];then
action $"Stopping $MONGODB_NAME: " /bin/false
exit
fi
kill -HUP `cat $MONGODB_PID`
ret=$?
if [ $ret -eq 0 ]; then
action $"Stopping $MONGODB_NAME: " /bin/true
rm -f $MONGODB_PID
else
action $"Stopping $MONGODB_NAME: " /bin/false
fi

}

restart() {

stop
sleep 2
start
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
esac
设置权限

设置该脚本拥有执行权限

1
chmod 755 /etc/init.d/mongod
启动MongoDB

使用如下命令启动MongoDB

1
2
3
4
# 启动mongodb
service mongod start
# 检查服务是否存在
ps -ef|grep mongo

出现如下就提示表示mongodb已经启动成功

访问测试

输入mongo命令使用本地客户端进行访问

1
mongo

出现如下界面表示登录mongodb成功

查询所有的数据库

1
show dbs;

关闭防火墙

如果需要mongoDB进行外部访问需要开放防火墙端口,因为我们使用了虚拟机所以直接关闭防火墙

检查防火墙状态

使用下面的命令可以检查防火墙状态

1
systemctl status firewalld.service

然后在下方可以查看得到“active(running)”,此时说明防火墙已经打开了

停止防火墙

在命令行中输入systemctl stop firewalld.service命令,进行关闭防火墙

1
systemctl stop firewalld.service

​ 然后再使用命令systemctl status firewalld.service,在下方出现disavtive(dead),这样就说明防火墙已经关闭。

永久关闭防火墙

再在命令行中输入命令“systemctl disable firewalld.service”命令,即可永久关闭防火墙

1
systemctl disable firewalld.service

这样下次启动,防火墙就不会开启了

优雅关机

在生产环境,不要用 kill -9 关掉 mongodb 的进程,很可能造成 mongodb 的数据丢失;可以使用以下方式进行优雅关机

1
2
use admin
db.shutdownServer()

适用场景

MongoDB 的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS 系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,Mongo 适用于以下场景。

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

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

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

● 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。

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

不适场景

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

● 传统的商业智能应用:针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

● 需要SQL 的问题。

应用案例

MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、 视频直播等,以下是几个实际的应用案例:

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

评论