企业架构NOSQL数据库之MongoDB

目录

一、背景描述及其方案设计

(一)业务背景描述

(二)模拟运维设计方案

二、Mongodb介绍

(一)nosql介绍

(二)产品特点

1、存储性

2、 效率性

3、结构

 三、安装和配置

(一)安装方式介绍

(二)二进制可执行安装

1、上传安装包到服务器目录

2、 解压到安装目录 并移动

 3、创建数据存储目录和日志目录

4、启动mongod服务

 (三)命令行客户端操作

 四、数据结构类型操作 CURD

(一)添加数据

1、mongodb里存储数据的格式文档形式,以bson格式的文档形式。

2、 语法:db.集合名称.insert(bson格式数据)

3、普通数据添加

4、多维数据对象添加

 5、数组信息添加

 (二)查询数据

1、语法:

2、笼统方式查询

 3、条件限制查询

 4、范围条件查询

5、多个条件查询

6、多维字段查询

7、数组条件查询

(1)查询满足其中之一即可显示

 (2)满足查询条件所有的才可显示

8、限制查询字段

 9、$or查询

10、count 语法

 11、limit语法 skip语法

 (三)修改数据

 1、语法:

2、有$set的修改

3、 没有$set的修改

 (四)删除数据

1、删除记录

2、删除字段

 五、安全设置

(一)限制登录

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

​编辑 2、关闭mongodb

3、 添加启动的脚本,启动mongod

 4、使用远程登录mongod服务

(二) 用户权限管理

1、需求

2、语法:

3、实现步骤:

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

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

​编辑 ③测试使用

​编辑 六、业务实例

 (一)PHP扩展安装

1、上传php扩展包

2、解压编译安装

3、添加php.ini匹配

4、重启php-fpm查看phpinfo

 (二)桌面管理使用

 1、软件是绿色版本,直接解压,点击使用即可

2、填写相关参数

 ​编辑

 3、测试是否可以正常连接

4、点击连接

 5、查看数据

 (三)日志统计展示

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

2、网站访问日志记录的信息:

3、使用服务器

4、Tip:nginx负载均衡服务器解决后端服务获取不到真实用户IP的方式

①在负载均衡nginx服务器,填写真实用户IP的转发

②web服务器的nginx需要配置接收真实的用户IP,需要使用到模块--with-http_realip_module,在编译安装nginx时需要加入

③配置语法

​编辑 ④操作实现步骤:

 (1)删除原来的文件

(2)上传修改好的文件

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


一、背景描述及其方案设计

(一)业务背景描述

⽤户数量: 10000-12000(⽤户量猛增)
PV : 1000000-5000000(24小时访问次数总和)
QPS: 50-100*(每秒访问次数)  300
DAU: 2000~*000(每日活跃用户数)

根据业务需求:

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

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

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

(二)模拟运维设计方案

根据以上业务需求,采用mongodb数据库存储用户的访问日志,使用单台服务器

①访问日志存储

②在mongo中筛选查看信息

二、Mongodb介绍

(一)nosql介绍

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

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

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

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

memcached   redis 内存缓存数据库  

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

(二)产品特点

1、存储性

比较适合存储大量的没有规则无序的数据。

存储量大:单表实现存储PB级别的数据

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

1EB (Exabyte 百亿亿字节 艾字节)=1024PB,

1ZB (Zettabyte 十万亿亿字节 泽字节)= 1024EB,

1YB (Yottabyte 一亿亿亿字节 尧字节)= 1024ZB,

2、 效率性

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

 

3、结构

 三、安装和配置

(一)安装方式介绍

yum方式安装:Install MongoDB Community Edition on Red Hat or CentOS — MongoDB Manual

手动通用安装:Install MongoDB Community Edition on Linux — MongoDB Manual

(二)二进制可执行安装

1、上传安装包到服务器目录

2、 解压到安装目录 并移动

shell > tar xvf mongodb-linux-x86_64-rhel62-3.6.5.tgz
shell > mv mongodb-linux-x86_64-rhel62-3.6.5 /usr/local/mongodb

 3、创建数据存储目录和日志目录

