10_企业架构NOSQL数据库之MongoDB

企业架构NOSQL数据库之MongoDB

学习目标和内容

1、能够简单描述MongoDB的使用特点

2、能够安装配置启动MongoDB

3、能够使用命令行客户端简单操作MongoDB

4、能够实现基本的数据操作

5、能够实现MongoDB基本安全设置

6、能够操作安装php的MongoDB扩展

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

1、业务背景描述

时间:2017.6.-2017.9

发布产品类型:互联网动态站点 商城

⽤户数量: 10000-12000(⽤户量猛增)

PV : 1000000-5000000(24小时访问次数总和)

QPS: 50-100*(每秒访问次数) 300

DAU: 2000~*000(每日活跃用户数)

根据业务需求:

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

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

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

2、模拟运维设计方案

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

①访问日志存储

②在mongo中筛选查看信息

二、Mongodb介绍

img

1、nosql介绍

数据库排名:DB-Engines Ranking - popularity ranking of database management systems

关系数据库 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、结构

三、安装和配置

1、安装方式介绍

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

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

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

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

shell > cd /usr/local/mongodb
shell > mkdir data
shell > mkdir logs

④启动mongod服务

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

参数介绍:

dbpath 数据存储路径

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

fork 后台启动

auth 权限开启

bind_ip 指定绑定网卡ip

3、命令行客户端操作

四、数据结构类型操作 CURD

1、添加数据

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

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

创建一个库devops

语法:

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

1.1、普通数据添加

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

1.2、多维数据对象添加

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

1.3、数组信息添加

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

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、多个条件查询

类似mysql中的AND语法

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

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除外

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

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

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

2.8、$or查询

满足其中之一的条件就可以显示,类似mysql的中的or条件语法

select * from goods where price > 5000 or number >= 100

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

2.9、count 语法

返回结果的数量统计

链式操作

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

2.10、limit语法 skip语法

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

limit() 取几个

skip() 跳过几个

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

mongodb语法和SQL语句的对比

3、修改数据

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

updateOne() 修改匹配的第一条

updateMany() 修改匹配所有条

3.1、有$set的修改

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

3.2、没有$set的修改

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

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

4、删除数据

4.1、删除记录

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

deleteOne() 删除匹配的第一条

deleteMany() 删除匹配的多条

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

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

4.2、删除字段

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

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

值给一个就可以删除了

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

五、安全设置

Create a User — MongoDB Manual

mongodb安全事件:谈谈最近MongoDB数据库勒索事件 - 简书

1、限制登录

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

远程登录方法

②关闭mongodb

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

③添加启动的脚本,启动mongod

shell > vim /etc/init.d/mongodb

bind绑定是外网通讯的网卡

④使用远程登录mongod服务

2、用户权限管理

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

语法:

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

实现步骤:

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

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

关闭

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

③测试使用

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

六、业务实例

1、PHP扩展安装

安装到web服务器server01和server03上

①上传php扩展包

②解压编译安装

shell > tar xvf mongodb-1.5.3.tgz
shell > cd mongodb-1.5.3
shell > phpize
shell > ./configure && make && make install

③添加php.ini匹配

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

④重启php-fpm查看phpinfo

shell > service php-fpm restart

2、桌面管理使用

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

填写相关参数

测试是否可以正常连接

点击连接

查看数据

3、日志统计展示

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

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

ip 用户访问的来源ip

url 用户访问的地址 功能模块页面地址

time 访问时间 记录用户访问的时间值

user_agent 用户访问的客户端信息

操作实现步骤:

①删除原来的文件

②上传修改好的文件

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

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

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

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

相关文章

Vue实战(十):对数组数据的拆分和分组合并

Vue实战&#xff08;十&#xff09;&#xff1a;对数组数据的拆分和分组合并 数据初始化 //第一种情况 tableData: [{ id: 1, name: ["A", "B"] },{ id: 2, name: ["A", "C"] },{ id: 3, name: ["B", "C"] },{ …

配置阿里云CLI-aliyun命令与安装ossutil

1.aliyun命令官网文档 可以参考文档配置不同账户凭证 https://help.aliyun.com/document_detail/121259.html?spma2c4g.121193.0.i1 使用阿里云 CLI可以参考 https://help.aliyun.com/document_detail/110289.html?spma2c4g.121259.0.0.5ad27f08HvO1dw1&#xff09;账号添加…

springcloud alibaba-Sentinel

文章目录 一.前置知识1.雪崩问题2.服务保护技术对比 二.Sentinel三.微服务整合Sentinel1.限流规则1.流控模式2.流控效果热点参数限流(更细粒度的限流方式) 2.隔离和降级Feign整合Sentinel1.线程隔离2.熔断降级 3.授权规则4.规则持久化 一.前置知识 1.雪崩问题 设想一下以下场…

【C语言】用户空间使用非缓存内存

在用户空间使用非缓存内存通常不是标准做法&#xff0c;因为非缓存内存的操作与硬件平台紧密相关&#xff0c;并且通常被保留给内核模块或设备驱动程序使用。 一、方法 用户空间程序一般不直接处理非缓存内存问题&#xff0c;因为它们依赖于操作系统来管理内存缓存一致性。尽…

AIGC: 关于ChatGPT中基于Whisper模型实现音频转文本

概述 到目前&#xff0c;GPT只能去接收文本的输入&#xff0c;但是在现实的生活当中&#xff0c;会有语音的需求GPT也有相关的能力接入&#xff0c;我们就需要一个能够将语音内容转换成文本的能力 当然其他第三方的软件或者接口也是支持这个功能在 Open AI 有一个语音转文本的…

