数据源

来源:互联网 发布:数据恢复大师破解版 编辑:程序博客网 时间:2024/06/12 19:21

一、数据源

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

二、连接池

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

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

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

四、连接

概念:执行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 0