JAVA- 数据库连接池原理
第一次 Java 程序要在 MySQL 中执行一条语句,那么就必须建立一个 Connection 对象,代表了与 MySQL 数据库的连接通过直接发送你要执行的 SQL 语句之后,就会调用 Connection.close() 来关闭和销毁与数据库的连接。为什么要立即关闭呢?因为数据库的连接是一种很重的资源,代表了网络连接、IO 等资源。所以如果不是用的话就需要尽早关闭,以避免资源浪费。
JDBC 的劣势与不足:如果要频繁地操作 MySQL 的话,那么就势必会频繁地创建 Connection 对象,底层建立起连接与 MySQL 的占用了网络资源、IO 资源的连接。每次使用完 Connection 对象之后,都必须将 Connection 连接关闭,又涉及到频繁的网络资源、IO 资源的关闭和释放。
如上所述,如果频繁的开关 Connection 连接,那么会造成大量的对网络、IO 资源的申请和释放的无谓的时间耗费,对于特别频繁的数据库操作,比如 100 次 /s,那么就可能会导致性能急剧下降。
数据库连接池,会自己在内部持有一定数量的数据库连接,比如通常可能是 100~1000 个左右,然后每次 Java 程序要通过数据库连接往 MySQL 发送语句的时候,都会从数据库连接池中获取一个连接,然后通过它发送 SQL 语句。SQL 语句执行完之后,不会调用 Connection.close(), 而是将连接还回数据库连接池里面。下一次,Java 程序再需要操作数据库的时间,就还是重复以上步骤,获取连接,发送 SQ,还回连接。
数据库连接池的好处:
1.Java 程序不用自己去管理 Connection 的创建和销毁,代码上更加方便。
2. 程序中只有固定数量的数据库连接,不会一下子变得很多,而且也不会进行销毁。那么对于段时间频繁进行数据库操作的业务来说。就有很大的意义和很高的价值。也就是说,如果短时间内,频繁操作 10000 次,不需要对数据连接创建和销毁 10000 次。这样的话,可以大幅度节省我们的数据可连接的创建和销毁的资源开销以及时间开销。
3. 最终可以提升整个应用程序的性能。
在 Spark 的作业中,通常来说,都需要使用数据库连接池。当然,也可以使用开源的数据库连接池,功能非常强大,比如说 C3P0、DBCP 等等。但是呢,对于某些简单的情况下,我们也可以自己编写一个简单的数据库连接池即可。
而且在 spark 作业中,是非常适合使用数据库连接池的。为什么?因为 spark 计算出来的结果,可能数据量还是比较大的。比如说