【五分钟】熟悉np.all()和np.any()的常见用法(干货!!!)

常见使用场景举例 判断numpy数组中是否【全是】非0元素 # 判断数组中是否全是非0元素 a np.array([1, 2, 3, 4]) b np.array([0, 1, 2, 3]) c np.array([np.nan, 1, 2, 3]) # nan --> Not a Number ---> 算非0元素 d np.array([np.inf, 1, 2, 3]) # np.inf -->…

C++使用策略模式,减少使用switch...case...

目录 原理函数类模板函数使用switch...case...不使用switch...case... 知识点decltypestd::remove_reference 原理 函数 #include <iostream> #include <functional> #include <map>void fun1(int a, int b) {std::cout << "fun1 : a "<…

鸿蒙Harmony ArkUI十大开源项目

一 OH哔哩 https://gitee.com/ohos_port/ohbili 项目简介 【OH哔哩】是一款基于OpenHarmony系统ArkUI框架开发的哔哩哔哩动画第三方客户端 用到的三方库 bilibili-API-collect 哔哩哔哩-API收集整理ohos_ijkplayer 基于FFmpeg的视频播放器PullToRefresh 下拉刷新、上拉加载组件…

html css样式选择器介绍

目录 一、单标签选择器二、多标签选择器三、类选择器四、标签结合类选择器五、多个标签结合类选择器六、子标签选择器七、所有子标签选择器八、相邻选择器九、多种选择器混合使用十、超链接样式选择器 一、单标签选择器 下面的 css 会将所有 h1 标签里的文字设置为红色 <!…

【FPGA图像处理实战】- 图像处理前景如何?就业前景如何?

图像处理是FPGA应用的主要领域之一&#xff0c;图像处理数据量特别大且对实时性处理要求高的场景&#xff0c;这恰好能发挥FPGA流水线可实时处理的优势。 那么FPGA图像处理的前景如何&#xff1f; 一、FPGA开发&#xff08;图像处理&#xff09;招聘就业情况 看FPGA图像处理…

c++ memset

memset 函数是 C/C 中的一个函数&#xff0c;用于将一块内存的内容设置为指定的值。在 C 中&#xff0c;你可以使用 #include 头文件来包含 memset 函数的声明。 以下是 memset 函数的基本语法&#xff1a; cpp #include void *memset(void *ptr, int value, size_t num); …

五花八门客户问题(BUG) - 重复打印

根据commit猜测客户问题 git://sourceware.org / glibc.git / commitcommitsummary | shortlog | log | commit | commitdiff | tree (parent: 4573c6b) | patch Dont flush write buffer for ftell author Siddhesh Poyarekar <siddheshredhat.com> Fri, 28 Sep 2012 …

ELK 日志解决方案

ELK 是目前最流行的集中式日志解决方案&#xff0c;提供了对日志收集、存储、展示等一站式的解决方案。 ELK 分别指 Elasticsearch、Logstash、Kibana。 Elasticsearch&#xff1a;分布式数据搜索引擎&#xff0c;基于 Apache Lucene 实现&#xff0c;可集群&#xff0c;提供…

B 站基于 StarRocks 构建大数据元仓

作者&#xff1a;bilibili 大数据高级开发工程师 杨洋 B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试&#xff0c;大数据元仓最终以 StarRocks 为技术底座&#xff0c;从实际的应用效果来看&#xff0c;大部分查询都能在几…

mvn site 命令

概述 在Maven中&#xff0c;site指的是一个特定的阶段&#xff0c;其目的是生成项目相关的站点文档。这些站点文档可以为项目的开发者、用户、以及其他利益相关者提供有关项目的详细信息。 Maven的站点文档通常包括以下内容&#xff1a; 项目信息&#xff1a;这部分提供了关于…

Mysql大数据量删除

Mysql大数据量删除 在一些操作中&#xff0c;可能需要清理一下积压的数据&#xff0c;如果数据量小的话自然没有问题&#xff0c;但是如果是个大数据量的问题&#xff0c;那么就该考虑一个合适的办法了。 在清理大数据量的时候需要考虑是清理部分数据还是清理所有数据&#xf…

【微服务】分布式限流如何实现

Sentinel 是一款阿里巴巴开源的分布式系统级流量控制组件&#xff0c;它提供了流量的自适应控制、熔断降级、系统负载保护等功能。下面是使用 Sentinel 实现分布式限流方案的基本步骤&#xff1a; 引入 Sentinel 依赖&#xff1a;首先在你的 Java 项目中引入 Sentinel 的相关依…

Stm32_串口的帧(不定长)数据接收

目录标题 前言1、串口中断接收固定帧头帧尾数据1.1、任务需求1.2、实现思路1.3、程序源码&#xff1a; 2、串口中断接收用定时器来判断帧结束3、串口中断接收数据空闲中断3.1、串口的空闲中断3.2、实现思路3.3、程序源码 4、串口的空闲中断DMA转运4.1、DMA简介4.2、DMA模式4.3、…

AHB 与 DMA

AHB&#xff08;先进高性能总线&#xff09; 随着深亚微米工艺技术日益成熟&#xff0c;集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法&#xff0c;发展到基于IP核复用的设计方法&#xff0c;并在SOC设计中得到了广泛应用。在基于IP核复用的SoC&#xff08;Syst…

【BME2112】w11 notes

下周做老鼠实验 group analysis SPM group analysis 数据地址resting state 可以分析&#xff1a;correlation 计算两个脑区的相关性 静息态实验简单functional 成功的实验能看到激活区不成功的实验&#xff1a;比如被试头动太大&#xff0c;不是健康的被试 Spontaneous brain…