数据库水平拆分与垂直拆分
尽管采取了增加缓存和读写分离的方式,但随着数据库的压力继续增加,数据库数据量的瓶颈越来越突出,此时,我们可以有数据垂直拆分和水平拆分两种选择。
数据垂直拆分
垂直拆分的意思是把数据库中不同的业务数据拆分到不同的数据库中,比如把交易、商品、用户的数据分开。数据垂直拆分后的结构如下:
优点:
1、解决了原来把所有业务放在一个数据库中的压力问题;
2、可以根据业务的特点进行更多的优化。
缺点:
需要维护多个数据库的状态一致性和数据同步。
问题:
1、需要考虑原来跨业务的事务;
2、跨数据库的 Join。
解决方案:
1、在应用层尽量避免跨数据库的分布式事务,如果非要跨数据库,尽量在代码中控制。
2、通过三方中间件。
数据水平拆分
数据水平拆分就是把同一个表中的数据拆分到两个甚至多个数据库中。产生数据水平拆分的原因是某个业务的数据量或者更新量到达了单个数据库的瓶颈,这时就可以把这个表拆分到两个或更多个数据库中。数据水平拆分后的结构如下:
优点:
如果能克服以上问题,那么我们将能够很好地对数据量及写入量增长的情况。
问题:
1、访问用户信息的应用系统需要解决 SQL 路由的问题,因为现在用户信息分在了两个数据库中,需要在进行数据操作时了解需要操作的数据在哪里
2、主键的处理也变得不同,例如原来自增字段,现在不能简单地继续使用
3、如果需要分页查询,则非常麻烦
解决方案:
1、使用三方中间件
2、使用 GUID 来代替自增字段
3、先从每个数据库做分页查询,合并数据之后再做一次分页查询