shell > cd /usr/local/mongodb

shell > mkdir data

shell > mkdir logs

4、启动mongod服务

shell > cd /usr/local/mongodb/bin

shell > ./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/log.txt --fork

参数介绍:

dbpath 数据存储路径

logpath 日志存储路径

fork  后台启动

auth  权限开启

bind_ip  指定绑定网卡ip

 (三)命令行客户端操作

 四、数据结构类型操作 CURD

(一)添加数据

1、mongodb里存储数据的格式文档形式,以bson格式的文档形式。

在mongodb中,可有无需创建数据库和集合,使用的时候会自动创建 

创建一个库devops

2、 语法:db.集合名称.insert(bson格式数据)

3、普通数据添加

db.goods.insert({name:'huawei01',price:1000,weight:135,number:35})

4、多维数据对象添加

db.goods.insert({name:'xiaomi5',price:1999,weight:156,number:45,area:{province:'beijing',city:'beijing'}})

 5、数组信息添加

db.goods.insert({name:'xiaomimax',price:2000,weight:180,number:100,area:{province:'henan',city:'zhengzhou'},color:['black','white','red']})

 (二)查询数据

1、语法:

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

db.集合名称.findOne(查询条件)

2、笼统方式查询

不进行条件限制,全部取出来。

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

 3、条件限制查询

条件格式,所见及所得
db.goods.find({name:'xiaomimax'})
db.goods.findOne({name:'xiaomimax'})

 4、范围条件查询

mysql   <     <=   >   >=    !=

mongo  $lt    $lte  $gt  $gte  $ne

db.goods.find({price:{'$lte':1999}})

db.goods.find({price:{'$lt':1999}})

5、多个条件查询

类似mysql中的AND语法

db.goods.find({price:{'$lte':1999},number:{'$gte':40}})

6、多维字段查询

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

db.goods.find({'area.city':'zhengzhou'});

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

7、数组条件查询

(1)查询满足其中之一即可显示

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

 (2)满足查询条件所有的才可显示

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']}})

8、限制查询字段

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

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

显示为1,不显示为0   要是1都是1,要是0都是0  _id除外

db.goods.find({color:{'$all':['black','gold']}},{name:1,_id:0})

 注意采用合适的方式,显示出查询字段值内容

_id是mongodb数据库里的集合中,默认的主键id,具有索引内容,通过主键查询,会很快的查询速度。不要随意修改此值,使用默认即可。

 9、$or查询

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

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

10、count 语法

返回结果的数量统计

链式操作

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

 

 11、limit语法 skip语法

类似于mysql中的limit(skip,length)语法
limit()  取几个
skip()   跳过几个
db.goods.find().limit(1);

db.goods.find().skip(1).limit(1);

mongodb语法和SQL语句的对比

 

 (三)修改数据

 1、语法:

db.集合名称.update({查询条件},{修改条件})
db.集合名称.updateOne()  修改匹配的第一条
db.集合名称.updateMany()  修改匹配所有条

2、有$set的修改

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

db.没有$set的修改goods.updateOne({name:'xiaomi5'},{'$set':{price:1500}})

3、 没有$set的修改

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

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

 (四)删除数据

1、删除记录

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

db.集合名称.deleteOne()  删除匹配的第一条

db.集合名称.deleteMany()  删除匹配的多条

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

db.goods.deleteMany({price:{'$lte':2000}})

 

2、删除字段

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

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

值给一个就可以删除了

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

 五、安全设置

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

mongodb安全事件:https://www.jianshu.com/p/48d17a69e190

(一)限制登录

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

远程登录方法

2、关闭mongodb

正常情况下不要kill -9 mongod,使用mongo命令客户端里的关机命令

3、 添加启动的脚本,启动mongod

shell > vim /etc/init.d/mongodb

 

bind绑定是外网通讯的网卡   --bind_ip_all表示绑定0.0.0.0这个任意地址

 4、使用远程登录mongod服务

(二) 用户权限管理

1、需求

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

2、语法:

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

3、实现步骤:

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

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

关闭

