问:为什么一个应用需要多个数据源
答:有些情况下就是有多个数据源的
问:如果有这样的系统耦合太大了
答:比如一个查询应用,可能从不同数据库服务器的数据库中查询数据,这样就会在
poolman.xml中配置多个数据源,不能说使用了多个数据源,系统的耦合度就增加了,两者不是一回事。
问:如果这样设计就很糟糕
答:并不是所有的应用都需要多个数据源,但是有些应用确实有这种情况,实际要求是这样的不能说这种设计就是糟糕的设计。
问:查询系统应该只有select 表的权限,很明显这样应该建一个cdc数据库用户 其他用户表的权限只授予select 给cdc 用户,不应该将给dbname 权限 这样的安全有问题
答:查询系统的账号有可能有查询权限,也有可能有其他权限,这个东西视情况而定,比如在数据交换系统中,通常不会使用生产系统的数据库用户来做数据交换,通常会另外创建只有查询权限的用户,但是没有绝对的情况。
问:如果dbname 连表的owner用户 表的什么权限都有了
答:当然我只是那查询做个例子来说明多个数据源的情况
问:一般应用连dbname 不应该 是表的owner,一般的公司都dbname 都连表的owner 实际上安全有很大问题;一个dbname 难道不就是一个用户吗
;虽然 不是oracle 用户,但是dbname 和oracle 一般也是一一对应的
答:dbname只是bboss持久层框架中的逻辑数据源的名字,不是oracle的用户名称,也就是poolman.xml中配置的<dbname>节点的值,两者完全是两个不同的概念。
是否使用多个数据源,是系统数据库规划问题,规划能使用几个数据库源就能使用,不能就不使用,bboss持久层提供了两套api分别对应于这两种情况。
一个dbname的定义如下,oracle定义:
这个是mysql的数据源定义:
这个是derby数据源
问:有这样情况?
答:呵呵,数据源(也就是我们通常意义上的连接池)通常都有一个dbname这个是bboss持久层框架的要求,有的数据源会对应数据库用户,有的数据源不对应数据库用户,比如derby
而且一个应用可能会操作多种数据库,比如mysql,oracle,db2,sqlserver,还有derby,等等,呵呵
问:一个应用可能同时会操作多种数据库
这耦合太大了
答:呵呵,那么,bboss持久层api的就提供了两组接口,一组是带dbname的,一组是不带的,如果一个系统中只有一个数据源,那么poolman.xml中就只配置一个数据源,反之就可以配置多个,使用不带dbname的api时,默认对应poolman.xml中的第一个数据源,使用带dbname的api时,那么就在对应的数据源上执行数据库操作。
在业务系统中可能操作多个数据源的情况是普遍存在的,这个和松耦合高内聚的软件设计思想没有必然联系的,也就是说这个和松耦合高内聚的软件设计思想没有冲突的
另外一种情况,我们在一个系统中有几个大模块,为了能够方便的解耦拆分和缓解一个数据库的大压力,我们反而会引入每个模块一个数据源,每个数据源对应一个独立的数据库服务器,当然前提是每个独立的模块之间的数据库是没有关联的,呵呵
当然,如果系统规模比较大,我们会将这些系统拆分成独立的应用部署,每个应用还是可以只配自己的对应的dbname的数据源即可,这样非常方便拆分和合并应用模块的,呵呵
问:别把系统搞成巨无霸系统了
答:那确实,不过一般情况下用不用多数据源和系统规模没有太多关系的。用多个数据源的系统不一定是大系统哦,很多小系统也有多个数据源的哦。
另外再大系统中使用多数据源,可以为访问量较大的模块分配一个独立的数据源,为访问量较小的模块分配其他的数据源,也能够使系统的性能更好。
bboss的持久层框架api尽可能地满足各种需要,至于系统怎么去使用,可以有架构师去决定,呵呵
bboss持久层相关配置文章:
持久层动态创建、启动、停止和使用多个数据源的方法
bbossgroups实现多数据库事务
bboss persistent通过jndi引用外部数据源(datasource)方法
bbossgroups持久层框架ConfigSQLExecutor组件api实例
bbossgroups 3.1SQLExecutor组件api使用实例
bbossgroups持久层框架数据源配置文件实例
- 大小: 37 KB
- 大小: 27.2 KB
- 大小: 47.5 KB
分享到:
相关推荐
最后,对于大数据部门和数据中台服务,这种动态数据源连接池的实现具有以下优势: - **灵活性**:可以轻松地添加、删除或修改数据源,无需重启服务。 - **高可用性**:根据业务负载,可以动态调整数据源的使用,...
数据库连接池(Database Connection Pool)是预先在内存中创建一定数量的数据库连接,当应用程序需要时,可以从池中获取一个已存在的连接,而不是每次都去创建新的。这种方式减少了创建和关闭连接的开销,提高了系统...
1. C3P0:这是一个完全开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 2. DBCP (Apache BasicDataSource):Apache Commons的一个子项目,它是基于Jakarta Pool实现的数据库连接池。...
本篇文章将探讨如何在Spring Boot中利用JPA(Java Persistence API)和JdbcTemplate来实现多数据源的管理,同时使用HikariCP作为高效的数据源连接池。 首先,让我们理解一下关键概念: 1. **Spring Boot**: 它是...
数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...
本篇文章将深入探讨数据库连接池的概念、工作原理以及一个简单而实用的数据库连接池工程。 首先,理解数据库连接池的基本概念。数据库连接池是在应用服务器启动时创建的一组预定义的数据库连接,这些连接在多个用户...
数据源通常与连接池结合使用,当应用程序需要一个数据库连接时,它会从数据源获取,而不是直接创建新的连接。这样,数据源能够管理连接的生命周期,并在不使用时将连接返回到池中。在Java应用服务器中,数据源通常...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0以其优秀的性能和稳定性受到广大开发者的青睐。C3P0提供了更多的连接池管理策略,比如自动测试连接的健康性、自动回收...
在IT行业中,数据库连接管理是应用系统性能优化的关键一环,而JDBC连接池就是解决这一问题的有效工具。本文将深入探讨如何自定义JDBC连接池,并对常用的连接池技术进行介绍。 首先,自定义JDBC连接池的核心在于管理...
在本文中,我们将深入探讨如何配置SQL SERVER 2000与WebLogic 8.1之间的数据源和连接池,以便实现两者之间的有效通信。WebLogic Server是一个流行的Java应用服务器,而SQL SERVER 2000是Microsoft提供的关系型数据库...
本文还提供了一个方向,并且对连接池的数据源配置进行了比较和总结。 一、问题描述 在使用Spring框架进行Web项目的开发中,有一部分处理批量的DB操作,可以通过Web页面由用户手动执行,也可以通过Windows的任务...
- 使用双端队列(Deque)实现数据库的链式切换,这在处理需要顺序访问或循环访问多个数据源的场景中非常有用。 5. **事务内切换数据源**: - 引入了一个创新的特性,即在同一个事务内支持数据源的切换,并且兼容...
4. 支持多数据源:可以配置多个数据源,实现读写分离、负载均衡等复杂场景。 四、Druid连接池监控配置 配置Druid连接池的监控功能,通常需要以下几个步骤: 1. 引入依赖:在项目中引入Druid的依赖库,例如在Maven...
在Delphi中,我们可以自定义一个类来管理这些连接,包括初始化连接池、获取连接、归还连接以及关闭连接池等功能。通常,此类会包含以下核心方法: 1. 初始化连接池(InitializePool):设置连接池的大小,创建并...
在多数据源的场景下,我们需要配置多个数据源。例如,上述配置展示了"master"和"cluster"两个数据源,分别对应不同的数据库连接信息。此外,还需要配置Druid连接池的基本参数,如初始化大小、最小连接数、最大连接数...
连接池是一种在应用程序启动时预先创建并维护一定数量的数据库连接的机制,当应用程序需要访问数据库时,可以从池中获取一个已存在的连接,使用完毕后归还回池,而不是直接关闭。这种方式避免了频繁地创建和关闭连接...
本文将详细介绍如何在 Java 中实现一个完整的数据库连接池,并探讨其核心概念、工作原理以及如何根据需求进行配置。 首先,我们需要理解数据库连接池的基本概念。数据库连接池是一种对象池设计模式的应用,它维护了...
连接池是一种在应用程序启动时预创建一定数量的数据库连接,供多个线程共享使用的机制。当应用需要访问数据库时,可以从连接池中获取一个已存在的连接,用完后归还而不是关闭,从而避免了频繁地创建和销毁连接带来的...
本主题将深入探讨如何在使用SQL Server时通过ADO(ActiveX Data Objects)实现数据库连接池功能,以提高应用程序的效率和响应速度。 首先,我们需要理解什么是ADO。ADO是微软开发的一个数据访问接口,它允许程序员...
数据库连接池是一种管理多个数据库连接的技术,它预先创建一定数量的数据库连接,并将这些连接保存在一个池中供应用使用。当应用程序请求访问数据库时,连接池会返回一个空闲的数据库连接;当应用程序使用完毕后,...