【MySQL】MySQL连接池原理与简易网站数据流动是如何进行

MySQL连接池原理与简易网站数据流动是如何进行

  • 1.MySQL连接池原理
  • 2.简易网站数据流动是如何进行

在这里插入图片描述

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

1.MySQL连接池原理

目前我们对mysql有了一定的理解,下面我们谈一下,mysql在网站或者公司内部一套存储方案它定位的问题。

实际上在开发的时候把表结构各方面设计好了,接下来要做的不是写各种各样的sql,在做开发的时候,是先要连接数据库的。而我们会发现连接数据库的时候每一次连的都是先创建数据库对象然后connet用完之后要把释放把连接关掉,这种执行一条sql这种就把连接关了这是一种短连接,并且挺浪费的。

所以mysql在网站和数据库之间,除了一些缓存方面的技术,还有一个在编码层面上的技术叫做 连接池

那这个连接池如何理解呢?

以前是这样做的,需要就连接一下连接之后返回,返回之后就断开。而实际上我们可以自己设计一个连接池的小组件,它可以预先让多个线程预先和mysql建立好连接,建立好连接之后不动就一直处于连接的状态,我们可以把sql语句封装成任务扔到连接池中,然后就可以把任务交给连接池中的线程。一定是这个线程启动的时候就绑定或者关联了mysql连接资源,说白了不就是给线程设计一个类,线程内部里在创建MYSQL对象。在线程池构造线程的同时把MYSQL对象也构建除了。线程启动之后就把mysql连接连上,连上之后线程不就进入自己的事件主循环,然后我们就可以直接用这个连接了。

那这个玩意怎么做呢?

如果在Linux学过线程池的话非常简单,这个连接池内部其实只需要维护一个任务队列就可以。这个连接池里面创建线程池今天还需要加上MYSQL对象,每一个线程给它搞一个MYSQL对象,这个创建MYSQL对象可以当作线程类的类内成员,当初始化线程就可以把对应的MYSQL对象也初始化出来。当启动线程之后也把mysql连接建立好,这样每一个线程都有自己mysql的句柄,都维护了自己的连接。然后线程进入等待任务到来的死循环中不断从任务队列中拿任务,有任务就拿没任务就在条件变量下去等。我们未来就可以通过任务队列把任务下达下去。

在这里插入图片描述

上层可以构建任务task类,里面可以包含两个成员一个是string sql,还有一个回调函数function cb。比如我现在是一个调用方,我要向mysql服务器下达一个delete指令,所以写一个delete 的sql语句然后把它构建成一个task,然后把这个task扔到连接池的任务队列里,然后线程就可以从任务队列里拿到任务,然后拿到对应任务的线程不是有msyql连接吗,就可以去执行mysql_query,把task对象中的sql拿出来交给mysql_query执行。线程池预先创建,连接池预先创建,所以就避免了重新建立连接的动作,所以此时一旦拿到task之后就给对mysql下达sql指令了。

在这里插入图片描述

为什么任务类里面放一个回调函数fuction?
这是因为我们自己的模块可以有一个函数A。如果向mysql增加删除更新还好说,但是读取的时候我们需要把结果拿到。线程拿到这个sql执行之后,然后多做一个动作看看这个fuction是否存在,如果没有那执行完sql就真的完了。如果设置了然后线程池继续回调这个fuction把我们查询出来的结果通过回调拿回来。这个回调就是我们曾经构建task把自己的方法函数A绑定到task里面的function,所以数据就被拿回来了。

在这里插入图片描述

所以我们可以用这种想法去设计成一个连接池。

2.简易网站数据流动是如何进行

一个用户逻辑是怎么走的?以注册和登录为例。

现在有一个服务器上面搭载了一个网站,然后还有一台服务器上面搭载了内网中的mysql。这个服务器上面一定要搭建http:nginx或者业务型的tomcat。现在有一个用户向网站发起一个注册请求,然后这个网站给你回应一个注册页面。然后把对应信息填完就提交。可能用的是GET或者POST方法把数据提交给了服务器,在服务器内部它可能会用一些web语言 比如说php,python,java,然后就可以把你提交的这些数据进行提取出来。然后判断你这是注册,所以就把你的数据构建成sql直接提交到mysql里,自此这个用户信息就被记录到用户表里了。但直接和数据库打交道太慢了, 其次一般公司数据库服务可能存在多份,所以它可能存在后端接入多个数据库。那这个网站怎么去选择用那个数据库呢?那就需要一个中间键,可以用一些效率更到的语言如C/C++等。这个构建成sql不用直接交道数据库了,直接先交给它。然后它内部做一些负载均衡,选择把记录插入数据库。这些数据库会定期做数据的互相同步,然后数据就都有了。

