gpt4 book ai didi

java - 高效连接多个数据库

转载 作者:行者123 更新时间:2023-12-01 12:46:28 25 4
gpt4 key购买 nike

引用类似问题:

Pattern for connecting to different databases using JDBC

我为每个数据库使用不同的连接字符串/驱动程序。这就是我正在做的事情,不太确定这是否是最有效的方法:

为每个数据库的 Connection 创建单独的类,其中包含 getConnection(String URl,String userid,String password) 方法

在主类中获取DB1、DB2、DB3的连接对象,打开连接

从 DB1 获取数据,将其写入平面文件,对 DB2 和 DB3 重复此操作

关闭所有三个连接。

注意:我读到了有关使用 Spring/Hibernate/DataSources/ConnectionPooling 的内容,但不知道什么应该是最好的选择

最佳答案

我的理解是,您希望应用程序在不同的数据库上运行一些(SELECT?)查询并转储结果。我认为这是一个更大的应用程序的一部分,否则您可能只需编写一个命令行脚本来自动执行特定数据库的客户端工具即可更快地获得结果。

Hibernate数据源(在 Java DataSource 对象意义上)和连接池不会解决您的问题 - 我猜这是Spring 也是如此,但我不知道你指的是 Spring 的哪一部分。这样做的原因是,它们都被设计为通过单个(或连接池/连接集合)抽象到单个数据库 - 连接池只是允许您保留一个到数据库的即用型 (TCP) 连接池。给定数据库以提高性能,例如通过避免连接和身份验证开销。 Hibernate 也做了同样的事情,它抽象了到单个数据库的连接(并且出于性能原因可以使用连接池)。

我建议也许采取不同的方法来思考你的问题:

既然您想在某些数据源上运行一些查询并将结果写入某个目的地,为什么不以这种方式开始您的设计:提出一个需要一个接口(interface)/类DataExtractionTask数据库连接、一组要运行的查询和一些输出流。您可以选择一些框架来让您的生活更轻松,而不是直接使用java.sql.Connection,有像Hibernate这样的重量级框架和像jdbi这样的轻量级框架。然后提出建立数据库连接的代码,决定要运行哪些查询以及要写入的输出,并将所有这些输入到您深思熟虑的 DataExtractionTask 中以运行处理逻辑(编排各个部分)。

一旦你掌握了基本的东西,你就可以在上面添加其他功能,你可以使其可配置,你可以选择并行而不是顺序运行多个DataExtractionTask,等等.

通过这种方式,您可以概括处理逻辑,然后专注于让所有内容(数据库连接、查询定义等)做好处理准备。我意识到这是一个非常宽泛的图景,但也许它会让事情变得更容易一些。

关于效率:如果您指的是高性能(相对术语!),最好的方法就是@Elliott Frisch 所写的——将所有内容保存在使用单个数据库连接的单个数据库中连接池。

关于java - 高效连接多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com