在启动脚本中加入--auth参数

 ③测试使用

 添加用户,限制用的库的权限,只读

 六、业务实例

 (一)PHP扩展安装

1、上传php扩展包

如果没有phpize这个命令,需要yum安装php-devel

2、解压编译安装

shell > yum -y install php-devel  #安装phpize
shell > tar xvf mongodb-1.5.3.tgz
shell > cd mongodb-1.5.3
shell > phpize
shell > ./configure && make && make install

3、添加php.ini匹配

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

4、重启php-fpm查看phpinfo

shell > service php-fpm restart

 (二)桌面管理使用

 1、软件是绿色版本,直接解压,点击使用即可

 

2、填写相关参数

 

 

 3、测试是否可以正常连接

 

4、点击连接

 5、查看数据

 (三)日志统计展示

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

2、网站访问日志记录的信息:

ip 用户访问的来源ip
url  用户访问的地址  功能模块页面地址
time  访问时间  记录用户访问的时间值
user_agent 用户访问的客户端信息

3、使用服务器

web1(server01)->mycat(server07)->master(server02)->slave(server06)->cache(server08)->mongodb(server10)

4、Tip:nginx负载均衡服务器解决后端服务获取不到真实用户IP的方式

①在负载均衡nginx服务器,填写真实用户IP的转发

注意如果使用负载均衡,后端获取的IP为负载均衡代理的IP。

如果后端需要获取到真是的IP,负载均衡服务器,必须要配置参数,把真实IP进行传输 

②web服务器的nginx需要配置接收真实的用户IP,需要使用到模块--with-http_realip_module,在编译安装nginx时需要加入

③配置语法

④操作实现步骤:

 (1)删除原来的文件

(2)上传修改好的文件

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

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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode-每日一题【剑指 Offer 10- I. 斐波那契数列】

题目 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xff09;。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开…

[openCV]基于赛道追踪的智能车巡线方案V1

import cv2 as cv import os import numpy as npimport time# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表""&quo…

K3s vs K8s:轻量级对决 - 探索替代方案

在当今云原生应用的领域中&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;已经成为了无可争议的领导者。然而&#xff0c;随着应用规模的不断增长&#xff0c;一些开发者和运维人员开始感受到了K8s的重量级特性所带来的挑战。为了解决这一问题&#xff0c;一个名为K3s的…

如何在轻量级RTSP服务支持H.264扩展SEI发送接收自定义数据?

为什么开发轻量级RTSP服务&#xff1f; 开发轻量级RTSP服务的目的是为了解决在某些场景下用户或开发者需要单独部署RTSP或RTMP服务的问题。这种服务的优势主要有以下几点&#xff1a; 便利性&#xff1a;通过轻量级RTSP服务&#xff0c;用户无需配置单独的服务器&#xff0c;…

CentOS6如何进入单用户模式

问题&#xff1a;因为挂载有问题&#xff0c;开机启动不了&#xff0c;需要进入单用户模式进入修改fstab挂载文件。 1、Linux系统开机&#xff0c;在3秒内按下啊e&#xff0c;然后跳转到内核界面。 2、再按下e进入如下界面&#xff0c;选择kernel的一项&#xff0c;然后按下e键…

视频安防监控EasyCVR平台海康大华设备国标GB28181告警布防的报文说明

TSINGSEE青犀视频监控综合管理平台EasyCVR基于云边端协同&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台既具备传统安防视频监控的能力&#xff0c;比如&#xff1a;视频监控直播、云端录像、云存储、录像检索与回看、告警上报、平台级联、云台控制、语音对讲等&…

深度学习Redis(2):持久化

前言 在上一篇文章中&#xff0c;介绍Redis的内存模型&#xff0c;从这篇文章开始&#xff0c;将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了Redis高可用的什么问题&#xff1b;然后详细介绍Redis的持…

elasticsearch 配置用户名和密码

无密码的其他配置项在&#xff1a;https://blog.csdn.net/Xeon_CC/article/details/132064295 elasticsearch.yml配置文件&#xff1a; xpack.security.enabled: true xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /path/to/elastic-certi…

