连接池:数据库连接管理的关键组件

对于我们编写的几乎每个网络或移动应用程序来说,其底层的关键组件之一就是数据库。

对于我们编写的几乎每个网络或移动应用程序来说,其底层的关键组件之一就是数据库。对于编写使用数据库且高性能且资源高效的应用程序,必须处理一项关键资源,但与 CPU、内存等不同,它通常不是很明显。该资源是数据库连接。

什么是数据库连接?

使用MySQL作为DB的数据库连接

数据库连接是由数据库驱动程序创建的对象,数据库驱动程序是一个软件,用于管理与数据库通信的细节,并使我们的应用程序代码能够轻松地使用数据库。例如,MySQL连接可以通过com.mysql.jdbc.Driver驱动程序创建。连接维护许多东西,其中包括用于数据交换的套接字 (套接字是两台机器之间连接的松散逻辑表示)以及与数据库的会话,与典型的 Web 会话非常相似。

需要连接池

连接管理不善的陷阱

未正确关闭数据库连接是难以检测的错误来源。最常见的错误是:

  1. 'Too many connections'错误,数据库不接受客户端连接进行查询处理

  2. 某种形式的内存溢出(例如:'Heap OutOfMemoryError'):由于打开的连接在内存中累积而发生。

即使 Web 应用程序中服务请求的单个位置没有正确关闭连接,随着时间的推移,也可能会因上述错误而导致应用程序崩溃。

使用连接池通常可以减少或消除此类错误。

引入连接池的效果

考虑以下简单程序,它在数据库上运行 1000 个查询:

for i = 1 to 1000
    connection = Driver.getConnection()
    result = connection.executeQuery(query)
    connection.close()

上面代码中我们创建和关闭连接的次数随着执行的查询数量线性增加。

该程序可以通过使用一个非常简单的连接池来高度优化,连接池只是活动数据库连接的缓存。

Pool = CreateConnectionPool(size = 2)
for i = 1 to 1000
    connection = Pool.getConnection()
    result = executeQuery(query, connection)
    Pool.returnConnection(connection)

连接池的简化表示

在这里,创建连接被从池中获取连接所取代,而关闭连接则被返回到池中所取代,后者速度更快。

无池(~34 秒)

// Query Execution without pool ---> ~34 sec
public static void main(String[] args) throws SQLException {
    long start = System.currentTimeMillis();
    for(int i = 0 ;i < 1000; i++){
        // 1. Application will load the suitable MySQL Driver, eg: com.mysql.jdbc.Driver, com.mysql.cj.jdbc.Driver
        // 2. Driver will connect to the MySQL DB using the provided URL for the DB and credentials
        // 3. Driver will return a connection object corresponding to created DB connection
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db", "root", "");
        
        connection.createStatement().execute("select count(*) from places");
        
        // release connection
        connection.close();
    }
    System.out.println(System.currentTimeMillis() - start);

带池(非常幼稚的实现)(~16 秒)

连接池虽然以非常简单的方式实现,但却导致程序执行时间减少了50% 以上。(执行时间为 34 秒至 16 秒)。

复杂的连接池库,例如HikariCP、C3P0等,可以带来巨大的性能提升并为您的应用程序带来资源效率。

如何确定连接池的大小

假设您有一个 Web 应用程序,其中处理每个请求都需要对数据库记录执行操作,并且您在阅读本文后决定使用连接池:)

如果您的 Web 应用程序要处理 100 个并发请求的负载,那么连接池的大小应该是多少?100,对吗(每个请求 1 个)?

答案是,这取决于几个因素,而且大多数情况下,必须通过实验得出适当的值。需要考虑的一些因素如下:

  1. 您的网络应用程序处理的并发请求数

  2. 平均查询执行时间

  3. DB资源(CPU核心、磁盘速度)

但它通常比人们通常想象的要低;例如,对于上例中的 100 个并发请求,好的池大小大多不会大于 10。最后,这里有一个图可以直观地考虑大小调整:

