我是靠谱客的博主 腼腆早晨,最近开发中收集的这篇文章主要介绍oracle数据库扩容方案_基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案...一、项目结构 二、核心代码块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、项目结构

1、工程结构

c245dc9240aefb4243ff33e53da3124c.png

2、模块命名

shard-common-entity: 公共代码块shard-open-inte: 开放接口管理shard-eureka-7001: 注册中心shard-two-provider-8001: 8001 基于两台库的服务shard-three-provider-8002:8002 基于三台库的服务

3、代码依赖结构

140bf294d6d66d908e90fb725d33cd95.png

4、项目启动顺序

(1)shard-eureka-7001: 注册中心

(2)shard-two-provider-8001: 8001 基于两台库的服务

(3)shard-three-provider-8002:8002 基于三台库的服务

按照顺序启动,且等一个服务完全启动后,在启动下一个服务,不然可能遇到一些坑。

二、核心代码块

1、8001 服务提供一个对外服务

基于Feign的调用方式

作用:基于两台分库分表的数据查询接口。

import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import shard.jdbc.common.entity.TableOne; /** * shard-two-provider-8001 * 对外开放接口 */ @FeignClient(value = "shard-provider-8001") public interface TwoOpenService { @RequestMapping("/selectOneByPhone/{phone}") TableOne selectOneByPhone(@PathVariable("phone") String phone) ; }

2、8002 服务提供一个对外服务

基于Feign的调用方式

作用:基于三台分库分表的数据存储接口。

import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import shard.jdbc.common.entity.TableOne;/** * 数据迁移服务接口 */@FeignClient(value = "shard-provider-8002")public interface MoveDataService { @RequestMapping("/moveData") Integer moveData (@RequestBody TableOne tableOne) ;}

3、基于8002服务数据查询接口

查询流程图

087d5e7e282ad15299b19afac7621662.png

代码块

/** * 8001 端口 :基于两台分库分表策略的数据查询接口 */@Resourceprivate TwoOpenService twoOpenService ;@Overridepublic TableOne selectOneByPhone(String phone) { TableOne tableOne = tableOneMapper.selectOneByPhone(phone); if (tableOne != null){ LOG.info("8002 === >> tableOne :"+tableOne); } // 8002 服务没有查到数据 if (tableOne == null){ // 调用 8001 开放的查询接口 tableOne = twoOpenService.selectOneByPhone(phone) ; LOG.info("8001 === >> tableOne :"+tableOne); } return tableOne ;}

4、基于 8001 数据扫描迁移代码

迁移流程图

eb31aa5d92e2ec3eddc7d6adcc02fcad.png

代码块

/** * 8002 端口开放的数据入库接口 */@Resourceprivate MoveDataService moveDataService ;/** * 扫描,并迁移数据 * 以 库 db_2 的 table_one_1 表为例 */@Overridepublic void scanDataRun() { String sql = "SELECT id,phone,back_one backOne,back_two backTwo,back_three backThree FROM table_one_1" ; // dataTwoTemplate 对应的数据库:ds_2 List tableOneList = dataTwoTemplate.query(sql,new Object[]{},new BeanPropertyRowMapper<>(TableOne.class)) ; if (tableOneList != null && tableOneList.size()>0){ int i = 0 ; for (TableOne tableOne : tableOneList) { String db_num = HashUtil.moveDb(tableOne.getPhone()) ; String tb_num = HashUtil.moveTable(tableOne.getPhone()) ; // 只演示向数据新加库 ds_4 迁移的数据 if (db_num.equals("ds_4")){ i += 1 ; LOG.info("迁移总数数=>" + i + "=>库位置=>"+db_num+"=>表位置=>"+tb_num+"=>数据:【"+tableOne+"】"); // 扫描完成:执行新库迁移和旧库清理过程 moveDataService.moveData(tableOne) ; // dataTwoTemplate.update("DELETE FROM table_one_1 WHERE id=? AND phone=?

最后

以上就是腼腆早晨为你收集整理的oracle数据库扩容方案_基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案...一、项目结构 二、核心代码块的全部内容,希望文章能够帮你解决oracle数据库扩容方案_基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案...一、项目结构 二、核心代码块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部