MongDB 是一款跨平台,面向文档的数据库,能够实现高性能,高可用性,而且可以轻松扩展,是一个基于分布式文件存储的开源数据库系统。在高负载的状况下,添加更多的节点,能够保证服务器性能。
MongoDB 也是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。不采用关系模型主要是为了得到更好的拓展性,MongoDB 再也不有“行”(row)的概念,其运行方式主要基于两个概念:集合(collection)与文档(document)。linux
- MongoDB 的特色包括面向集合存储、模式自由、丰富的查询语句和多级索引、复制集机制、易于水平拓展、可插入存储引擎、跨平台多语言支持等。
- MongoDB 安装简单,提供了面向文档存储功能,操做起来比较容易上手。
- MongoDB 提供了复制、高可用性和自动分片功能。若是负载增长(须要更多的存储空间和更强的处理能力),它能够分布在计算机网络中的其余节点上,这就是所谓的分片。
- Mongo 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDB 支持各类编程语言:Ruby、Python、Java、C++、PHP、C# 等各类语言。
MongoDB 能够为 Web 应用提供可拓展的高性能数据存储解决方案。MongoDB 主要适用领域有网站数据、分布式场景、数据缓存和 JSON 文档格式存储。适合大数据量、高并发、弱事务的互联网应用,其内置的水平拓展机制提供了从几百万到十亿级别的数据处理能力,能够很好地知足 Web2.0 和移动互联网应用数据存储的要求。ios
MongoDB 提供了 Linux 平台上的安装包,能够从官方网站 http://www.mongodb.org/downloads 下载。本次咱们选择使用最新版 MongoDB4.0 来安装并实验。mongodb
下载 MongoDB4.0 软件包数据库
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz tar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt mv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodb
# mkdir /data/mongodb1 # mkdir /data/logs/mongodb # touch /data/logs/mongodb/mongodb1.log # chmod -R 777 /data/logs/mongodb/mongodb1.log # vim /usr/local/mongodb/mongodb1.conf //添加下面的行 dbpath=/data/mongodb1 #数据存储目录 logpath=/data/logs/mongodb/mongodb1.log #日志文件 port=27017 #默认服务器端口 logappend=true #使用追加方式写日志 fork=true #后台运行 maxConns=5000 #最大同时链接数,默认2000 storageEngine=mmapv1 #指定存储引擎为内存映射文件
设置内核参数编程
echo 0 > /proc/sys/vm/zone_reclaim_mode sysctl -w vm.zone_reclaim_mode=0 #永久设置 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
设置系统环境变量,方便使用vim
echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile source /etc/profile
启动 mongodb 服务进程,查看端口(默认27017)数组
mongod --config /usr/local/mongodb/mongodb1.conf #开启MongoDB mongod --config /usrlocal/mongodb/mongodb1.conf --shutdown #中止MongoDB netstat -ntap | grep mongod mongo --port 27017 # 进入mongo数据库,如果不指定端口默认进27017端口
cd /usr/local/mongodb/ cp mongodb1.conf mongodb2.conf vim mongodb2.conf #修改以下 # dbpath=/data/mongodb2 #数据存储目录 # logpath=/data/logs/mongodb/mongodb2.log #日志文件 # port=27018 #默认服务器端口 # logappend=true #使用追加方式写日志 # fork=true #后台运行 # maxConns=5000 #最大同时链接数,默认2000 # storageEngine=mmapv1 #指定存储引擎为内存映射文件 mkdir /data/mongodb2 touch /data/logs/mongodb/mongodb2.log chmod -R 777 /data/logs/mongodb/mongodb2.log mongod --config /usr/local/mongodb/mongodb2.conf #开启多实例
MongoDB 的逻辑结构主要由文档(document)、集合(collection)和数据库(database)三部分组成。其中文档是 MongoDB 的核心概念,它是 MongoDB 逻辑存储的最小单元,至关于关系型数据库中的一行记录,多个文档组成集合,集合至关于关系型数据库中的表的概念,多个几个组成数据库。缓存
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表链接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将 _id字段设置为主键 |
登陆、退出安全
#本地登陆(默认实例端口号:--port=27017,能够不写) > mongo #登陆远程主机的实例 > mongo --host 192.168.1.2 --port =27017 #退出MongoDB > exit
数据库操做服务器
#建立数据库(若是数据库不存在,则建立数据库,不然切换到指定数据库) > use school #查看全部数据库 > show dbs #删除school数据库 > use school > db.dropDatabase() #显示数据库操做命令 > db.help()
集合
MongoDB 的数据保存在集合中,全部存储在集合中的数据都是 Binary JSON 格式,简称 BSON。BSON 是一种相似于 JSON 的二进制形式的存储格式。
#建立info集合 > db.createcollection('info') #查看集合 方法一: > show tabels 方法二: > show colletctions #显示info集合操做命令 > db.info.help()
#插入一条记录 > db.info.insert({"id":1,"name":"jack","hobby":["game","talk","sport"]}) #向指定集合中插入一条文档数据 > db.collection.insertOne() #向指定集合中插入多条文档数据 > db.collection.insertMany() #经过循环批量插入数据 > for(var i=1;i<100;i++)db.info.insert({"id":i,"name":"jack"+i})
删除
#删除info集合中id=1的文档 > db.info.remove({"id":"1"})
修改
#修改info集合id=1的name值为"zhangsan"文档 db.info.update({"id":"1"},{$set:{"name":"wzn"}})
查询
#查询info集合全部文档 > db.info.find() #查询info集合id为1的文档 > db.info.findOne({id:1}) #统计记录数 > db.info.count()
选项:
1 : -h 指定Mongodb所在服务器的地址也能够指定端口。(例:-h 127.0.0.1:27017)
2 : -d :须要备份的数据库实例。
3 : -o :备份数据存放的目录 该目录需提早建立。
复制数据库
> db.copyDatabase("db1","db2") //复制数据库db1 到db2 中
# mongo --port 27018 # db.runCommand({"cloneCollection":"db1.info","from":"localhost:27017"})
MongoDB 安全管理主要包括 MongoDB 的安全访问控制以及用户权限分配。
限定监听特定 IP 和端口
# vim /usr/local/mongodb/mongodb1.conf # 只绑定内网卡地址 bind_ip=localhost(ip) # 只监听指定的端口 port=27017
超级用户角色:root
#在db1数据库建立超级用户root,密码:123123 > use db1 > db.createUser({"user":"root","pwd":"123123","roles":["root"]}) > exit # #关闭 mongodb 服务 mongod -f /usr/local/mongodb/mongodb1.conf --shutdown # # 使用带认证参数的方式启动 mongodb 服务 mongod -f /usr/local/mongodb/mongodb1.conf --auth # # 此时查询数据不显示内容,须要进行受权认证 > use db1 > db.auth("root":"123123") # # 固然,实际状况中,咱们能够修改配置文件, #这样别人在访问咱们的 MongoDB 时,咱们能够指定一个有相应权限的用户给他进行登陆并操做 vim /usr/local/mongodb/mongodb1.conf auth=true //添加
> db.currentOp()
> db.killOp(opid)
> db.serverStatus()
> db.status()
> db.users.status()
> db.users.dataSize()
此外,咱们能够经过 Web 界面查看系统监控信息,只须要修改配置文件
# vim /usr/local/mongodb/mongodb1.conf httpinterface=true //添加
经过 Web 页面能够看到:
1)当前 MongoDB 的全部链接
2)各个数据库和集合的访问统计,包括:Reads、Writes、Queries、GetMores、Inserts、Updates、Removes
3)写锁的状态
4)日志文件的最后几百行
5)全部的 MongoDB 命令