MongoDB
作者:烨竹
MongoDB简介:
MongoDB是功能最像关系型数据库的一种基于分布式文件存储的非关系型数据库。它的数据保存在磁盘上(使用文档方式存储数据),而且数据格式为bson格式(json)。对于MongoDB数据库支持海量数据存储并且读写速度比较快
简单理解:
1、非关系型数据库(nosql):对于非关系型数据库大多都是以key-value方式存储数据并且保存数据位置一般为内存或者磁盘;非关系型数据库大多都不支持事物(弱支持)并且非关系型数据库大多可扩展能力比较强
关系与非关系型数据库区别在于表与表之间的区别,理解为关系型数据库可以进行连表操作,而非关系型数据库不能连表
2、读写速度快
由于在mongodb中存在一种内存映射机制因此导致读写速度比较快;
在写入数据时,先将数据写入内存中,一旦内存写入完成,就告知客户端已经完成数据写入。但是本质还没有完成,后期自行将内存中的数据转移到磁盘中
在查询数据时 mongodb会讲热点数据保存到内存中
其次导致读写速度快的原因是因为会占用较高的存储空间(空间换时时间)
MongoDB特性:
1、读写速度快
MongoDB与MySQL速度对比
2、支持读写分离
自带主从复制功能实现读写分离
3、支持分布式存储
自带分片功能;该功能就可以实现分布式存储
4、安全性高
由于MongoDB是非关系型数据库。没有SQL语句
MongoDB应用场景
适用场景:
持久化缓存层
高效的实时性
用于对象及json数据的存储
高伸缩性的场景
大尺寸,低价值的数据存储(数据量比较大但是数据的价值比较低可以容许有丢失)
不适用场景:
要求高度事务性的系统。
传统的商业智能应用
复杂多表查询
MongoDB安装
windows下安装mongodb
下载网址:https://github.com/keyesone66/windowscs-mongodb.git
安装网址:https://blog.csdn.net/ztx114/article/details/78326573
简单的建立用户权限:https://blog.csdn.net/qq_27093465/article/details/54599535
开启php扩展:去https://pecl.php.net/package/mongodb/1.2.9/windows下载相对应的版本;解压php_mongodb.dll文件到php的etc目录,在php.ini添加extension=php_mongodb.dll,重启服务器在phpinfo中查看即可
linux下安装mongodb
1.1 配置包管理器(yum)
新建/etc/yum.repos.d/mongodb-org-3.4.repo文件,方便我们使用yum安装mongodb。
sudo vim /etc/yum.repos.d/mongodb-org-3.4.repo
写入下面的内容
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
1.2 安装mongodb
sudo yum install -y mongodb-org
1.3 运行mongodb
禁用SELinux
sudo vim /etc/selinux/config
将SELINUX设为disabled
SELINUX=disabled
开启mongodb防火墙 firewall
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-all
注销绑定ip
sudo vim /etc/mongod.conf
将bindIp那行注释掉
启动mongodb
sudo systemctl start mongod.service
开机启动
sudo systemctl enable mongod.service
进行下面操作:
安装完成
1.4 、mongodb中的权限
简单理解:
在mongodb的2版本中用户可以划分为两种角色, 一种为超级管理员另外一种为普通管理员。
对于每一种管理员本质就是每一个数据库的管理员(mongodb中每一个数据库都可以设置不同的管理)。只是超级管理员比较特殊是属于一个”隐藏”的admin数据库
MongoDB认证流程
MongoDB没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
切换到admin数据库,添加的账号才是管理员账号
用户只能在用户所在数据库登录,包括超级管理员账号
超级管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以
①、相关语法
添加管理员
语法:db.createUser(用户名,密码,是否只读)
在使用过程中一定要注意当前所在的数据库。当前在哪一个数据库下执行该操作表示给该数据库增加用户。如果是在admin数据库下增加表示增加超级管理员
添加超级管理员:
db.createUser(
{
user: "admin",
pwd: "123456",
roles:
[
{
role: "root",
db: "admin"
}
]
}
)
添加管理员:
db.createUser(
{
user: "root",
pwd: "123456",
roles:
[
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
}
)
然后退出,再用admin登录,创建其他用户,给予dbOwner的权限,可以对某个数据库进行所有操作:
mongo [ip]/admin -u admin -p admin
use [db_name]
db.createUser(
{
user: "[user]",
pwd: "[password]",
roles:
[
{
role: "dbOwner",
db: "[db_name]"
}
]
}
)
认证权限:db.auth("root","123456")
修改用户权限
db.updateUser( "yezhu",
{
"roles" : [
{
"role" : "read",
"db" : "mydb"
}
]
}
)
修改用户密码
db.changeUserPassword('aliang','abc123');
②、实现用户权限
添加管理员账号
> mongo
> use admin #切换到admin数据库
> db.system.users.find(); #用户表没有数据
> show users;
> db.createUser( #创建管理员账号admin
{
user:"root",
pwd:"123456",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
}
)
开启权限验证
开启认证,需重启生效(我的这个版本不需要修改配置文件加上auth=true参数)
> show dbs #显示所有数据库失败,还没认证
2017-11-30T22:47:12.341+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1
> use admin //切换到admin数据库
switched to db admin
> db.auth('root','123456'); //在admin数据库认证成功
1
> show dbs
admin 0.000GB
local 0.000GB
添加普通用户
> use mydb //创建mydb数据库
switched to db mydb
#创建aliang用户
> db.createUser(
{
user: "yezhu",
pwd: "123456",
roles: [ { role: "readWrite", db: "mydb" } ]
}
)
> db.auth('yezhu','123456') #认证成功
1
1.5、安装mongodb-php扩展
下载:https://github.com/keyesone66/windowscs-mongodb.git
用xftp上传
解压:tar xvzf mongodb--1.4.4.tgz
编译安装
cd mongodb--1.4.4
phpize
./configure --with-php-config=/usr/bin/php-config
make && make install
在php.ini文件中添加extension=mongo.so
extension=mongo.so
重启php-fpm或服务器
systemctl restart php-fpm
查看phpinfo
curl 127.0.0.1/phpinfo.php|grep mongo
显示如下:
MongoDB使用
进入数据库:mongo
查看帮助:help
查看数据库帮助db.help()
选择或者创建数据库:use 数据库名称
创建集合:显示创建db.createCollection('集合名称')
隐式创建 db.集合名称.insert({})
查看集合:show tables show collections
查看数据库:show dbs show databases
删除集合:db.删除的集合名称.drop()