用具体的代码演示分库分表
时间: 2024-03-20 14:45:29 浏览: 14
分库分表的实现方法因各种因素(如数据库类型、业务需求等)而异,这里提供一个使用ShardingSphere-JDBC进行MySQL分库分表的代码示例。
首先需要添加ShardingSphere-JDBC的依赖:
```xml
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>5.0.0-alpha</version>
</dependency>
```
接着,需要在Spring配置文件中添加数据源和分片规则的配置,例如:
```xml
<!-- 主库数据源 -->
<bean id="dataSourceMaster" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test_master?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 从库数据源 -->
<bean id="dataSourceSlave0" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3307/test_slave0?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 数据源代理 -->
<bean id="dataSource" class="org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory" factory-method="createDataSource">
<constructor-arg ref="shardingRuleConfig"/>
</bean>
<!-- 分片规则配置 -->
<bean id="shardingRuleConfig" class="org.apache.shardingsphere.shardingjdbc.api.ShardingRuleConfiguration">
<property name="dataSourceRuleConfigs">
<list>
<bean class="org.apache.shardingsphere.shardingjdbc.api.config.rule.MasterSlaveRuleConfiguration">
<property name="name" value="ds0"/>
<property name="masterDataSourceName" value="dataSourceMaster"/>
<property name="slaveDataSourceNames">
<list>
<value>dataSourceSlave0</value>
</list>
</property>
</bean>
</list>
</property>
<property name="defaultDatabaseShardingStrategyConfig">
<bean class="org.apache.shardingsphere.shardingjdbc.api.config.strategy.StandardShardingStrategyConfiguration">
<property name="shardingAlgorithmName" value="database-inline"/>
<property name="shardingAlgorithmClassName" value="org.apache.shardingsphere.shardingjdbc.api.algorithm.inline.InlineShardingAlgorithm"/>
</bean>
</property>
<property name="defaultTableShardingStrategyConfig">
<bean class="org.apache.shardingsphere.shardingjdbc.api.config.strategy.StandardShardingStrategyConfiguration">
<property name="shardingAlgorithmName" value="table-inline"/>
<property name="shardingAlgorithmClassName" value="org.apache.shardingsphere.shardingjdbc.api.algorithm.inline.InlineShardingAlgorithm"/>
</bean>
</property>
</bean>
```
上面的配置文件中,我们使用了一个主库和一个从库,以及一个内置的InlineShardingAlgorithm算法进行分库分表。其中,InlineShardingAlgorithm算法可以根据分片键(例如用户ID)来计算数据应该分配到哪个库或哪个表中。
最后,我们可以通过以下方式获取数据源,并使用该数据源进行数据库操作:
```java
@Autowired
private DataSource dataSource;
public void test() {
Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement("select * from user where user_id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
// ...
}
rs.close();
pstmt.close();
conn.close();
}
```
上面的代码演示了如何使用ShardingSphere-JDBC进行MySQL分库分表的操作,实现了将数据按照一定规则分散到不同的物理实体中。