【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。

在这里插入图片描述

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

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

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

相关文章

SSM高校学生综合测评系统-计算机毕业设计源码16154

摘要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个BS 结构的高校学生综合测评系统,会使高校学生综合测评系统工作系统化、规范化,也会提高高校学生综合测评系统平台形象,提高管理效率。 本学生综合测评系统是针对目前高校学生…

君方智能设计平台-对象持久化技术方案

1.背景介绍 1.1序列化功能 序列化是将复杂的图形对象、数据结构或对象转换成一种可被存储、传输或分享的格式的过程。这个格式通常是二进制或文本形式,能够轻松地保存在文件中或通过网络发送到其他应用程序。序列化的目的是将数据持久化,使其在不同时间…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS,为不方便把图、文、日志等形式的文件保存在公有云上的,可以在自己的服务器上部署文件服务器 看过本人前几个文章的,使用docker就会很快上手部署,直接上所有代码 #添加镜像 docker search minio docker p…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章,如果不借助专业的盖电子骑缝章软件,还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图,在“待盖章PDF文件”区域…

谨慎投稿!这本EI期刊正在被“劫持”!

Journsl ofTisniin lniversity Seience and Technology《天津大学学报(自然科学与工程技术版)》创刊于l955年,月刊,全国核心期刊,天津市一级期刊。该刊是由天津大学主办的综合性学术刊物,主要刊登自然科学和…

这款拖拽式大屏设计神器,太惊艳了!收藏吧!

概念​ 可视化大屏是当今信息时代的一种重要技术工具,它以大屏幕为显示终端,通过图形、图表、地图等形式将大量数据和信息直观地呈现出来,帮助用户更好地理解和分析数据。 JVS智能BI的可视化大屏从界面布局、色彩搭配,到图表类型…

大模型推理加速调研(框架、方法)

大模型推理加速的目标是高吞吐量、低延迟。吞吐量为一个系统可以并行处理的任务量。延时,指一个系统串行处理一个任务时所花费的时间。调研了一些大模型推理的框架。 框架llama.cpprtp-llmvllmTensorRT-LLMLMDeployfastllm语言Chttps://github.com/ggerganov/llama…

SpringBoot项目——送水管理系统

1、导入坐标 坐标作用pagehelper-spring-boot-startermybatis分页插件spring-boot-starter-thymeleafJSP模板引擎mybatis-spring-boot-startermybatisspring-boot-starter-webwebspring-boot-starter-testtestlombok不需要再写getter、setter或equals方法,只要有一…

3D问界—什么是blender,与MAYA有什么区别

问题提出:什么是blender,与MAYA有什么区别 Blender 是一个开源的、免费的 3D 建模和动画软件,广泛应用于各种领域。它提供了丰富的功能和工具,适用于从业余爱好者到专业艺术家的不同需求。 1. Blender 的主要用途和功能 属 性描述…

Vue2基础 13:内置指令

内置指令 1 指令梳理2 补充指令2.1 v-text2.2 v-html2.3 v-cloak案例--延迟引入vue造成js阻塞 2.4 v-once案例--点击按钮1并展示初始的值 2.5 v-pre 1 指令梳理 前面几节的基础学习已经用到了部分的指令,先梳理一下。 指令描述v-bind单向绑定解析表达式&#xff0…

高项论文老是过不了!换种方法与思路…

2024年上半年信息系统项目管理师成绩公布后,许多考生的论文成绩都不理想,很多人得了30多分,及格线上的考生大多只有45、46分,而50分以上的考生似乎并不多。以下应该是许多考生的心声: 每次都是论文不及格,…

蚂蚁全媒体总编刘鑫炜谈新媒体时代艺术家如何创建及提升个人品牌

新媒体时代艺术家如何创建及提升个人品牌形象——专访蚂蚁全媒体总编刘鑫炜 图为蚂蚁全媒体总编刘鑫炜 在新媒体风潮席卷全球的今天,传统艺术与新媒体技术的融合越来越紧密。这种变革不仅改变了艺术作品的呈现方式,也给艺术家们提供了更多的可能性。那么…

【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则(Interface Segregation Principle,ISP)在Vue 3中的应用 接口隔离原则(Interface Segregation Principle,ISP)规定,客户端不应该被迫依赖于它不使用的方法。 换句话说,…

图形编辑器基于Paper.js教程07:鼠标画直线或移动路径

探索Paper.js: 使用鼠标绘制直线和轨迹 在数字图形设计和Web应用开发中,提供一个直观和互动的界面供用户绘制图形是极为重要的。Paper.js是一款功能强大的JavaScript库,它使得在HTML5 Canvas上绘制矢量图形变得简单快捷。本文将介绍如何使用Paper.js实现…

LT86101UXE 国产原装 HDMI2.0 / DVI中继器方案 分辨率 4Kx2K 用于多显示器 DVI/HDMI电缆扩展模块

1. 描述 Lontium LT86101UXE HDMI2.0 / DVI中继器特性高速中继器符合HDMI2.0/1.4规范,最大6 gbps高速数据率、自适应均衡RX输入和pre-emphasized TX输出支持长电缆应用程序,没有晶体在船上保存BOM成本,内部灵活的PCB TX巷交换路由。 LT86101UXE HDMI2.0/DVI中继器自动检测线缆损…

新时代【机器学习】与【Pycharm】:【随机数据生成】与智能【股票市场分析】

目录 第一步:准备工作 1.1 安装必要的库 小李的理解: 1.2 导入库 小李的理解: 第二步:生成和准备数据 2.1 生成随机股票数据 小李的理解: 2.2 数据探索与可视化 小李的理解: 2.3 数据处理 小李…

可编程直流电源的恒压模式(CV)和恒流模式(CC)

本文介绍可编程直流电源的恒压模式(CV)和恒流模式(CC)。 可编程直流电源在硬件开发过程中经常被用到,通常,它有2种模式,恒压模式(CV)和恒流模式(CC&#xff…

桌面记事便签哪款好 好用的桌面记事本app

很多人喜欢在桌面上记事,尤其是经常使用电脑的上班族,这样查看起来更加方便。但在网上众多的记事软件中,哪款才是最好用的呢? 在众多选择中,敬业签以其出色的功能和用户体验脱颖而出,成为很多人记事的首选…

Debezium报错处理系列之第111篇:Can‘t compare binlog filenames with different base names

Debezium报错处理系列之第111篇:Cant compare binlog filenames with different base names 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezium技…

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决:长度固定的问题,插入和删除麻烦的问题 1、逻辑结构: 线性结构 2、存储结构: 链式存储 链表就是将 结点 用链串起来的线性表,链就是 结点 中的…