一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同
的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:
其实本质就是微服务架构的一部分。
下面来分析下垂直切分的优缺点
优点:
- 拆分后业务清晰,拆分规则明确;
- 系统之间整合或扩展容易;
- 数据维护简单。
缺点:
- 部分业务表无法 join,只能通过接口方式解决,提高了系统复杂度;
- 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高;
- 事务处理复杂。
1 配置server.xml
指定主键生成策略
<!--配置数据库的主键怎么生成,0为本地文件方式,1为数据库方式,2为时间戳序列方式-->
<property name="sequnceHandlerType">0</property>
2 配置schema.xml
也同样需要配置table标签,水平切分是要对哪张表进行切分就配置那张表;垂直切分需要将数据库中的所有表都配置上,指定不同的datanode。
需求:整个P2P平台的数据库(p2p)进行垂直切分,分为前台数据库(p2p-web)、后台数据库(p2p-admin)。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100">
<!-- 要实现分库分表,那么就需要在<schema>标签下配置表了,现在是垂直切分 -->
<!--需求:整个P2P平台的数据库(p2p)进行垂直切分,分为前台数据库(p2p-web)、后台数据库(p2p-admin)-->
<!--P2P前台数据库-->
<table name="orders" primaryKey="id" autoIncrement="true" dataNode="dn1"/>
<table name="users" primaryKey="id" autoIncrement="true" dataNode="dn1"/>
<!--P2P后台数据库-->
<table name="products" primaryKey="id" autoIncrement="true" dataNode="dn2"/>
<table name="creditor" primaryKey="id" autoIncrement="true" dataNode="dn2"/>
</schema>
<!--配置真实的数据库名称 testdb01 -->
<dataNode name="dn1" dataHost="localhost1" database="p2p-web" />
<dataNode name="dn2" dataHost="localhost1" database="p2p-admin" />
<dataHost name="localhost1"
maxCon="1000"
minCon="10"
balance="1"
writeType="0"
dbType="mysql"
dbDriver="native"
switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM3307" url="localhost:3307" user="root" password="123456">
<readHost host="hostS3308" url="localhost:3308" user="root" password="123456" />
<readHost host="hostS3309" url="localhost:3309" user="root" password="123456" />
</writeHost>
<writeHost host="hostM3308" url="localhost:3308" user="root" password="123456">
<readHost host="hostS3307" url="localhost:3307" user="root" password="123456" />
<readHost host="hostS3310" url="localhost:3310" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
3 垂直切分测试
3.1 在3307上创建两个个数据库p2p-web,p2p-admin
3.2 在p2p-web库中创建users和orders表
3.3 在p2p-admin库中创建products和news表
3.4 插入、查询测试
next value for MYCATSEQ_GLOBAL
4 注意
垂直切分带来的价值:可以屏蔽掉多数据源的问题,只需要一个统一入口mycat就可以操作下面的多个数据库。
不管是何种方式的切分,主键生成必须交给MyCat实现。