mysql 分库分表中间件 (待补充)

1、sharding-jdbc

在介绍多库多表的时候,给大家介绍一个轻量级 分库分表 工具,sharding-jdbc,这是当当网自己实现的基本JDBC的数据库多库多表解决方案。可以让你在写业务代码的时候完全按照单库单表进行,多库多表的问题有sharding-jdbc帮你解决,需要自己实现分库分表规则接口,配置分库分表规则。

实现分库规则接口:

public class DemoDatabaseShardingAlgorithm implements PreciseShardingAlgorithm {

	@Override
	public String doSharding(Collectioncollection, PreciseShardingValue preciseShardingValue) {
        for (String each : collection) {
        	System.out.println(each+"=="+preciseShardingValue.getValue());
            if (each.endsWith(Long.parseLong(preciseShardingValue.getValue().toString()) % 2+"")) {
                return each;
            }
        }
        throw new IllegalArgumentException();
    }
}

实现分表规则接口

public class DemoTableShardingAlgorithm implements PreciseShardingAlgorithm{ 

	@Override 
	public String doSharding(Collectioncollection, PreciseShardingValue preciseShardingValue) {
        for (String each : collection) {
        	System.out.println(each+"=2="+preciseShardingValue.getValue());
            if (each.endsWith(Long.parseLong(preciseShardingValue.getValue().toString()) % 2+"")) {
                return each;
            }
        }
        throw new IllegalArgumentException();
    }
}

@Bean(name = "shardingDataSource")
DataSource getShardingDataSource() throws SQLException {
	ShardingRuleConfiguration shardingRuleConfig;
	shardingRuleConfig = new ShardingRuleConfiguration();
	shardingRuleConfig.getTableRuleConfigs().add(getUserTableRuleConfiguration());
	shardingRuleConfig.getBindingTableGroups().add("user_info");
	shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", DemoDatabaseShardingAlgorithm.class.getName()));
	shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", DemoTableShardingAlgorithm.class.getName()));
	return new ShardingDataSource(shardingRuleConfig.build(createDataSourceMap()));
}

这样完成以后,业务代码就可以完全按照单表就行书写,Sharding-JDBC会自动帮你实现分库分表的数据库插入,以及查询时候的多表数据合并。Sharding-JDBC 采用在 JDBC 协议层扩展分库分表,是一个以 jar 形式提供服务的轻量级组件,其核心思路是小而美地完成最核心的事情。Sharding-JDBC 还提供了读写分离的能力,用于减轻写库的压力。此外,Sharding-JDBC 可以用在 JPA 场景中,如 JPA、Hibernate、Mybatis,Spring JDBC Template 等任何 Java 的 ORM 框架。

这是当当网自己实现的基本JDBC的数据库多库多表解决方案。可以让你在写业务代码的时候完全按照单库单表进行,多库多表的问题有sharding-jdbc帮你解决,需要自己实现分库分表规则接口,配置分库分表规则。

2、mycat

MyCAT是mysql中间件,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之。于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显。

与Sharding-JDBC 的对比:
不过目前Sharding-JDBC仅支持mysql数据库然后还有一个第三方插件mycat也可以实现分库分表的数据插入和查询,不过mycat是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,

而 Sharding-JDBC 是基于 JDBC 接口的扩展,是以 jar 包的形式提供轻量级服务的。

在使用中将mycat查询启动,它自己就成为了一个虚拟数据库,而业务程序是连接的mycat的虚拟数据库的,然后mycat连接实际数据库实现数据的分库分表。

扫描二维码关注公众号,回复: 5497383 查看本文章

背景:
Amoeba、Cobar、MyCat等属于同宗一脉。若Amoeba能继续下去,Cobar就不会出来;若Cobar那批人不是都走光了的话,MyCAT也不会再另起炉灶。Cobar之后,有很多类似中间件仿照其架构以及思路,针对特定的业务场景,设计出了不同的中间件。MyCat算是其中业务场景比较全面,使用配置比较简便,性能优秀,而且功能算是稳定的。同类的中间件,都是针对特定场景或者功能进行设计,像某科技的hot某中间件,性能和功能更为稳定,但是业务场景有局限,扩展分布性不是很好。

3、TDDL

淘宝根据自身业务需求研发了TDDL(Taobao Distributed Data Layer)框架,主要用于解决分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步,它是一个基于集中式配置的JDBC DataSource实现,具有分库分表、Master/Salve、动态数据源配置等功能。

4、cobar

Cobar是提供分布式数据库服务的中间件,由阿里巴巴中间件团队开发,是阿里巴巴B2B前台应用访问数据库的统一入口,目前已在github上开源。

Cobar的分布式方案是分库和分表,可以按照业务需求将数据库中耦合度较低的表分到不同的分库中,也可以按照具体表的增长速度和数据量水平切分到不同的分库中,Cobar可以实现应用层与物理分库的双向透明,从而实现应用程序访问分布式数据库与访问单库无差别。 Cobar还可以配合MySQL的心跳和binlog实现备机的自动切换,保证数据节点的可靠性,从而实现高可用性。

但Cobar目前的版本是2013年发布的版本1.2.7,由于作者目前的工作重心不在Cobar,所以虽然会继续更新,进度不会很快。

5、博客参考

数据库(分库分表)中间件对比 : https://www.cnblogs.com/wangzhongqiu/p/7100332.html

分库分表中间件技术选型总结: https://blog.csdn.net/u013898617/article/details/79615427

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/88094498