数据源

一、数据源

概念:存储所有建立数据库连接的信息

二、连接池

概念:分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
作用:资源重用;更快的系统反应速度;新的资源分配手段;统一的连接管理,避免数据库连接泄露

三、数据源和连接池的关系

数据源是连接的抽象, 存放数据库连接的信息,创建连接; 而连接池中存放的是具体的连接, 并负责对具体连接的管理; 所以数据源就可以使用连接池来池化连接.

四、连接

概念:执行sql语句并获取执行结果

五、功能扩展

1. 读写分离
    方法一: 分开配置读写数据源, 业务控制选择使用哪一个
    方法二:封装数据源, 配置读写分离规则, 分析语法树, 结合事务选择读库还是写库
2. 分库分表
    方法一: 业务系统控制
    方法二.:封装数据源, 将分库规则埋在ThreadLocal中,在获取连接前, 先从当前线程中取出对应的分库规则, 然后获取对应的数据源, 进而获取对应的连接
    方法三: 封装数据源, 配置分库分表规则, 分析sql语法树,再结合分库分表规则选择连接及替换表名。
3. 日志监控
    涉及到sql相关的日志和监控统一封装到数据源中来做, 既能减少漏记错记的情况发生, 调整的时候又不会对业务代码带来改动

六、 数据源的配置

1. tomcat-jdbc: http://mp.weixin.qq.com/s/FtAceKACWiFwwF8HfnQmwQ
    结论: 
        数据库有效性监测推荐使用testOnBorrow(被别它的名字迷惑, 并不是每次都监测, 还要判断validationinterval
        使用Druid的时候无需配置testOnBorrow(它能做到根据执行SQL异常(异常类型,error code)然后判断连接是否失效,如果失效了就移除,那也是可以自动恢复的,而不用特意的再执行额外的有效性检查),不过因为idle的时候没有SQL执行,所以建议配置一个testWhileIdle
2. 不同类型数据源有效性检查: http://mp.weixin.qq.com/s/vMiJWY5IoWfeWASODqTz9Q
    结论: 
        tomcat-jdbc: 提供了testOnBorrow开关,但受validationInterval控制,如果要求网络或数据库恢复后没有任何业务失败,可以将validationInterval设置为0,强制每次都检查,默认会使用validateQuery检查,但是用户可以提供自己的validator。如果关闭所有testXxx开关,则无论业务如何失败都不会认为是连接失效。
        durid: 打开testOnBorrow开关后每次都会检查。对于业务SQL失败会对异常进行判断,以确定连接是否失效。
        c3p0: 提供了testConnectionOnCheckout开关,如果打开后每次都会检查,提供了两种检查方式:jdbc validate(mysql driver发送一个ping命令)和validate query(执行配置的validationQuery)。对于业务SQL失败不认为是连接失效。
        推荐使用方式:对于critical应用对于tomcat-jdbc建议打开testOnBorrow,并且将validationInterval设置为0。对于durid建议打开testOnBorrow,对于c3p0建议打开testConnectionOnCheckout。
        其他: 作为连接池本身来说,要提高性能其实就是减少锁的争用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值