所以网站根本不关心后端有多少数据库,我们把数据库集群化。这里就出现这么多数据库选择那一个。你也不用管了,这个时候就在这两个模块之间添加一层软件层。这就是在计算机学科任何的问题都可以通过加一层软件来解决。所以加软件层来解决对应的问题。

在这里插入图片描述

然后别人想登录,登录也是一样的要进行请求登录页面,然后就返回登录页面,然后输入用户名和密码接下来就以POST或者GET方法提交上来,然后怎么去验证这个用户呢?所以还是提取后构建一个sql语句,把这个sql通过服务下达给后端的数据库。可以根据负载均衡随便去找个数据库,因为数据是同步的。然后就去查,查完后把查询结果返回,只要有结果说明这个用户是合法,然后就可以在服务器层面给它形成各种cookie,session这样的信息。另外我们在访问页面时可能会有一些高频热度的数据我们可以在加一些缓存之类的,比如说Rides之类的。所以在查数据时不一定要去数据库里查,而先到缓存里,有的话直接从缓存里返回。没有的话就去访问mysql。

在这里插入图片描述

这就是一个网站整个初步的逻辑就是这个样子的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Avalonia 常用控件四 Text Controls

1、AutoCompleteBox <StackPanel Margin"20"><TextBlock Margin"0 5">选择一种动物</TextBlock><AutoCompleteBox x:Name"animals" FilterMode"StartsWith"/><!--AutoCompleteBox:Items:要匹配的项目列表。…

如何检查 Windows 版本?这几种方法都可以查看

设置界面查看 要想查看电脑安装的 Windows 版本我们可以在设置界面进行查看&#xff0c;打开设置界面之后点击系统。 接下来在左边框中往下滑动&#xff0c;点击关于选项&#xff0c;然后在右边框中往下滑动找到 Windows 规格模块&#xff0c;在这里就可以看见安装的 Windows …

windows sshkeygen 多平台添加配置

文章目录 .ssh目录生成新的ssh配置添加公钥到仓库验证 .ssh目录 windows下一般为&#xff1a;C:\Users\15237.ssh &#xff0c;其中“15237”为当前登录用户 生成新的ssh .ssh目录下打开“Git Bash Here”&#xff08;如果没有&#xff0c;先安装 Git 软件&#xff09; 执行…

学会python——用python生成一个验证码(python实例二十)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.生成验证码 3.1 代码构思 3.2 代码实例 3.3 运行如果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…

无人直播怎么玩,一文带你了解AI小姐姐自动换装玩法

最近经常有小伙伴问我 就是像这种&#xff0c;一刷礼物&#xff0c;小姐姐就换装的视频到底该怎么做 今天就来教大家 如何来制作这种直播视频 第一步&#xff1a;搭建OBS 1、设置屏幕分辨率&#xff1a; 背景&#xff1a;因为一般初始状态&#xff0c;屏幕是横屏的&#xf…

从零开始的python学习生活1

python函数的对返回值 本来多个return是不行的 这种语法就能接受多个返回值 def hanshu():return 1,"hello",True x,y,z hanshu() print(x) print(y) print(z)函数的多种传参方式 提前说明白了顺序就无所谓了 关键字传递一个传递参数&#xff0c;一个传递键值…

04-Haproxy搭建Web群集

理论讲解 Haproxy 是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如LVS 和Nginx。相比较而言&#xff0c;LVS 性能最好&#xff0c;但是搭建相对复杂:Nginx的upstream模块支持群集功能&#xff0c;但是对群集节点健康检查功能不强&#xff…

人员定位系统于不同场景的实际应用

人员定位系统的应用&#xff0c;尽管还没有做到大范围的普及&#xff0c;但是这一系统在不同企业&#xff0c;不同单位的实际应用效果还是很好的&#xff0c;所以人员定位系统也应用于不同场景当中了&#xff0c;那么&#xff0c;本文就来讲讲这一系统在不同场景的实际应用。 人…

CV每日论文--2024.7.3

