Nginx安装和功能模块介绍
写在前面本篇学习如何在CentOS7上安装Nginx,并在此基础上了解Nginx强大的功能模块、目录结构和文件等信息。
Nginx安装这里以Centos7系统为例,介绍如何在Linux系统上安装Nginx。
第一步,安装相应的依赖。依次执行如下命令:
12yum -y install pcre-develyum -y install openssl openssl-devel
第二步,下载Nginx。使用如下命令:
1wget http://nginx.org/download/nginx-1.17.0.tar.gz
第三步,解压下载的Nginx目录。使用如下所示的命令:
1tar -zxvf nginx-1.17.0.tar.gz
之后并进入到该解压后的文件中,依次执行如下命令来编译和安装Nginx:
123./configuremakemake install
之后使用whereis命令可以发现Nginx默认被安装在/usr/local/nginx目录下。
第四步,启动Nginx。进入到/usr/local/nginx/sbin目录下,执行./nginx命令即可启动nginx。
第 ...
Nginx简介
写在前面我们知道在传统的Web服务器中,每个客户端连接需要一个单独的进程或者线程来处理,在切换任务的时候需要将CPU切换到新的任务并创建一个新的运行时上下文,这样不仅会消耗额外的内存还会花费一定的CPU时间。当并发请求增加时,服务器负担将会加重,进而对性能产生一定影响。而本文将学习的Nginx服务器则很好的解决了这个问题。
Nginx简介Nginx是一个高性能的HTTP(处理静态文件)和反向代理(负载均衡)服务器,也是一个IMAP/POP3/SMTP代理服务器。现在大部分的Web服务器都使用Nginx作为负载均衡器。
Nginx特点(1)速度更快。在单次请求下会得到更快的响应,而在高并发环境下,Nginx比其他Web服务器有更快的响应。(2)高扩展性。Nginx基于模块化设计,由多个耦合度极低的模块组成,具有很高的扩展性。这种强扩展性,非常适合高流量的网站系统。(3)高可靠性。Nginx的可靠性来源于其核心代码的优秀设计,模块设计的简单性。Nginx官方提供的常用模块非常稳定,每个worker进程相对独立,master进程在一个worker进程出错时可以快速拉起一个新的worker子进 ...
索引原理
写在前面在前面我们对一些常用的数据检索算法和数据结构进行了学习,后面还遗留了B-树和B+树,因此接下来就开始学习这些知识。
B-树B-树读作B杠树,B-树是在平衡二叉树(AVL)上进化而来的,前面学习的几种树,每个节点上只有一个元素,而B-树节点中可以存放多个元素,其目的是为了降低树的高度。
一棵m阶的B-Tree有如下特点:(1)每个节点最多有m个孩子,m称为b树的阶;(2)除了根节点和叶子节点外,其它每个节点至少有Ceil(m/2)个孩子;(3)若根节点不是叶子节点,则至少有2个孩子;(4)所有叶子节点都在同一层,且不包含其它关键字信息;(5)每个非终端节点包含n个关键字(键值)信息;(6)关键字的个数n满足:ceil(m/2)-1 <= n <= m-1;(7)ki(i=1,…n)为关键字,且关键字升序排序;(8)Pi(i=1,…n)为指向子树根节点的指针。P(i-1)指向的子树的所有节点关键字均小于ki,但都大于k(i-1)。
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块。为了描述B-Tree,首先定义一条记录为一个二元的数组[key, data] , ...
索引入门和检索算法
写在前面从本篇开始就正式进入到MySQL的索引学习,索引非常重要,也是后续学习MySQL优化的基础。
本文主要的学习内容如下:(1)索引定义;(2)磁盘中数据的存取;(3)MySQL中的页;(4)数据检索过程;(5)数据检索过程;(6)常用数据结构;(7)文章总结。
索引索引定义索引是依靠某些数据结构和算法来组织数据,最终引导用户快速检索出所需要的数据。
可以看到索引有两个特点:(1)通过数据结构和算法来对原始的数据进行一些有效的组织;(2)通过有效的组织,可以引导用户快速检索出所需要的数据。
其实也就是说索引的本质,是通过不断缩小想获取数据的范围来筛选出最终想要的结果,同时将随机事件变成顺序事件,即使用索引使得我们总能使用同一种查找方式来锁定数据。
磁盘中数据的存取由于数据最终是存储在磁盘内,因此这里以机械键盘为例,来学习磁盘中的几个概念。
(1)扇区。磁盘存储的最小单位,扇区一般大小为512Byte;(2)磁盘块。文件系统与磁盘交互的的最小单位(计算机系统读写磁盘的最小单位),一个磁盘块由连续几个(2^n)扇区组成,块一般大小一般为4KB;(3)磁盘读取数据。磁盘读取数据靠的是机械 ...
异常捕获及处理
写在前面其实在书写存储过程的时候,你已经发现可能会存在一些问题,如“插入的数据违反唯一约束,导致插入失败”、“插入或者更新数据超过字段最大长度,导致操作失败”、“update影响行数和期望结果不一致”等问题。当遇到上述各种异常问题的时候,需要我们捕获异常,并可能回滚当前事务。由于事务在前面已经进行了学习,因此这里主要就学习如何处理异常,也会使用到游标,通过游标来遍历select查询的结果集,然后对每行数据进行处理。
本文主要的学习内容如下:(1)异常分类;(2)内部异常;(3)外部异常;(4)乐观锁解决并发修改数据出错;(5)update影响行数和期望结果不一致时的处理;(6)文章总结。
数据准备为了后续学习的必要,这里先准备了一张数据表book4,相应的建表语句如下所示:
12drop table if exists book4;create table book4(a int primary key);
异常分类MySQL中的异常分为内部异常和外部异常。
在执行SQL语句的时候,可能违反了MySQL的一些约束,导致MySQL内部报错,这些异常是由MySQL内部抛出的,因此称之为My ...
游标学习
写在前面前面对存储过程、函数和流程控制语句进行了学习,接下来再学习另一个知识点—游标。当我们需要对一个select语句的查询结果进行遍历时,就可以使用游标来进行遍历,之后就可以对每行数据进行处理。
本文的主要内容如下:(1)游标定义;(2)游标作用;(3)游标作用;(4)游标的使用语法;(5)单游标示例;(6)游标过程详解;(7)嵌套游标示例;(8)文章总结。
数据准备为了后续学习的必要,这里先准备了三张数据表envy1、envy2和envy3,相应的建表语句如下所示:
12345678910111213141516drop database if exists envythink;create database envythink;use envythink;drop table if exists envy1;create table envy1(a int,b int);insert into envy1 values(1,2),(3,4),(5,6);drop table if exists envy2;create table envy2(a int);insert into ...
流程控制语句
写在前面上一篇文章主要对存储过程和自定义函数进行了学习,可以发现这些逻辑都是较为简单的,但是在实际工作中的业务逻辑远比这复杂,因此需要使用到流程控制语句,那么本篇就来学习MySQL中流程控制语句相关内容。
本文的主要内容如下:(1)if函数;(2)if函数示例;(3)case结构;(4)case结构—类似于Java中的switch语句;(5)case结构—类似于Java中的多重if语句;(6)if结构;(7)if结构示例;(8)循环控制;(9)while循环;(10)repeat循环;(11)loop循环;(12)文章总结。
数据准备为了后续学习的必要,这里先准备了一张数据表t_user,相应的建表语句如下所示:
123456789101112use envythink;drop table if exists t_user;create table t_user( id int primary key comment '编号', sex tinyint not null default 1 comment '性别:1男,2女', name ...
存储过程和自定义函数
写在前面在前面学习变量的时候提到了存储过程,那么本篇就来学习MySQL中的存储过程。一般来说,当线上程序出现问题导致数据错误时,如果情况较为紧急,那么可以写一个存储来快速修复数据,然后再去修复程序,这在某些场景下还是有效的。但是对于Java开发人员来说,存储过程以及在程序中调用存储过程实现一些业务其实是不可取的操作。还有如果MySQL自带的函数无法满足我们日常的需求时,开发者可以自定义一些函数。
本文主要介绍MySQL中的存储过程以及自定义函数的使用。
数据准备为了后续学习的必要,这里先准备了一张数据表book2,相应的建表语句如下所示:
1234567use envythink;drop table if exists t_user;create table t_user( id int not null primary key comment '编号', age smallint unsigned not null comment '年龄', name varchar(16) not null comment '姓名' ...
变量学习
在MySQL使用过程中,我们经常会使用到一些变量,这些变量可能是系统变量或者用户自定义变量。如当查询或者修改系统配置的时候,可以查询和修改系统变量。当然在进行批处理脚本的时候,用户可以自定义变量,来实现数据的重复使用。
本文主要介绍系统变量和用户自定义变量的详细使用。需要说明的是,本篇文章代码中被[]包含的内容表示可选的,而被|分隔的内容表示可选其一。
系统变量前面也说了变量分为系统变量和用户自定义变量,那么接下来就分别介绍这两个变量。
系统变量是指系统定义的变量,它是mysql服务器层面的。
系统变量分类系统变量分为全局变量和会话变量。
(1)查看系统中所有变量的语法如下所示:
1shwo [global | session] variables;
(2)查看全局变量的语法如下所示:
1show global variables;
(3)查看会话变量的语法如下所示:
1show session variables;
(4)如果想查询满足指定条件的系统变量,可以使用like关键字来实现模糊匹配:
1shwo [global | session] like '%变量名% ...
视图学习
写在前面本篇来学习视图,对于开发人员来说这个在实际工作中用的不是很多,但是对于BI大数据人员来说,使用的频率还是较高的,因此本篇来学习一下MySQL中视图的相关内容。
本文的主要内容如下:(1)视图概念;(2)使用场景;(3)视图和表的区别;(4)视图好处;(5)创建视图;(6)修改视图;(7)删除视图;(8)查询视图结构;(9)更新视图;(10)文章总结。
需求说明假设你在一个电商公司任职,领导想知道当月订单总金额、订单数量、购买年龄层次、购买者男女比例等?对于领导来说,他只关心数据,并不关心你如何实现的?因此你不能将写好的SQL语句给它,但是你却需要显示结果?此时就可以使用本篇讲到的视图,使用视图可以隐藏SQL执行的细节,只展示最终的运行结果。
视图概念视图是MySQL5出现的一种虚拟表,行和列的数据来源于定义视图时使用的表,也就是说视图的数据是在使用视图时动态生成的,视图只保存了SQL的执行逻辑,不保存SQL的执行结果。
使用场景当多个地方需要使用到相同的查询结果时,且该查询结果较为复杂的时候,此时就可以使用视图来隐藏其复杂的具体实现细节。
视图和表的区别接下来聊一聊视图和表的区 ...