作者说的非常清楚了,感谢。地址为:http://haitian299.github.io/2016/05/26/mysql-partitioning/。

本人项目实践,使用sharding-jdbc进行Mysql水平分表,从参数可以看出来分表策略。

项目是基于Spring Boot + Mybatis + Druid + Sharding-Jdbc技术进行开发。

配置:

sharding.jdbc.datasource.names = mysqlDataSource
sharding.jdbc.datasource.mysqlDataSource.type = com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.mysqlDataSource.driverClassName = com.mysql.jdbc.Driver
sharding.jdbc.datasource.mysqlDataSource.url = jdbc:mysql://testhost:3306/test-database
sharding.jdbc.datasource.mysqlDataSource.username = root
sharding.jdbc.datasource.mysqlDataSource.password = root
sharding.jdbc.datasource.mysqlDataSource.maxActive = 60
sharding.jdbc.datasource.mysqlDataSource.maxWait = 20000
sharding.jdbc.datasource.mysqlDataSource.initSize = 10
sharding.jdbc.datasource.mysqlDataSource.decrypt = false
sharding.jdbc.datasource.mysqlDataSource.removeAbandoned = false
sharding.jdbc.datasource.mysqlDataSource.minIdle = 10
sharding.jdbc.datasource.mysqlDataSource.timeBetweenEvictionRunsMillis = 60000
sharding.jdbc.datasource.mysqlDataSource.minEvictableIdleTimeMillis = 300000
sharding.jdbc.datasource.mysqlDataSource.validationQuery = select 1 from dual
sharding.jdbc.datasource.mysqlDataSource.testWhileIdle = true
sharding.jdbc.datasource.mysqlDataSource.testOnBorrow = false
sharding.jdbc.datasource.mysqlDataSource.testOnReturn = false
sharding.jdbc.datasource.mysqlDataSource.poolPreparedStatements = true
sharding.jdbc.datasource.mysqlDataSource.maxPoolPreparedStatementPerConnectionSize = 100
sharding.jdbc.datasource.mysqlDataSource.removeAbandonedTimeout = 180
sharding.jdbc.datasource.mysqlDataSource.logAbandoned = true
sharding.jdbc.datasource.mysqlDataSource.filters = config,stat,mergeStat

sharding.jdbc.config.sharding.default-data-source-name = mysqlDataSource
sharding.jdbc.config.sharding.tables.test_table.actualDataNodes = mysqlDataSource.test_table_${0..1}
sharding.jdbc.config.sharding.tables.test_table.tableStrategy.inline.shardingColumn = test_column
sharding.jdbc.config.sharding.tables.test_table.tableStrategy.inline.algorithm-expression = test_table_${Math.abs(test_column.hashCode()) % 2}

Springboot配置类:

@MapperScan(basePackages = {"com.bj.services.mysql.dao"}, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
@EnableConfigurationProperties(MybatisProperties.class)
@Configuration
public class DBMysqlConfig { /*@Bean(name = "mysqlDataSource")
@ConfigurationProperties("spring.datasource.druid.mysql")
public DataSource mysqlDatasource() {
return DruidDataSourceBuilder.create().build();
}*/ @Bean(name = "mysqlTransactionManager")
public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("shardingDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("shardingDataSource") DataSource dataSource, MybatisProperties properties, ObjectProvider<Interceptor[]> interceptorsProvider) throws Exception {
return buildSessionFactory(dataSource, properties, interceptorsProvider);
} @Bean(name = "mysqlSqlSessionTemplate")
public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sessionFactory) {
sessionFactory.openSession(false);
return new SqlSessionTemplate(sessionFactory);
} // mybatis page plugin
// @Bean
/*public Interceptor pageInterceptor() {
PageHelper pageHelper = BeanUtils.instantiate(PageHelper.class);
pageHelper.setProperties(PropertiesBuilder.builder().put("dialect", "mysql").toBuild());
return pageHelper;
}*/ static SqlSessionFactory buildSessionFactory(DataSource dataSource, MybatisProperties properties, ObjectProvider<Interceptor[]> interceptorsProvider) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setVfs(SpringBootVFS.class);
Interceptor[] interceptors = interceptorsProvider.getIfAvailable();
if (!ObjectUtils.isEmpty(interceptors)) {
sessionFactory.setPlugins(interceptors);
}
if (StringUtils.hasLength(properties.getTypeAliasesPackage())) {
sessionFactory.setTypeAliasesPackage(properties.getTypeAliasesPackage());
}
if (StringUtils.hasLength(properties.getTypeHandlersPackage())) {
sessionFactory.setTypeHandlersPackage(properties.getTypeHandlersPackage());
}
properties.setMapperLocations(new String[]{"classpath:mybatis/mysql/**/*Mapper.xml"});
if (!ObjectUtils.isEmpty(properties.resolveMapperLocations())) {
sessionFactory.setMapperLocations(properties.resolveMapperLocations());
}
//sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(READONLY_MAPPER_PACKAGES));
return sessionFactory.getObject();
}

