- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的应用程序使用 Spring/Hibernate 进行数据库访问。我们使用多个 hibernate session 工厂( hibernate3.LocalSessionFactoryBean
),因为数据位于多个单独的数据库中。每个 session 工厂都使用 c3p0 ( c3p0.ComboPooledDataSource
) 配置了一个池数据源。
碰巧的是,数据库都驻留在同一个数据库服务器上。我们的问题是我们最终得到了许多数据库连接池,它们都连接到同一台服务器上。有没有办法共享一个池数据源以访问同一台服务器上的多个数据库?是否可以配置 jdbcUrl
在 session 工厂级别,而不是在数据源级别?
或者这在实践中不是一个真正的问题?配置多个数据库连接池是否完全可以?
最佳答案
一个连接连接到一个数据库。
如果您有 2 个数据库 DB1 和 DB2,并且想要一个连接池,那么您需要为这两个数据库准备好连接。
如果实际上每个池有 1 个连接,C1 和 C2(我知道你有更多,但它是一样的......)
当然可以将这两个连接放在同一个连接池中。
然后您将拥有一个带有 C1 和 C2 的连接池。
您对连接池有什么期望?对我来说 -> 能够为您提供可以直接使用的随机已经准备好的连接,而无需创建新连接的开销。
现在你猜怎么着,如果你的唯一池中有 C1 和 C2,你根本无法获得“随机”连接,因为它们不属于同一个数据库......因此你将有检查连接返回指向预期数据库的点,否则您将有 50% 的机会在 DB2 上执行请求 R1。
所以是的,这是可能的,您可以简单地实现自己的连接池,该连接池仅使用 2 个子连接池 CP1 和 CP2,并且将随机使用这些子连接池之一中的 getConnection,但您必须检查之后您使用正确的连接池,因此您最好将 2 个不同的连接池分开。
我不知道你为什么只想要一个连接池。也许您希望能够告诉您的应用程序“所有连接池都有 100 个连接”,并且您希望您的应用程序在您拥有的每个连接池中自动设置优化的连接数?对我来说似乎可能,但我不知道是否已经存在通用实现,也许您可以做一个连接池包装器,它将在所有现有池之间共享使用的平均连接百分比,然后调整池大小或类似的东西...
对我来说,在您的应用程序中有多个连接池是完全可以的。
除了在同一个应用程序中使用 2 个不同的数据库(Oracle + MongoDB 或类似的东西)完全可以,在同一台服务器上使用 2 个使用 2 个 Oracle 数据库模式的连接池也是完全可以的,即使两个数据库都有完全相同的表。
您应该查看具有多个客户(通常为 B2B)的 SaaS 应用程序的 Multi-Tenancy 策略:
- 一种是为每个客户拥有一个数据库,并且每个表都有一个“customer_id”列。维护起来更容易,但表上有更多行(但显然你索引了那个 customer_id 列)
- 另一种可能是您所做的:每个客户有一个数据库/数据源/连接池/ session 工厂,并且每个数据库都将具有相同的表。最终,您将拥有一些机制,例如“自定义的主 sessionfactory”,它将使用存储 customerId 的 ThreadLocal(由某些凭据过滤器设置?)来选择适当的子 sessionfactory。
以下面的文章为例(有很多关于该主题的文章):
http://relation.to/Bloggers/MultitenancyInHibernate
public class MyTenantAwareConnectionProvider implements ConnectionProvider {
public static final String BASE_JNDI_NAME_PARAM = "MyTenantAwareConnectionProvider.baseJndiName";
private String baseJndiName;
public void configure(Properties props) {
baseJndiName = props.getProperty( BASE_JNDI_NAME_PARAM );
}
public Connection getConnection() throws SQLException {
final String tenantId = TenantContext.getTenantId()
final String tenantDataSourceName = baseJndiName + '/' + tenantId;
DataSource tenantDataSource = JndiHelper.lookupDataSource( tenantDataSourceName );
return tenantDataSource.getConnection();
}
public void closeConnection(Connection conn) throws SQLException {
conn.close();
}
public boolean supportsAggressiveRelease() {
// so long as the tenant identifier remains available in TL throughout, we can
return true;
}
public close() {
// currently nothing to do here
}
}
关于hibernate - 我可以使用 Spring/Hibernate/c3p0 为多个数据库使用一个池数据源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520255/
最近,我们将专用 SQL 池部署到生产中的 Synapse 工作区。在开发中,我们可以访问无服务器 SQL 池和专用 SQL 池。但是,在生产中,我们可以访问无服务器 SQL 池,但无法访问专用 SQ
假设您从一个项目公开 WCF 服务,并使用“添加服务引用”(在本例中为 Framework 3.5 WPF 应用程序)在另一个项目中使用它。 当您重新实例化 ClientBase 派生代理时,Clie
我有一个函数,它使用 multiprocessing.Pool 并行处理一个数据集中的所有数据。 from multiprocessing import Pool ... def func():
我正在尝试使用进程对象在 python 中使用工作池。每个 worker (一个进程)进行一些初始化(花费大量时间),传递一系列作业(理想情况下使用 map()),并返回一些东西。除此之外,不需要任何
我是软件工程师,最近我构建了我的 Linux 机器,想探索更多系统管理员类型的任务。我已经探索并阅读了很多关于 ZFS 的内容,但我越来越困惑,因为每篇文章对它的描述都不一样。 Everything
我有 zfs 池: $ sudo zpool status lxd pool: lxd state: ONLINE scan: none requested config: NAME
我有一个基于 Actor 的项目,对于其中的一部分,我必须使用一些接收消息的 Actor ,然后一个 Actor 分别分配给每个请求,每个 Actor 负责执行其消息请求,所以我需要类似线程的东西我的
我已经使用 QEMU 模拟器成功地将 FreeBSD 安装到原始图像文件中。我已经使用 ZFS 文件系统 (ZFS POOL) 格式化了图像文件。 使用下面的命令我已经成功地挂载了准备好由 zpool
我正在使用 multiprocessor.Pool并行处理一些文件。该代码等待接收文件,然后使用 Pool.apply_async 将该文件发送给工作人员。 ,然后处理文件。 这段代码应该一直在运行,
我正在使用带有光滑的 Bonecp 数据源。并发现池包含关闭的连接所以我总是遇到这个异常 java.sql.SQLException: Connection is closed! at com
我有apartment gem的 Multi-Tenancy Rails应用程序,我可以使用apartment-sidekiq在每个工作程序中成功切换数据库租户。但是,sidekiq worker 正
ZFS 池可能由数据集(文件系统、快照等)或卷组成。 ZFS 卷就像 block 设备,但我不明白池和文件系统之间的区别。当我通过 zpool create pool1 sda sdb sdc 创建
我在 docker 容器上运行了 airflow。我正在使用 airflow 2.0.2 版。 我知道我实际上可以通过 UI 创建池。但我正在寻找一种通过 pools.json 文件在 docker
我在tomcat中有一个jdbc池,用于建立数据库连接。我在使用后没有显式关闭连接对象。我的“maxActive”参数设置为100。应用程序运行了一段时间,但随后失败进行数据库查询。它会等待无限时间来
阅读 PostgreSQL 文档 here我读了以下内容: As well, connections requested for users other than the default config
我在 docker 容器上运行了 airflow。我正在使用 airflow 2.0.2 版。 我知道我实际上可以通过 UI 创建池。但我正在寻找一种通过 pools.json 文件在 docker
我正在读取一个大的 URL 文件并向服务发出请求。该请求由返回 ListenableFuture 的客户端执行。现在我想保留一个 ListenableFuture 池,例如最多同时执行 N 个 Fut
我想使用队列来保存结果,因为我希望消费者(串行而不是并行)在工作人员产生结果时处理工作人员的结果。 现在,我想知道为什么以下程序挂起。 import multiprocessing as mp imp
我正在开发一个单页应用程序,目前正在构建一个 JQuery、ajax 函数,以便我的所有调用都能通过。 对于一个典型的页面,我可能有 3 个 ajax 调用。我的想法是,如果用户互联网出去将这些 aj
我有一个单位类及其一些子类(弓箭手、剑客等)。我怎样才能创建一个回收所有单元类型子类的池? 最佳答案 这是不可能的,因为池只能包含一种特定类型的对象。否则你可能会遇到这样的情况: Pool unitP
我是一名优秀的程序员,十分优秀!