NOMSQL数据库之Mongodb

一、业务需求

用户访问日志是在web服务器access.log存储

cat access.log | awk '{print $1}' | uniq -c | sort -nr
查看访问次数最多的ip(百万次访问24小时)

统计每日访问量,峰值访问量

把每次访问存储到mongodb中,mongodb用来筛选日志

二、Mongodb介绍

1、nosql介绍

数据库排名: https://db-elWgines.com/en/ranking

关系数据库RDBMS设计表结构,通过SQL语句进行操作。连表关系

常见的关系型数据库: mysql oracle(商业) DB2 (IBM) sqlserver(微软) access(微软) sqlite3(小型嵌入到APP中) postgresql (加州伯克利大学)

nosql泛指非关系数据库存储格式key=>value memcached redis内存缓存数据库

mongodb 具有更多的功能,可以适用于大部分的mysql场景document store文档型数据库

2、产品特点
2.1、存储性

比较适合存储大量的没有规则、无序的数据。未经过处理的数据

存储量大:单表实现存储PB级别的数据 1PB=1024TB

2.2、效率性

数据的效率,就是指存储和读写速度。

2.3、结构

三、Mongodb安装及使用

yum方式安装: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

手动通用安装: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-linux)

1、编译安装mongodb

①上传安装包到服务器目录

②解压到安装目录并移动

tar xvf mongodb-linux-x86_64-rhe162-3.6.5.tgz
mv mongodb-linux-x86_64-rhel62-3.6.5 /usr/local/mongodb  
移动到local目录下

③创建数据存储目录和日志目录

cd /usr/local/mongodb
mkdir data
mkdir logs
可以提前创建,后面就不用创建了

④启动mongod服务

cd /usr/local/mongodb/bin
./mongod --dbpath=/usr/local/mongodb/data
 --logpath=/usr/local/mongodb/logs/log.txt --fork
#可以通过进程和端口的方式检测是否启动成功
ps aux |grep mongod  查看进程
netstat -lntp |grep mongod  查看端口

参数介绍:

dbpath数据存储路径

logpath日志存储路径指向到一个文件

fork 后台启动

auth权限开启

bind_ip 指定绑定网卡ip

2、命令行客户端操作

四、数据结构类型操作CURD

1、添加数据
1.1、普通数据添加 多维数据添加 数组信息添加

第一步:连接数据库之后切换使用数据库,不存在就自动创建

./mongo 启动数据库

语法:

db.集合名称.insert (bson格式数据)

2、查询数据

语法:db.集合名称.find(查询条件)

findOne(查询条件)

2.1、笼统方式查询不进行条件限制,全部取出来。

findOne会取出符合结果的第一条信息,并且以格式化形式返回

2.2、条件限制查询

条件格式,所见及所得

db.goods.find({name:'xiaomimax'})
db.goods.findOne({name:'xiaomimax'})  查询符合条件的第一条数据

2.3、范围条件查询

mysql < <= > => !=

mongo $lt 小于 $lte 小于等于 $gt 大于 $gte $ne 不等于

db.goods.find({price:{'$lte':1999}})
db.goods.find({price:{'$lt':1999}})
2.4、多个条件查询

类似mIysql中的AND语法

db.goods.find ({price:{'$lte':1999 },number:{'$gte':40}})
$转义字符 $lte小于等于  $gte大于等于
2.5、多维字段查询

通过多维字段的值进行查询

db.goods.find({'area.city':'zhengzhou'});
结果一定是河南

注意:多维字段需要用引号包含起来

2.6、数组条件查询

①查询满足其中之一即可显示

db.goods.find ( {color : ' black ' })

②满足所有的查询条件才可显示

db.集合名称.find({字段(数组):{'$all':[v1,v2]}})

db.goods.insert({name:'iphonex',price:8398,weight:100,number:200,area:
{province:'jiangsu',city:'nanjing'},color:['gray','black','white','gold']})

db.goods.find({color:{'$all':['black','gold']}})
2.7、限制查询字段

在实际使用环境,不需要查询并显示太多的字段。可以选择设定显示。

语法: db.集合名称.find({查询条件},{筛选条件})

显示为1,不显示为0 要是1都是1,要是0都是0 _id除外(默认是1)

最好用什么查什么,节约内存

2.8、查看官方文档

安装下载以及使用文档,上面都有

2.9、$or查询

满足其中之一的条件就可以显示,类似mysql的中的or条件语法select * from goods where price > 5000 or number >= 100

db.goods.find( { ' $or ': [{price: { '$gt ':5000}},{number: {'$gte ' :100}}]})

格式:

db. goods .find({'$or':[{},{}]})

2.10、count语法

返回结果的数量统计

链式操作

db .goods.count()|

db.goods.find( {price : {'$gt' :500} }).count( )

db.goods.count({price : { '$gt ' :500}})

