前言
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。
一、什么是 MongoDB
- MongoDB 是由 C++ 语言编写的开源数据库系统。
- 在高负载的情况下,添加更多的节点,可以保证服务器性能。
- MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
- MongoDB 将数据存储为一个文档。MongoDB 是一个基于分布式文件存储的数据库。
官网:https://www.mongodb.com/try/download/enterprise
二、MongoDB 的特点
- 面向集合存储,易存储对象类型的数据。
- 模式自由
- 支持动态查询
- 可通过网络访问
- 支持查询
- 支持复制和故障恢复
- 支持完全索引,包含内部对象
- 文件存储格式为 BSON(一种 JSON 的扩展)
- 自动处理碎片,以支持云计算层次的扩展性
- 使用高效的二进制数据存储,包括大型对象(如视频等)
- 支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C# 等多种语言
- MongoDB 安装简单
三、MongoDB 的适用场景
MongoDB 的主要目标是在键/值存储方式和传统的 RDBMS 系统之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,MongoDB 适用于以下场景。
- 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
- 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
- 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
- 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。
- 用于对象及 JSON 数据的存储:Mongo 的 BSON 数据格式非常适合文档化格式的存储及查询。
MongoDB 的使用也会有一些限制,例如:它不适合于以下几个地方。
- 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
- 传统的商业智能应用:针对特定问题的 BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
- 需要 SQL 的问题。
四、MongoDB 概念解析
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB 不支持 | |
primary key | primary key | 主键,MongoDB 自动将 _id 字段设置为主键 |
五、MongoDB 安装
下载
#wget http://101.34.22.188/mongodb/mongodb-linux-x86_64-4.0.9.tgz -P /opt
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz -P /opt
解压移动
tar xf /opt/mongodb-linux-x86_64-4.0.9.tgz -C /opt
mv /opt/mongodb-linux-x86_64-4.0.9 /usr/local/mongodb
配置 conf 与目录
mkdir -p /usr/local/mongodb/data/db
mkdir -p /usr/local/mongodb/logs
touch /usr/local/mongodb/logs/mongodb.log
vim /usr/local/mongodb/mongodb.conf
#端口号
port=27017
#db目录
dbpath=/usr/local/mongodb/data/db
#日志目录
logpath=//usr/local/mongodb/logs/mongodb.log
#后台
fork=true
#日志输出
logappend=true
#允许远程IP连接
bind_ip=0.0.0.0
启动测试
启动
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
连接
/usr/local/mongodb/bin/mongo
测试
[root@c7-1 ~]#/usr/local/mongodb/bin/mongo
......
......
> use qydb
switched to db qydb
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> db.createCollection("tab001")
{ "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
qydb 0.000GB
> db.tab001.insert({"name":"深渊浩劫"})
WriteResult({ "nInserted" : 1 })
> db.tab001.find()
{ "_id" : ObjectId("619c3ebc03637f727893d601"), "name" : "深渊浩劫" }
mongodb 注册系统服务
设置 mongodb.service 开机服务启动
cat > /usr/lib/systemd/system/mongodb.service << EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chmod +x /usr/lib/systemd/system/mongodb.service
pkill -9 mongo
systemctl daemon-reload
systemctl enable mongodb.service && systemctl start mongodb.service
添加环境变量
#直接用 export 命令
export PATH=$PATH:/usr/local/mongodb/bin
#修改 profile 文件
cat >> /etc/profile <<"EOF"
export PATH="$PATH:/usr/local/mongodb/bin"
EOF
source /etc/profile
#修改 .bashrc 文件
cat >> /root/.bashrc <<"EOF"
export PATH="$PATH:/usr/local/mongodb/bin"
EOF
添加环境变量是为了优化启动路径
[root@c7-1 ~]#mongo
MongoDB shell version v4.0.9
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("68d26417-7f63-4ab9-8a9b-190716bfb020") }
MongoDB server version: 4.0.9
Server has startup warnings:
2021-11-23T09:47:26.573+0800 I CONTROL [initandlisten]
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten]
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten]
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten]
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2021-11-23T09:47:26.574+0800 I CONTROL [initandlisten]
> ^C
bye
NoSQL 简介
MongoDB 简介
Centos7 安装 Mongodb
Redis、Memcache、MongoDB 区别