加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MySql > 正文

阿里云rds数据库迁移实战

发布时间:2020-05-23 15:34:04 所属栏目:MySql 来源:互联网
导读:由于某几个业务表数据量太大,数据由业务写,数据部门读。写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死!于是,就拆库呗。业务系统拆分就不要做了(微服务化),没那工夫。直接原系统

  由于某几个业务表数据量太大,数据由业务写,数据部门读。

  写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死!

  于是,就拆库呗。

  业务系统拆分就不要做了(微服务化),没那工夫。

  直接原系统拆两个数据源出来,对某几个高压力表的写就单独用这个数据源,从而减轻压力。

所以,分库工作就变为了两个步骤:

  再由于方便性,数据库也是使用阿里的rds数据库,一个变为两个!

  代码上做两个数据源很简单,尤其是在原有代码就写得比较清晰的情况下;

如下是使用springboot和mybatis做的多数据源配置:

= MainDataSourceConfig.SCAN_BASE_PACKAGE,sqlSessionFactoryRef = "sqlSessionFactory" </span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;final</span> String SCAN_BASE_PACKAGE = "com.xxx.dao.mapper.main"<span style="color: #000000"&gt;; </span><span style="color: #008000"&gt;/**</span><span style="color: #008000"&gt; * xml 配置文件扫描路径 </span><span style="color: #008000"&gt;*/</span> <span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;final</span> String SCAN_XML_MAPPER_LOCATION = "classpath:mybatis/mappers/mysql/main/**/*Mapper.xml"<span style="color: #000000"&gt;; </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;jdbcConfig</span> @Value("${jdbc.main.url}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String jdbcUrl; @Value(</span>"${jdbc.main.driver}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String driverName; @Value(</span>"${pool.main.maxPoolSize}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span> <span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; maxPoolSize; @Value(</span>"${jdbc.main.username}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String jdbcUserName; @Value(</span>"${jdbc.main.password}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String jdbcPwd; @Value(</span>"${pool.main.maxWait}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span> <span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; jdbcMaxWait; @Value(</span>"${pool.main.validationQuery}"<span style="color: #000000"&gt;) </span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String validationQuery; @Bean(name </span>= "druidDataSource"<span style="color: #000000"&gt;) @Primary </span><span style="color: #0000ff"&gt;public</span><span style="color: #000000"&gt; DruidDataSource druidDataSource(){ DruidDataSource ds </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; DruidDataSource(); ds.setUrl(jdbcUrl); ds.setDriverClassName(driverName); ds.setMaxActive(maxPoolSize); ds.setUsername(jdbcUserName); ds.setPassword(jdbcPwd); ds.setRemoveAbandoned(</span><span style="color: #0000ff"&gt;true</span><span style="color: #000000"&gt;); ds.setMaxWait(jdbcMaxWait); ds.setValidationQuery(validationQuery); </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; ds; } @Bean(name </span>= "dataSourceTransactionManager"<span style="color: #000000"&gt;) @Primary </span><span style="color: #0000ff"&gt;public</span><span style="color: #000000"&gt; DataSourceTransactionManager dataSourceTransactionManager(){ DataSourceTransactionManager dm </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; DataSourceTransactionManager(); dm.setDataSource(druidDataSource()); </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; dm; } @Bean(name</span>="sqlSessionFactory"<span style="color: #000000"&gt;) @Primary </span><span style="color: #0000ff"&gt;public</span> SqlSessionFactory sqlSessionFactory() <span style="color: #0000ff"&gt;throws</span><span style="color: #000000"&gt; Exception { SqlSessionFactoryBean sqlSessionFactory </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; SqlSessionFactoryBean(); ResourcePatternResolver resolver </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; PathMatchingResourcePatternResolver(); Resource[] mapperXmlResource </span>=<span style="color: #000000"&gt; resolver.getResources(SCAN_XML_MAPPER_LOCATION); sqlSessionFactory.setDataSource(druidDataSource()); sqlSessionFactory.setMapperLocations(mapperXmlResource); </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; sqlSessionFactory.getObject(); }

}

<span style="color: #008000">//<span style="color: #008000"> 新数据源配置,仅仅改了下配置名,但是还不得不另一个配置类
<span style="color: #000000">@Configuration
@MapperScan(basePackages = ExtraDataSourceConfig.SCAN_BASE_PACKAGE,sqlSessionFactoryRef = "sqlSessionFactoryExt"<span style="color: #000000">)
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> ExtraDataSourceConfig {

</span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;final</span> String SCAN_BASE_PACKAGE = "com.xxx.dao.mapper.ext"<span style="color: #000000"&gt;;

</span><span style="color: #008000"&gt;/**</span><span style="color: #008000"&gt;
 * xml 配置文件扫描路径
 </span><span style="color: #008000"&gt;*/</span>
<span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;final</span> String SCAN_XML_MAPPER_LOCATION = "classpath:mybatis/mappers/mysql/ext/**/*Mapper.xml"<span style="color: #000000"&gt;;

</span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;jdbcConfig</span>
@Value("${jdbc.ext.url}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String jdbcUrl;
@Value(</span>"${jdbc.ext.driver}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String driverName;
@Value(</span>"${pool.ext.maxPoolSize}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span> <span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; maxPoolSize;
@Value(</span>"${jdbc.ext.username}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String jdbcUserName;
@Value(</span>"${jdbc.ext.password}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String jdbcPwd;
@Value(</span>"${pool.ext.maxWait}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span> <span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; jdbcMaxWait;
@Value(</span>"${pool.ext.validationQuery}"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;private</span><span style="color: #000000"&gt; String validationQuery;

@Bean(name </span>= "druidDataSourceExt"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;public</span><span style="color: #000000"&gt; DruidDataSource druidDataSource(){
    DruidDataSource ds </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; DruidDataSource();
    ds.setUrl(jdbcUrl);
    ds.setDriverClassName(driverName);
    ds.setMaxActive(maxPoolSize);
    ds.setUsername(jdbcUserName);
    ds.setPassword(jdbcPwd);
    ds.setRemoveAbandoned(</span><span style="color: #0000ff"&gt;true</span><span style="color: #000000"&gt;);
    ds.setMaxWait(jdbcMaxWait);
    ds.setValidationQuery(validationQuery);
    </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; ds;
}

@Bean(name </span>= "dataSourceTransactionManagerExt"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;public</span><span style="color: #000000"&gt; DataSourceTransactionManager dataSourceTransactionManager(){
    DataSourceTransactionManager dm </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; DataSourceTransactionManager();
    dm.setDataSource(druidDataSource());
    </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; dm;
}

@Bean(name</span>="sqlSessionFactoryExt"<span style="color: #000000"&gt;)
</span><span style="color: #0000ff"&gt;public</span> SqlSessionFactory sqlSessionFactory() <span style="color: #0000ff"&gt;throws</span><span style="color: #000000"&gt; Exception {
    SqlSessionFactoryBean sqlSessionFactory </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; SqlSessionFactoryBean();
    ResourcePatternResolver resolver </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; PathMatchingResourcePatternResolver();
    Resource[] mapperXmlResource </span>=<span style="color: #000000"&gt; resolver.getResources(SCAN_XML_MAPPER_LOCATION);
    sqlSessionFactory.setDataSource(druidDataSource());
    sqlSessionFactory.setMapperLocations(mapperXmlResource);
    </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; sqlSessionFactory.getObject();
}

}

  然后,将需要分离的表操作转移到相应的包路径下,即可实现多数据源操作了!

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读