# RWS **Repository Path**: lkclkc88/RWS ## Basic Information - **Project Name**: RWS - **Description**: 数据库读写分离小组件,实现数据库读写分录,目前提供手动方式读写分离或者给予spring事物控制的读写分离 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 27 - **Forks**: 8 - **Created**: 2016-01-27 - **Last Updated**: 2024-04-21 ## Categories & Tags **Categories**: database-dev **Tags**: None ## README #RWS RWS是一个非常小的组件,实现数据库读写分离的功能。 背景 : 大多数项目中,为了避免数据库单节点故障,都会采用主从的方式来构建数据库高可用,在主从结构当中,主要的操作都在主库上执行,而从节点仅仅只实现数据备份的功能,是非常浪费的,因此可用将部分的查询请求放在从节点执行,达到缓解主节点查询压力的作用。 另外,如果在一个读写比比较低的系统中,数据库的读写锁争用,会降低数据库的查询性能。 功能: 组件实现简单的读写分离功能,通过ReadWriteRule接口,来判断获取数据库连接时采用写库还是读库。同时通过LoadRule接口实现多个读库的负载。 ReadWriteDataSource : 实现读写分离的主类。提供一下属性。 gloabCanWrite: 是否全局可写,默认为true,代表数据源可用执行写操作。 writer : 写数据源,执行写操作时,将从写数据源获取数据库连接. readers : 读数据源,执行读操作时,将会从readers中根据规则获取数据源,如果readers为空,讲从write获取连接. loadRule : 负载规则,用于决定多个读节点时,各个节点的负载情况。 readWriteRules: 读写规则,通过读写规则,决定获取连接时获取写库还是读库。 灾备: 组件只是一个简单的功能实现,不提供灾备功能。使用者需自己设计灾备方案,例如keepalived,Amoeba等。 主从延迟问题: 组件只是一个简单的功能实现,不解决数据库主从配置的延迟问题,如果需要实现强一致兴趣,可以自己实现组件设置,也能通过手段设置,讲代码使用写库做数据查询。 开发组件的原因: 开源社区里,已经存在了不少中间件组件,然后在对事物的支持上无法完全支持。因此在我开发项目过程中,希望能够找到一个能够实现事物,并且支持读写分离的组件,因此写下了此段代码,既可以手动控制读写分离,也能规矩规则控制读写分离。