数据库优化
优化策略
- 表结构的优化,包括字段,类型,长度等
- 进行索引等数据库级别的优化
- 业务需求场景层面的优化调整
在以上几种手段都用了之后再进行分库分表的操作.一般不推荐上来就分库分表.除非能够预测到数据量的级别.
什么时候需要分库分库
Mysql数据库单表数据量在1千万以下时可以保证性能超过则需要更多的维护优化成本.
在数据量涨幅预期过快时,需要提前进行分库分表.
数据库分表的几种方案
mycat之类的中间件
mycat属于中间件的实现方式,应用直接连接mycat,然后由mycat去选择具体的库和表.
sharding-jdbc之类的代理层
sharding-jdbc具体使用方式
先在pom.xml
中引入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.1</version>
</dependency>
这里用的是sharding-jdbc-spring-boot-starter
需要注意的是,此时druid
不能用spring-boot-starter
版本的,需要用正常的包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
不然启动会报错找不到url
在配置文件中添加数据分片相关的配置
spring:
shardingsphere:
datasource:
names: ds0
ds0:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.01:3306/demo
username: root
password: '123456'
sharding:
tables:
userorder:
actual-data-nodes: ds0.t_order$->{
0..1}
table-strategy:
inline:
sharding-column: orderid
algorithm-expression: t_order$->{
orderid % 2}
defaultDataSourceName: ds0
props:
sql.show: true
这里type
填数据库连接池的类名.
具体其他配置项,参考官方文档
自定义分片策略
首先新建一个类,实现对应的分片方法:
import cn