Survive by day and develop by night.
talk is cheap, show me the code,make a better result.

目录

概述

oracle 如何进行分库分表呢?

需求:

1.引入POM
2. yaml 配置
3. DDL
4. 准备测试对象
5. 测试

设计思路

实现思路分析

1.引入POM

    <dependency>
        <groupId>io.shardingsphere</groupId>
        <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
        <version>${sharding.jdbc.version}</version>
    </dependency>

2.yaml 配置

sharding:
jdbc:
datasource:
names: ds0
# 数据源ds0
ds0:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:xe
username: ******
password: ******
config:
sharding:
props:
sql.show: true
tables:
t_user: #t_user表
key-generator-column-name: id #主键
actual-data-nodes: ds0.t_userKaTeX parse error: Expected 'EOF', got '#' at position 11: {0..1} #̲数据节点,均匀分布 …{task_id % 2} #按模运算分配

3.准备表DDL

2.3 准备表DDL

create table T_ADDRESS
(
ID NUMBER(20) not null
constraint T_ADDRESS_PK
primary key,
NAME VARCHAR2(64),
ADDR VARCHAR2(32)
)
/
comment on column T_ADDRESS.ID is ‘主键’
/
comment on column T_ADDRESS.NAME is ‘名称’
/
comment on column T_ADDRESS.ADDR is ‘地址’
/

create table T_USER0
(
ID NUMBER(20) not null
constraint TABLE1_PK
primary key,
NAME VARCHAR2(64),
TASK_ID NUMBER(12),
CALL_MONTH VARCHAR2(20)
)
/
comment on column T_USER0.ID is ‘主键’
/
comment on column T_USER0.NAME is ‘名称’
/
comment on column T_USER0.TASK_ID is ‘任务id’
/
comment on column T_USER0.CALL_MONTH is ‘呼叫月份’
/

create table T_USER1
(
ID NUMBER(20) not null
constraint T_USER1_PK
primary key,
NAME VARCHAR2(64),
TASK_ID NUMBER(12),
CALL_MONTH VARCHAR2(20)
)
/
comment on column T_USER1.ID is ‘主键’
/
comment on column T_USER1.NAME is ‘名称’
/
comment on column T_USER1.TASK_ID is ‘任务id’
/
comment on column T_USER1.CALL_MONTH is ‘呼叫月份’
/

4.准备测试对象

不分表测试对象:
@Test
public void save() {
for (int i = 0; i < 10; i++) {
Address address = new Address();
Long id = i + 1L;
address.setId(id);
address.setName(“name_” + i);
address.setAddr(“addr_” + i);
addressMapper.save(address);
}
}

5.分表测试对象

@Test
public void testSave() {
for (int i = 0; i < 10; i++) {
User user = new User();
Long id =i+1L;
user.setId(id);
user.setName(“test” + i);
user.setCallMonth(“201907”);
user.setTaskId(2L);
userMapper.save(user);
}
}

拓展实现

这里参考:github:简单实现上述流程:
入门级实现:
: 部分源码实现.
: 源码实现

性能参数测试:

参考资料和推荐阅读

  1. shareJDBC.

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