1. sharding-jdbc源码之数据源

本文深入探讨了Sharding-JDBC的ShardingDataSource创建过程,讲解了分表和分库的原则,包括ModuloTableShardingAlgorithm与ModuloDatabaseShardingAlgorithm的实现。文中详细分析了分表策略的doEqualSharding(), doInSharding(), doBetweenSharding()方法,以及分库策略的逻辑。同时,提到了潜在的问题和解决方案,强调了在配置数据源时需注意的取模问题。" 111416465,7707812,TP5整合GatewayWorker教程:Linux与Windows适配,"['PHP', 'WebSocket', '框架整合', 'ThinkPHP5', 'GatewayWorker']
摘要由CSDN通过智能技术生成

阿飞Javaer,转载请注明原创出处,谢谢!

com.dangdang.ddframe.rdb.sharding.example.jdbc.Main剖析分库分表配置与实现,其部分源码如下:

public final class Main {
   

    public static void main(final String[] args) throws SQLException {
        // step1: 配置sharding数据源
        DataSource dataSource = getShardingDataSource();
        // step2:创建表
        createTable(dataSource);
        // step3:插入数据
        insertData(dataSource);
        printSimpleSelect(dataSource);
        printGroupBy(dataSource);
        printHintSimpleSelect(dataSource);
        dropTable(dataSource);
    }
    ... ...
}

接下来分析第一步,即如何创建ShardingDataSource

①ShardingDataSource

硬编码创建ShardingDataSource的核心实现源码如下:

private static ShardingDataSource getShardingDataSource() throws SQLException {
    // 构造DataSourceRule,即key与数据源的KV对;
    DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap());
    // 建立逻辑表是t_order,实际表是t_order_0,t_order_1的TableRule
    TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList("t_order_0", "t_order_1")).dataSourceRule(dataSourceRule).build();
    // 建立逻辑表是t_order_item,实际表是t_order_item_0,t_order_item_1的TableRule
    TableRule orderItemTableRule = TableRule.builder("t_order_item").actualTables(Arrays.asList("t_order_item_0", "t_order_item_1")).dataSourceRule(dataSourceRule).build();
    ShardingRule shardingRule = ShardingRule.builder()
                .dataSourceRule(dataSourceRule)
                .tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
                // 增加绑定表--绑定表代表一组表,这组表的逻辑表与实际表之间的映射关系是相同的。比如t_order与t_order_item就是这样一组绑定表关系,它们的分库与分表策略是完全相同的,那么可以使用它们的表规则将它们配置成绑定表,绑定表所有路由计算将会只使用主表的策略;
                .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
                // 指定数据库sharding策略--根据user_id字段的值取模
                .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
                // 指定表sharding策略--根据order_id字段的值取模
                .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())).build();
    return new ShardingDataSource(shardingRule);
}

Sharding-JDBC 是一个开源的分库分表中间件,它提供了数据源的动态加载功能。下面是 Sharding-JDBC 数据源加载的流程: 1. 加载配置文件:首先,Sharding-JDBC 会读取配置文件,一般是通过 Spring 或者 Spring Boot 进行配置。配置文件中包含了数据源的相关信息,比如数据源类型、分库分表规则等。 2. 解析配置文件:Sharding-JDBC 会解析配置文件,将配置信息转换为内部的数据结构,比如解析数据源类型、解析分库分表规则等。 3. 初始化数据源:根据配置文件中的数据源信息,Sharding-JDBC 会初始化对应的数据源,如读写分离数据源、分布式数据源等。这里会根据配置的数据源类型进行相应的初始化操作。 4. 初始化分库分表规则:根据配置文件中的分库分表规则,Sharding-JDBC 会初始化对应的分库分表规则。这些规则定义了数据如何划分到不同的库表中。 5. 加载数据源路由:Sharding-JDBC 会根据分库分表规则和数据源信息,构建数据源路由对象。数据源路由对象负责将 SQL 解析为对应的数据源和表。 6. 加载 SQL 解析器:Sharding-JDBC 会加载 SQL 解析器,用于解析 SQL 并生成对应的执行计划。 7. 加载执行引擎:Sharding-JDBC 会加载执行引擎,用于执行 SQL 执行计划,并将结果返回给应用程序。 通过以上步骤,Sharding-JDBC 完成了数据源的加载,应用程序可以通过 Sharding-JDBC 进行数据的访问和操作。需要注意的是,具体的加载流程可能会根据不同的版本和配置有所差异,上述流程仅为一般情况下的示意。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值