目录
分库分表
分表
分库
分库分表缺点
分库分表
先考虑读写分离,读写分离不行的话再分库分表
读写分离:将数据库的写操作和读操作进行分离, 使用多个从库副本(Slaver)负责读,使用主库(Master)负责写, 从库从主库同步更新数据,保持数据一致。
分表
垂直分表:表中的字段较多,一般将不常用的、 数据较大、长度较长的拆分到“扩展表”水平分表:单表的数据量太大。按照某种规则,切分到多张表里面去。 但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。这种情况是不建议使用的。
分库
垂直分库:按照一定业务逻辑进行垂直切,比如用户相关的表放在一个数据库里,订单相关的表放在一个数据库里。注意此时不同的数据库应该存放在不同的服务器上,此时磁盘空间、内存、TPS等等都会得到解决。水平分库:它是指将单张表的数据切分到多个服务器上去。
分库分表缺点
1、联合查询困难 联合查询不仅困难,而且可以说是不可能,因为两个相关联的表可能会分布在不同的数据库,不同的服务器中。2、需要支持事务 分库分表后,就需要支持分布式事务了。数据库本身为我们提供了事务管理功能,但是分库分表之后就不适用了。如果我们自己编程协调事务,代码方面就又开始了麻烦 3、跨库join困难 分库分表后表之间的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表, 结果原本一次查询能够完成的业务,可能需要多次查询才能完成。 我们可以使用全局表,所有库都拷贝一份。 4、结果合并麻烦 比如我们购买了商品,订单表可能进行了拆分等等,此时结果合并就比较困难。