万叶集 |
---|
隐约雷鸣,阴霾天空。 |
但盼风雨来,能留你在此。 |
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS - 全栈 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 MVP 、华为云享专家、阿里云专家博主
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
专栏系列(点击解锁) 学习路线(点击解锁) 知识定位 Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。 语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。 自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。 自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。 数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。 爬虫入门与实战 更新中 数据分析篇 更新中 前端入门+flask 全栈篇 更新中 django+vue全栈篇 更新中 拓展-人工智能入门 更新中 网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者 网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。 vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。 shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结] WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器 测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得! 测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。 RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。 Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。 MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
上一章节我们利用了事务机制进行了数据的写入(执行了 INSERT 语句)。"增、删、改、查"这四个操作,只做了 “查询” 与 “添加”,“删除” 与 “修改” 的实验还没有做。先别着急,接下来我们先学习一下 “连接池技术”,然后再去练习 “删除” 与 “修改” 的实验也不迟。
- 数据库最昂贵的操作就是、也是硬件最大的开销操作就是创建并维持网络连接。
- 数据库连接是一种关键的、有限的、昂贵的资源、在并发执行的应用程序中体现得尤为突出。
- 为什么说网络连接对于数据库来说开销很大呢?这是因为数据库几乎都是使用 “TCP/IP” 协议,应用程序想要连接到数据库上, “TCP” 协议是需要经过
"三次握手、四次挥手"
的。- 数据库分配一个线程接受客户端的网络连接,而且该线程还是阻塞执行的。在创建 “TCP” 连接 这个过程里,如果客户端还没有发送握手请求,那么数据库的某一个线程就必须得一直等待。
- 这对于数据库来说是一种极大的浪费,而且连接创建出来以后还要去验证用户的登录信息,验证通过之后,客户端才能够使用连接去操作数据库。另外,我们的操作系统能够连接的进程数是有限的,比如普通的电脑最多也就只能运行几千个线程,能分配给数据的线程数并不是很多。所以数据库能够支持的网络连接数,是与线程数挂钩的。
- 现在我们已经知道了数据库连接的硬件开销与时间成本是非常高昂的了,所以之前那种使用完就关闭连接,下次使用时再重新创建连接的做法真的是划不来。关于这种问题,
"数据库连接池"
技术就可以很好的解决这一点。
"数据库连接池"技术(英文名:Connecttion Pool)
的本质上其实是一中缓存技术,用面向对象封装技术来保存预先创建出的数据库连接。预先创建好一些数据库连接,然后缓存起来,避免了程序语言反复创建和销毁连接的昂贵代价。- 当我们需要数据库连接的时候,就从数据库连接池中提取出一个
"Connecttion"
,然后创建游标,再去执行 SQL 语句。SQL 语句执行完毕之后,也不用关闭连接。该链接会被连接池自动的回收,连接池也不会关闭该连接,而是缓存起来等待下次的继续使用。- 有了连接池之后,预先创建出连接,然后反复的使用这样就节省了反复创建连接的昂贵开销,所以程序必须要引入数据库连接池技术的。
来看一下数据库连接池应该如何使用,通过什么样的变成语句,能把数据库连接池创建出来,然后再从连接池里成功的取出一个数据库的连接。
import mysql.connector.pooling config = {......} pool = mysql.connector.pooling.MySQLConnectionPool(**config, pool_size=10) connect = pool.get_connection() ......
第 1 行:导入 mysql.connector.pooling
第 3 行:数据库连接池信息 赋值 给 变量 “config”
第 4 行:利用 "MySQLConnectionPool" (数据库创建连接池的类) 创建连接池对象 - "pool" ;传入数据库连接池信息 与 连接池的大小(可根据硬件的实际情况改大一些)
第 5 行:利用 “get_connection()” 方法去调用 连接池的连接
第 7 行:接下来就可以去创建游标、执行 SQL 语句 等等,这里就不详细列明了。
做一个对比来说,Python 的数据库连接池比较容易使用,对于初学者来说非常的简单。但是从设置的细节、灵活性来看,真的就不如 Java 的数据库连接池技术。
首先在 Java 语言中有很多的 “数据库连接池产品” ,并且这些连接池产品非常的灵活。可以设置很多的参数,比如 “连接数量的最大值/最小值”、“连接池的初始创建连接数”、"取出连接池的连接是否执行 SQL 检测"等等,从这一点就可以看出,Java 非常的适合做那种非常大的项目。
# coding:utf-8 import mysql.connector.pooling config={ "host": "localhost", "port": 3306, "user": "root", "password": "admin123", "database": "demo" } try: pool=mysql.connector.pooling.MySQLConnectionPool( **config, pool_size=10 ) connec=pool.get_connection() # 将 "连接池实例化" 赋值给 "connect" connec.start_transaction() # 启动事务 cursor=connec.cursor() # 创建游标 sql="UPDATE t_emp SET sal=sal+%s WHERE empno=%s" # 预编译 SQL cursor.execute(sql, (200, 9097)) # 游标执行 SQL connec.commit() # 提交事务 except Exception as e: if "connec" in dir(): connec.rollback() print(e)
第 4 行:导入 mysql.connector.pooling。
第 7 -13 行:数据库连接池信息 赋值 给 变量 “config”。
第 15 - 25 行:利用 “MySQLConnectionPool” (数据库创建连接池的类) 创建连接池对象 - “pool” ;并捕获该连接池语句的异常。
第 26 - 29 行:判断 “connect” 这个变量是否存在,其实也就是判断当前数据库连接是否存在。
该书是这个月刚出版,并且相当受欢迎。本书基于MySQL 8.0版本编写,为读者提供了完整的实例代码。本书适合对MySQL数据库技术感兴趣的平台架构师、运维管理人员和项目开发人员阅读。读者无论是否接触过数据库技术,只要具备基础的Linux和SQL知识,都能够通过本书快速掌握MySQL并提升实战经验。
本书也是作者基于多年的教学与实践进行的总结,重点介绍了MySQL数据库的核心原理与体系架构,涉及开发、运维、管理与架构等知识。读者根据本书中的实战步骤进行操作,可以在实际项目的生产环境中快速应用并实施MySQL。
全书共12章:
- MySQL数据库基础
- 详解 InnoDB存储引擎
- MySQL用户管理与访问控制
- 管理MySQL的数据库对象
- MySQL应用程序开发
- MySQL的事务与锁
- MySQL备份与恢复
- MySQL的主从复制与主主复制
- MySQL的高可用架构
- MySQL性能优化与运维管理
- MySQL数据库的监控和使用MySQL数据库的中间件。
本次送书 3 本,评论区抽三位小伙伴送书。
活动时间:截止到 2022-08-28 20:00:00
抽奖方式:利用网络公开的在线抽奖工具进行抽奖
参与方式:关注博主、点赞、收藏,评论区评论 "人生苦短,拒绝内卷!"
也有不想靠抽,想自己买的同学可以参考下面的链接
京东自营购买链接: 《新品-MySQL数据库进阶实战》-京东图书