【MySQL】链接池原理:简单理解网站的数据流动

**前言:**本节内容是博主快速上手mysql专栏的最后一篇文章。 本节内容不讲解mysql语法了, 而是以网站为例,讲一下前后端的逻辑与联系。 友友们可以当成一个故事听。

ps:本节不需要门槛, 当成一个故事听即可!

目录

连接池原理

注册和登录

注册

登录


连接池原理

mysql 其实正常访问的时候,我们把表创建好了之后,下一步其实不是写各种各样的sql。而是基于表结构做开发,写的都是上层的代码。然后我们对应的就需要去连接数据库。而我们每次连接数据库的时候就是,创建MYSQL数据库对象,对他connect,然后用完把数据库关掉。其实就是执行很小部分的sql或者事务后就关掉了,这就是一种短链接

**所以mysql就在网站和数据库之间,有一种编码级别的技术,就叫做连接池。**所谓的连接池怎么去理解,下面我们利用一张图理解一下:

上面这是一个数据库, 就是我们在执行事务或者sql时, 一般都是执行完一个事务, 或者一个sql之后, 就断开连接了。
而实际上我们可以设计一个叫做连接池的小组件,预先让多个线程对mysql建立好链接,建立好连接之后就不动了一直处于连接的状态。后面有任何任务到来就把对应的sql语句push到连接池当中。然后把任务交给连接池当中的线程。这个**线程在被启动的时候一定是给线程绑定或者关联了连接资源。**连接池里面的动作就应该是下面这样:

cpp 复制代码
创建线程池 +MYSQL
启动线程池 +connect
while(true)
{
        //等待拿任务。
}

连接池里面的的数据就是一个一个的我们自己封装的任务。 这个任务里面我们必须要封装sql语句, 也就是sql对应的字符串:

cpp 复制代码
class tack
{
    private:
    string sql;
    function cb;//
};

有了这个task任务类之后, 以后我们想要执行某个sql语句,就是**将想要执行的sql语句写成字符串,然后构建一个task对象,最后把这个task对象push到线程池队列里面。**线程池队列会从队列里面一个一个的拿到task任务,将里面的string类型的sql成员取出来,去访问mysqld。

然后上面有那个cb函数, 这里的cb是什么意思呢? 因为我们的添加删除修改,有时需要把我们的结果拿到。所以如果我们的**cb没有设置,那么就什么都不做;如果cb设置了,就执行select语句,得到结果集res, 然后回调cb函数:cb(res)。**然后我们的数据就被拿回来了!

以上就是连接池小组件大概的逻辑。

注册和登录

注册

我们先看一下用户的注册。利用一张图来理解:

  1. 首先我们一定要先访问网站, 网站然后给我们返回一个注册的界面。
  2. 我们填好各种信息之后, 就点了提交, 这个时候接口就将我们填写的信息提交到了网站的内部。
  3. 网站内部就是用web语言, 比如java, php, python等等语言, 将各个参数提取出来构成sql语句。
  4. 提交到数据库当中, 但是提交到数据库当中太慢,所以就用到了一层软件层。 这个软件层可能是c/c++或者其他的快速的脚本语言写的。
  5. 数据库本身也能够定期进行数据同步, 所以我们的软件层只需要挑选其中一个数据库,将数据写到数据库当中就行了。这样做了之后,网站就不需要关心有多少数据库, 只要在网站和数据块之间添加一层软件层即可。

登录

登录同样可以利用类似于上面的图来理解:

不同的是当网站返回页面的时候, 不是注册页面, 而是登陆页面。 我们同样需要将信息提交。 然后网站内部就执行一个select语句, 就**比如select* from user where user = 'XXX' and passwd = 'XXX'这种。**然后就去查找。 查找到结果后就说明有这个用户, 就能通过。 否则就不能通过。

中间的软件层部分我们也可以添加一些缓存, 类似redis这些数据库。 就是用来保存高热度的数据, 以后去数据库查找之前先到这些缓存里面去找, 查到了就返回。

------------------以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!

相关推荐
百度智能云技术站15 分钟前
Redis 数据恢复的月光宝盒,闪回到任意指定时间
数据库·redis
~央千澈~19 分钟前
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
java·前端·数据库
快乐肚皮1 小时前
深入解析MySQL日志模块 - Undo Log(回滚日志)与MVCC机制
java·mysql
茶本无香1 小时前
数据库查询性能优化:深入理解与应用物化视图
数据库·性能优化·查询·物化视图
2501_915373882 小时前
neo4j删除所有数据
数据库·neo4j
TDengine (老段)2 小时前
TDengine 运维——巡检工具(安装工具)
大数据·运维·数据库·物联网·时序数据库·tdengine·涛思数据
fruge3 小时前
ubuntu 22.04 编译安装nignx 报错 openssl 问题
数据库·ubuntu·postgresql
bingHHB3 小时前
电商售后服务系统与其他系统集成:实现售后流程自动化
大数据·运维·数据库·自动化·接口隔离原则·集成学习
全栈技术负责人3 小时前
cursor rules设置:让cursor按执行步骤处理(分析需求和上下文、方案对比、确定方案、执行、总结)
数据库·windows·microsoft
TDengine (老段)3 小时前
TDengine 运维——巡检工具(安装前检查)
大数据·运维·数据库·物联网·时序数据库·tdengine·涛思数据