1、HouseCrafter: Lifting Floorplans to 3D Scenes with 2D Diffusion Model 中文标题&#xff1a;HouseCrafter&#xff1a;使用 2D 扩散模型将平面图提升为 3D 场景 简介&#xff1a;HouseCrafter是一种新的方法,能够将平面图转换为完整的大型3D室内场景(如房屋)。它的关键…

软件架构之系统性能评价

软件架构之系统性能评价 第 5 章 系统性能评价5.1 性能指标5.1.1 计算机 5.1.2 网络5.3 性能设计5.3.1 阿姆达尔解决方案5.3.2 负载均衡 5.4 性能评估5.4.1 基准测试程序5.4.2 Web 服务器的性能评估5.4.3 系统监视 第 5 章 系统性能评价 系统性能是一个系统提供给用户的众多性…

80+ ChatGPT 文献综述指令

进行文献综述通常似乎是一项艰巨的任务。它是学术和研究工作的重要组成部分&#xff0c;涉及对先前发表的与特定主题相关的研究进行全面和批判性分析。目标是深入了解该主题的知识状况&#xff0c;找出差距&#xff0c;并为进一步研究奠定基础。 传统上&#xff0c;文献综述是…

idm 支持断点续传吗 idm 断点续传如何使用 idm断点续传怎么解决 idm下载中断后无法继续下载

断点续传功能&#xff0c;让我再也不会惧怕下载大型文件。在断点续传的帮助下&#xff0c;用户可以随时暂停下载任务&#xff0c;并在空闲时继续之前的下载进程。下载文件不惧网络波动&#xff0c;断点续传让下载过程更稳定。有关 idm 支持断点续传吗&#xff0c;idm 断点续传如…

Java:String 类

文章目录 一、概念二、创建字符串三、字符串长度四、连接字符串五、比较字符串 一、概念 字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 二、创建字符串 创建字符串最简单的方式如下: // 直接创…

C++ 面试宝典之:空类大小究竟是不是 0?

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/pD4bIjX2kDzo8gbYRPktPQ 首先&#xff0c;空类是什么&#xff1f;空类指的是不包含任何数据成员的类&#xff0c;但可能包含方法成员。 实例化时…

苹果电脑压缩软件哪个好用一些? mac电脑用什么压缩软件 mac电脑压缩文件怎么设置密码

压缩软件是Mac电脑必不可少的工具&#xff0c;虽然Mac系统自带了一款“归档实用工具”&#xff0c;但是其功能实在匮乏&#xff0c;若你需要加密压缩文件或者把文件压缩成指定格式&#xff0c;那么该工具无法满足你的需求。Mac用户应该怎么选择压缩软件呢&#xff1f;本文就来告…

git 文件没有修改,但一直提示有0行改动,还原也不行

查看文件修改内容 原来是文件的模式(读写可执行权限)发生了变化,内容本是没有变化. 怎么解决 git config --add core.filemode false忽略文件模式

java中反射(Reflection)的4个作用

java中反射&#xff08;Reflection&#xff09;的4个作用 作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断任意一个类所具有的成员变量和方法作用4、在运行时调用任意一个对象的方法总结 &#x1f496;The Begin&#x1f496;…

Excel 宏录制与VBA编程 ——VBA编程技巧篇二 (合并内容相同连续单元格、取消合并单元格并在每个单元格中保留内容)

1、合并内容相同的连续单元格 如果需要合并如图所示的工作表中B列中部门相同的连续单元格 VBA代码&#xff1a; Sub Mergerng()Dim IntRow As IntegerDim i As IntegerApplication.DisplayAlerts FalseWith Sheet1IntRow .Range("A65536").End(xlUp).RowFor i In…

移动UI: 什么特征会被认为是简洁风格,用案例告诉你

什么是简洁风格&#xff0c;恐怕一百个人有一百个是理解&#xff0c;本文通过理论分析案例的方式进行探讨。 移动 UI 中的简洁风格通常具有以下几个特征&#xff1a; 1. 平面化设计&#xff1a; 简洁风格的移动 UI 善于运用平面化设计&#xff0c;即去除过多的阴影、渐变和立…

电子教室如何防止关闭客户端?

防止电子教室中的客户端被学生关闭或绕过&#xff0c;需要采取一系列技术和策略性的措施。以下是一些可行的方法&#xff1a; 技术手段 1. 使用专用教学软件&#xff1a; 采用具有强大控制功能的电子教室软件&#xff0c;如极域电子教室&#xff0c;它们通常包含防关闭、防退…