要点

  • 什么是数据库连接?

  • 什么是连接池?为什么它有用?

  • 如何确定连接池的大小?


    文章来源地址https://www.toymoban.com/diary/system/572.html


到此这篇关于连接池:数据库连接管理的关键组件的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/system/572.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
车联网数据分析:大数据实时拯救生命,预防事故的关键
上一篇 2023年12月05日 17:10
数据库操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解
下一篇 2023年12月09日 10:15

相关文章

  • Python数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件

    在Python中,数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件等技术来实现的。以下是一些建议的步骤和工具,用于在Python项目中实施数据权限管理: 用户身份验证: 使用如Djan

    2024年04月26日
    浏览(45)
  • 什么是 Java 中的数据库连接池?为什么使用连接池来管理数据库连接?

    数据库连接池(database connection pool)是在 Java 中用于管理数据库连接的一种技术。它的主要目的是提高数据库连接的重用性和性能。在传统的数据库连接方式中,每次与数据库建立连接时都需要进行一系列的网络通信和身份验证操作,这样的开销较大并且会影响应用程序的性

    2024年02月06日
    浏览(63)
  • openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数

    102.1 背景信息 当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。 全局的最大连接数:由运行参数max_connections指定。 某用户的连接数:在创建用户时

    2024年02月07日
    浏览(63)
  • 【MySQL】使用DBeaver数据库管理工具进行MySQL数据库连接

    一、数据库连接信息填写 1、服务器地址:填写服务器部署的地址,以及端口号 2、数据库:sys 3、用户名:root 4、密码:服务器上面设置的具体密码 以上信息填写错误的报错提示 :Access denied for user ‘XXX’@’%’ to database ‘10.42.67.22’ 二、数据库说明 1、数据库连接时选择的

    2024年02月09日
    浏览(91)
  • 数据库--教务管理系统(数据库部分--Java-jdbc连接)

    我所设计的教务管理系统包括6大部分,学生信息、教师信息、课程信息、班级信息、选课信息、教授信息。该系统可以通过不同的群体进行操作:学生群体可以对个人信息、班级、教师信息进行查询操作,对于课程则可以进行选课操作;教师群体可以个人信息、班级信息、学

    2024年02月03日
    浏览(60)
  • java 银行管理系统(连接数据库Mysql)

    程序共有三个文件 Bankmangement.java:包括程序运行的主函数,方法等 User.java:实体类,用于创建对象 JDBCUtils:对数据库方法进行封装 1.User实体类 数据库共有三张表,分别是admin管理员帐号,user用户账号,record用户记录。 2.Bankmangement功能图 Bankmangement User JDBCUtils

    2024年02月12日
    浏览(41)
  • Spring事务管理 | 数据库连接池流程原理分析

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 事务(Transaction),一般是指要做的或所做的事情。在计算机 术语 中是指访问并可能更新数据库中各种 数据项 的一个程序 执行单元 。事务通常由 高级数据库 操纵语言或编程语言(如SQL,C++或Java)书写的 用户程序

    2024年02月02日
    浏览(50)
  • 如何使用Flask-SQLAlchemy来管理数据库连接和操作数据?

    首先,我们需要安装Flask-SQLAlchemy。你可以使用pip来安装它,就像这样: 好了,现在我们已经有了一个可以操作数据库的工具,接下来让我们来看看如何使用它吧! 首先,我们需要创建一个Flask应用对象,并配置数据库的连接字符串和师: 现在,我们已经创建了一个数据库,

    2024年02月15日
    浏览(50)
  • openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接

    100.1 背景信息 openGauss支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。 100.2 前提条件 从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设

    2024年02月05日
    浏览(61)
  • Java连接数据库实现图书馆管理系统(详细教程)

    该功能用到的软件为 IDEA 、Navicat 、云服务器(非必须) 源码下载 https://www.aliyundrive.com/s/UTz8pNxobGK 在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为5.6。 1.创建图书管理数据库library 字符集为:utf8 -utf8_general_ci 2.设计好将要使用的sql语句 视图、存储

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包