1.MongoDB简介
MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最
像关系型数据库(MySQL)的非关系型数据库。
它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。
MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认
为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
2.业务应用场景
传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。
解释:“三高”需求:
• High performance - 对数据库高并发读写的需求。
• Huge Storage - 对海量数据的高效率存储和访问的需求。
• High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。
而MongoDB可应对“三高”需求。
具体的应用场景如:
1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将
订单所有的变更读取出来。
4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。
这些应用场景中,数据操作方面的共同特点是:
(1)数据量大
(2)写入操作频繁(读写都很频繁)
(3)价值较低的数据,对事务性要求不高
对于这样的数据,我们更适合使用MongoDB来实现数据的存储。
什么时候选择MongoDB
在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:
应用不需要事务及复杂 join 支持
新应用,需求会变,数据模型无法确定,想快速迭代开发
应用需要2000-3000以上的读写QPS(更高也可以)
应用需要TB甚至 PB 级别数据存储
应用发展迅速,需要能快速水平扩展
应用要求存储的数据不丢失
应用需要99.999%高可用
应用需要大量的地理位置查询、文本查询
如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。
3.部署环境
虚拟机要外网:
[root@localhost conf]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=128 time=9.02 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=128 time=8.60 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=128 time=6.93 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6017ms
rtt min/avg/max/mdev = 6.937/8.187/9.022/0.903 ms
linux版本:
#cat /etc/redhat-release,这种方法只适合Redhat系的Linux
#cat /etc/issue,此命令也适用于所有的Linux发行版
[root@localhost conf]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
4.Linux 安装 MongoDB社区版
提示:版本的选择:
MongoDB的版本命名规范如:x.y.z;
y为奇数时表示当前版本为开发版,如:1.5.2、4.1.13; y为偶数时表示当前版本为稳定版,如:1.6.3、4.0.10; z是修正版本号,数字越大越好。
4.1第一种安装方式(官方)
4.1.1 配置程序包管理系统(yum)
#使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum -y update
创建一个/etc/yum.repos.d/mongodb-org-3.6.repo文件,以便您可以使用yum以下命令直接安装MongoDB :
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
4.1.2 下载安装MongoDB包
要安装最新的稳定版MongoDB,请发出以下命令:
sudo yum install -y mongodb-org
或者,要安装特定版本的MongoDB,请分别指定每个组件软件包,并将版本号附加到软件包名称中,如以下示例所示:
sudo yum install -y mongodb-org-3.6.2 mongodb-org-server-3.6.2 mongodb-org-shell-3.6.2 mongodb-org-mongos-3.6.2 mongodb-org-tools-3.6.2
您可以指定任何可用的MongoDB版本。但是yum ,当有新版本可用时,将升级软件包。为防止意外升级,请固定包装。要固定包,exclude请在/etc/yum.conf文件中添加以下指令:
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
4.1.3 MongoDB所需目录创建
默认情况下,MongoDB使用mongod用户帐户运行,并使用以下默认目录:
/var/lib/mongo (数据目录)
/var/log/mongodb (日志目录)
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
默认情况下,MongoDB使用mongod用户帐户运行。创建后,将这些目录的所有者和组设置为mongod:
sudo chown -R mongod:mongod /var/lib/mongo
sudo chown -R mongod:mongod /var/log/mongodb
4.1.4 MongoDB启动
#启动:
sudo systemctl start mongod
#重启:
sudo systemctl restart mongod
#停止:
sudo systemctl stop mongod
4.2第二种安装方式
4.2.1先到官网下载压缩包 mongodb-linux-x86_64-3.6.17.tgz 。
下载地址:https://www.mongodb.com/download-center#community
4.2.2 上传压缩包到Linux中,解压到当前目录:
tar -xvf mongodb-linux-x86_64-3.6.17.tgz
4.2.3 移动解压后的文件夹到指定的目录中:
mv mongodb-linux-x86_64-3.6.17 /usr/local/mongodb
4.2.4 新建几个目录,分别用来存储数据和日志:
创建数据存储目录
创建日志存储目录
mkdir -p /mongodb/single/data/db
mkdir -p /mongodb/single/log
4.2.5 新建并修改配置文件
安装vim命令:
yum -y install vim-enhanced
新建并修改配置文件:
vim /mongodb/single/mongod.yml
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/single/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/single/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/single/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true
#服务实例绑定的IP
bindIp: localhost,192.168.0.49
#bindIp
#绑定的端口
port: 27017
4.2.6 启动
/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.yml
启动成功如下:
本地链接:
/usr/local/mongodb/bin/mongo
#或
/usr/local/mongodb/bin/mongo --host 192.168.0.49 --port 27017
#本地链接可以不带 --host 192.168.0.49 --port 27017
链接成功如下:
参考官方文档资料地址(MongoDB官网):
https://docs.mongodb.com
4.3 添加用户
命令1:
mongo
命令2:
use admin
命令3:
db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
4.4 设置远程连接
vim /etc/mongod.conf
将 bindIp: 127.0.0.1 改为 bindIp: 0.0.0.0