news 2026/8/31 18:09:44

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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。这就是一个网站整个初步的逻辑就是这个样子的。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 18:08:41

基于 Spring Boot + Vue3 的【城市多功能智慧路灯杆微环境感知多维协同与按需自适应节电中台】设计与实现(含PRD/三端高保真源码/大屏)

基于 Spring Boot Vue3 的【城市多功能智慧路灯杆微环境感知多维协同与按需自适应节电中台】设计与实现(含PRD/三端高保真源码/大屏) Direct Answer: 本系统紧扣住建部、工信部《推进新型城市基础设施建设的指导意见》与国家城市生命线安全…

作者头像 李华
网站建设 2026/8/31 18:06:20

STM32驱动JY61P六轴姿态传感器:从串口协议到数据解析

简介:本资源是面向STM32初学者与嵌入式进阶开发者的六轴姿态测量实战项目,聚焦JY61P陀螺仪模块在STM32F103平台上的完整驱动与数据解析实现,覆盖标准库与HAL库双版本工程,解决姿态解算、串口通信、欧拉角/四元数实时获取等典型应用…

作者头像 李华
网站建设 2026/8/31 18:04:27

SpringBoot教育答疑系统:状态机+MinIO+ES实战骨架

简介:这是一套面向计算机专业本科生的Java毕业设计实战资源,基于SpringBoot框架构建完整的在线答疑系统,兼顾Web端与微信小程序双端交互场景,适用于课程设计、毕设开题与全栈开发能力训练。资源包共818个文件,涵盖97个…

作者头像 李华
网站建设 2026/8/31 18:04:10

基于SSM的智慧养老平台:源码+文档,毕业设计项目全解析

简介:本资源是一套完整的基于SSM框架的智慧养老平台毕业设计项目,面向计算机专业本科生、Java初学者及课程设计实践者,聚焦老龄化社会背景下的养老服务信息化需求,提供可运行、可学习、可拓展的全栈开发范例。压缩包共1048个文件&…

作者头像 李华
网站建设 2026/8/31 18:04:04

浏览器本地批量视频编辑:WebCodecs与ffmpeg.wasm技术解析

如果你手上刚好有一百个野生的视频文件,等着压缩、转码、加水印、统一分辨率,你是打开剪辑软件一个个拖时间线,还是写一条 ffmpeg 命令循环跑?说实话,两条路都不舒服。桌面剪辑软件做重复劳动很像流水线工人&#xff0…

作者头像 李华