2.11、limit、skip语法

类似于mysql中的limit (skip,length)语法

limit()取几个

skip()跳过几个

查询价格最高的数据,只显示名字和价格,不显示_id .sort排序也是链式操作

3、修改数据

关系型数据修改无序的数据需要重新定义表结构,非关系型数据库就可以直接存储无序的,更灵活

语法:db.集合名称.update({查询条件},{修改条件})

updateOne()修改匹配的第—条

updateMany()修改匹配所有条

3.1、有$set的修改

db.goods.update( {name : ' iphonex ' } , { ' $set ' :{price : 8000}})

3.2、没有$set的修改

没有$set关键字语法,把设置的字段进行修改,没有设置的就会被删除掉

db. goods.update( {name : ' iphonex ' } ,{price :8000})

4、删除数据
4.1、删除记录

语法:db.集合名称.remove({查询条件})

deleteOne()删除匹配的第一条

deleteMany()删除匹配的多条 如果({})是空的则删除所有数据

一般业务环境是不会delete的,都是和回收站一样隐藏状态信息,数据还是真实存在的

db. goods.remove( {price:8000})

remove不指定字段就会默认全删除

4.2、删除字段

可以删除某个字段的操作,使用的是update语法的$unset

db.goods.update( {name : ' huawei81},{'$unset ' : {weight:0}})

删除weight字段,非关系型数据库特别灵活,字段可以随意删除

值给一个就可以删除了

真实业务当中,一般不做物理删除,会使用一个标识status,来确认是否已经被删除的数据

五、安全设置

https://docs.mongodb.com/manual/tutorial/create-users/mongodb

安全事件: https://www.jianshu.com/p/48d17a69e190 mongodb数据库公网裸奔

1、限制登录

①使用另外一台虚拟机,使用mongo命令行端进行测试

在公网裸奔也没事,因为mongodb默认只能本地连接127.0.0.1

②关闭mongodb

正常情况下不要kill -9 mongod,最好不用,很容易起不来服务,使用mongo命令客户端里的关机命令

修改mongod脚本文件

2、用户权限管理

需求:设置一个超级管理员账户,对于所有库具有读写权限

语法:

db.createUser({user: 'root',pwd:'root',roles:['root']})

实现步骤:

①切换admin库,进行用户创建

普通用户创建

roles:[{role:'read',db:'tp5shop'}]

②关闭mongod服务,重启添加权限参数并启动

最后就是登录测试

本地登录测试

忘记了参数可以 直接./mongo --help

远程登录测试

六、php扩展安装mongodb

官网:www.pecl.php.net

是真的卡,需要等

1、PHP扩展安装

安装到web服务器server01和server03上(把web服务器的日志存储到mongodb)

①上传php扩展包

②解压编译安装

③添加php.ini匹配

shell > vim /usr/local/php/etc/php.ini

④重启或者重载php-fpm查看phpinfo

shell > service php-fpm restart/reload

2、桌面管理使用

官网:https://robomongo.org/download

可以下载远程管理工具

3、日志统计展示

很多网站需要统计某个页面或者某个功能访问量,如果访问量比较大,需要记录的组件具有很快的读写效率。可以使用功能性更多的mongodb来完成此业务。mongodb具有更多的数据灵活性。

网站访问日志记录的信息;

ip 用户访问的来源ip

url 用户访问的地址功能模块页面地址time访问时间记录用户访问的时间

user_agent 用户访问的客户端信息

操作实现步骤:

①删除原来的文件

②上传修改好的文件

php中获取代理的真实IP的方式,但是一定要注意必须是代理服务器有传真实IP

③访问页面之后,可以查看到访问已经被记录

如果访问测试时连接不上web页面

可以启动nginx、mycat、redis

开启mongodb服务器

实现了把web访问日志存储在mongodb

七、mongodb数据迁移

1、mongoexport导出

第一步:导出数据

开启 mongodb服务

servcie mongod start

mongo自己连接 自己

use admin  使用或创建 数据库
db.auth({'root'},{'root'})
显示1,代表登录数据库成功
use tp5shop
db.help()  //忘记语法可以查帮助

./mongoexport -d tp5shop -c 集合 -uroot -proot --authenticationDatabase=admin -o ./集合.json 导出集合数据到当前文件的.json

db.qiubai.drop

第二步:导入数据

2、mongodump导出

第一步:导出数据(整个数据库)

./mongodump -d tp5shop -uroot -proot --authenticationDatabase=admin -o ./dump

第二步:导入数据

./mongorestore -uroot -proot --authenticationDatabase=admin --dir=./dump

八、mongoDB命令监控工具

1 ./mongostat
2 ./mongotop

定位哪个数据库在写入数据,哪些没有写入数据

3 、db.hostInfo()

mongodb扩容 主从master slave 4.0 主从方式废弃掉了

4.0后扩容用 复制集replication

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值