Mysql分区,分库和分表的更多相关文章

  1. 由mysql分区想到的分表分库的方案

    在分区分库分表前一定要了解分区分库分表的动机. 对实时性要求比较高的场景,使用数据库的分区分表分库. 对实时性要求不高的场景,可以考虑使用索引库(es/solr)或者大数据hadoop平台来解决(如数 ...

  2. Mysql分表和分区的区别、分库和分表区别

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法. 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个 ...

  3. 【分库、分表】MySQL分库分表方案

    一.Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. ...

  4. mysql大数据解决方案--分表分库(0)

    引言 对于一个大型的互联网应用,海量数据的存储和访问成为了系统设计的瓶颈问题,对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式. •水 ...

  5. sharding:谁都能读懂的分库、分表、分区

    本文通过大量图片来分析和描述分库.分表以及数据库分区是怎样进行的. 1.sharding前的初始数据分布 在本文中,我打算用高考考生相关信息作为实验数据.请无视表的字段是否符合现实,也请无视表的设计是 ...

  6. MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程

    MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...

  7. mysql数据库为什么要分表和分区?

    一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...

  8. sharding demo 读写分离 U (分库分表 & 不分库只分表)

    application-sharding.yml sharding: jdbc: datasource: names: ds0,ds1,dsx,dsy ds0: type: com.zaxxer.hi ...

  9. ORM框架对分表分库之分库和分表指定不同的字段

    ORM框架分库分表已实现了 只分表(根据指定字段) 点我查看demo 只分库(根据指定字段) 点我查看demo 既分库又分表(根据相同的字段) 点我查看demo 上面几点之前我在博客中已经写了使用介绍 ...

  10. 支持MySql的数据库自动分表工具DBShardTools发布

    支持MySql的数据库自动分表工具DBShardTools发布 前段时间参与了公司的一个项目,这个项目的特点是数据量.访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表 ...

随机推荐

  1. MVC——EF 回顾总结

    回顾一下MVC的知识点. 其实开始 我在学校的知识对MVC 还是很模糊的一个概念.只是记得结合EasyUI 增删改查 和分页,代码都是模糊的 进过这段时间的学习,让我对MVC 有了一个很清楚的认识. ...

  2. 104. HttpRequest对象详解

    WSGIRequest 对象常用的属性和方法: WSGIRequest对象常用的属性: WSGIRequest对象大部分属性都是只读的,因为这些属性是从客户端上传上来的,没必要做任何的修改.以下对一些 ...

  3. 基本 Python 词汇

    本文档介绍了要理解“使用 Python 进行地理处理”的帮助文档需要掌握的一些词汇. !   术语 说明 Python Python 是由 Guido van  Rossum 在上世纪八十年代末构想并 ...

  4. Python 三十个实践、建议和技巧

    [导读]2020年,你又立了什么新的 Flag?新一年,我们先为大家准备 30 个非常优秀的 Python 实践技巧.希望这些诀窍能在实际工作中帮助大家,并且学到一些有用的知识. 1.使用 pytho ...

  5. JAVA初学者——标识符命名规则及数据类型的转换

    Hello!我是浩宇大熊猫~ 直接进入正题吧~ 1)标识符的命名规则. 标识符命名法有小驼峰命名法和大驼峰命名法两种,分别应用于方法.变量和类. 小驼峰命名法应用于方法和变量,主要有两个约定: 1.标 ...

  6. IE浏览器F12调试模式不能使用或报错以及安装程序遇到错误0x80240037的解决办法

    记录一下,方便以后查找 IE浏览器F12调试模式不能使用: 需要下载补丁: 64位系统 然后下载安装,就能解决问题. 要是在安装时遇到出现: 安装程序遇到错误 0x80240037   解决方式 最后 ...

  7. PAT Advanced 1056 Mice and Rice (25) [queue的⽤法]

    题目 Mice and Rice is the name of a programming contest in which each programmer must write a piece of ...

  8. 以KNN为例用sklearn进行数据分析和预测

    准备 相关的库 相关的库包括: numpy pandas sklearn 带入代码如下: import pandas as pd import numpy as np from sklearn.nei ...

  9. 【ccf- csp201412-2】z字形扫描

    //ccf-Z字形扫描 #include<iostream> #include<cmath> using namespace std; #define N 500 int ma ...

  10. Error: Invalid or corrupt jarfile SpringBootTemplate.jar

    当在尝试将SpringBoot打包成为Jar文件, 丢到linux服务器去运行的时候, 尝试在windows自带的CMD窗口命令行中运行jar文件的时候, 遇到了这样的问题. 错误的意思是: 无效 或 ...