软件测试分类总结

目录 1.根据源代码可见度划分 1.1黑盒测试 1.2白盒测试 1.3灰盒测试 2.根据开发阶段划分 2.1单元测试 2.2集成测试 2.3系统测试 2.4验收测试 3.按照实施组织划分 3.1α测试 3.2β测试 3.3第三方测试 4.按照是否运行程序划分 4.1静态测试 4.2动态测试 5.根据软件测试工作的…

GO学习之 函数(Function)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 文章目录 GO系列前言一、什么是…

神经影像脑网络图、brain map可视化汇总

神经影像脑网络图、brain map可视化汇总 介绍使用R语言进行脑成像可视化的例子代码使用Python制作的脑成像可视化示例代码介绍 神经影像可视化构成了科学结果解释和交流的核心,也是数据质量控制的基石。 通常,这些图像和图形是通过手动更改图形用户界面 (GUI) 上的设置来生成…

机器学习04-数据理解之数据可视化-(基于Pima数据集)

什么是数据可视化? 数据可视化是指通过图表、图形、地图等视觉元素将数据呈现出来的过程。它是将抽象的、复杂的数据转化为直观、易于理解的视觉表达的一种方法。数据可视化的目的是帮助人们更好地理解数据&#xff0c;从中发现模式、趋势、关联和异常&#xff0c;从而作出更明…

【安全测试】Web应用安全之XSS跨站脚本攻击漏洞

目录 前言 XSS概念及分类 反射型XSS(非持久性XSS) 存储型XSS(持久型XSS) 如何测试XSS漏洞 方法一&#xff1a; 方法二&#xff1a; XSS漏洞修复 原则&#xff1a;不相信客户输入的数据 处理建议 资料获取方法 前言 以前都只是在各类文档中见到过XSS&#xff0c;也进…

三星进军机器人市场?特斯拉首款人形机器人“擎天柱”明年上市

根据报道&#xff0c;三星电子正在积极研究进军机器人市场的战略。此战略由三星电子的Device eXperience&#xff08;DX&#xff09;部门的专业企划小组制定。据可靠消息透露&#xff0c;该企划小组已着手制定相关计划&#xff0c;以推动公司在机器人市场的发展。 根据外媒报道…

ClickHouse(九):Clickhouse表引擎 - Log系列表引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

java反射机制原理、获取Class方式和其应用场景

1、反射是什么&#xff1a; 反射是一种动态地获取和操作类信息的行为。类信息包括类的属性、方法、构造函数等。 类信息在Java中通常存储在.class文件中。当我们编写Java代码并进行编译时&#xff0c;编译器&#xff08;javac&#xff09;将源代码转换为字节码&#xff0c;并将…

Mapper层公共字段自动填充

公共字段自动填充 问题分析 我们在进行一些新增修改操作时&#xff0c;我们需要设置创建时间、创建人、修改时间、修改人等字段。 这些字段属于公共字段&#xff0c;也就是也就是在我们的系统中很多表中都会有这些字段&#xff0c;如下&#xff1a; 序号字段名含义数据类型1c…

【分布式流控组件 Sentinel 快速入门】——图文详解操作流程

&#x1f4a7; 分布式流控组件 S e n t i n e l 快速入门 \color{#FF1493}{分布式流控组件 Sentinel 快速入门} 分布式流控组件Sentinel快速入门&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#…

智慧工地云平台源码,基于微服务+Java+Spring Cloud +UniApp +MySql开发

智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术&#xff0c;通过工地中台、三维建模服务、视频AI分析服务等技术支撑&#xff0c;实现智慧工地高精度动态仿真&#xff0c;趋势分析、预测、模拟&#xff0c;建设智能化、标准化的智慧工地…

华为云交付

文章目录 一、华为云-公有云架构华为公有云的主要服务1.华为云服务—计算类2.华为云服务——存储类3.华为云服务—网络类4.华为云服务—管理和监督类5.华为云数据库 二、待续 一、华为云-公有云架构 华为公有云的主要服务 ECS&#xff1a;弹性云服务器&#xff08; Elastic Cl…