数据拆分前实际上是要首先作准备工做的,而后才是开始数据拆分,我先讲拆分前须要作的事情:redis
第一步:采用分布式缓存redis、memcached等下降对数据库的读操做。数据库
第二步:若是缓存使用事后,数据库访问量仍是很是大,能够考虑数据库读、写分离原则。缓存
第三步:当咱们使用读写分离、缓存后,数据库的压力仍是很大的时候,这就须要使用到数据库拆分了。服务器
数据库拆分原则:就是指经过某种特定的条件,按照某个维度,将咱们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。分布式
第一步,首选垂直拆分ide
一个数据库由不少表的构成,每一个表对应着不一样的业务,垂直切分是指按照业务将表进行分类,分布到不一样的数据库上面,这样也就将数据或者说压力分担到不一样的库上面 。memcached
好比淘宝中期开始的数据库端按照业务垂直拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。性能
采用垂直拆分spa
优势:1. 拆分后业务清晰,拆分规则明确。2. 系统之间整合或扩展容易。3. 数据维护简单。设计
缺点:1. 部分业务表没法join,只能经过接口方式解决,提升了系统复杂度。2. 受每种业务不一样的限制存在单库性能瓶颈,不易数据扩展跟性能提升。3. 事务处理复杂。
第二步:其次才是水平拆分
水平拆分的典型场景就是你们熟知的分库分表。
垂直拆分后遇到单机瓶颈,可使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不一样的表拆到不一样的数据库中,而水平拆分是把同一个表拆到不一样的数据库中。
相对于垂直拆分,水平拆分不是将表的数据作分类,而是按照某个字段的某种规则来分散到多个库之中,每一个表中包含一部分数据。简单来讲,咱们能够将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其余的数据库中。
分库分表须要涉及到对应的SQL路由规则主库备库等,例如:淘宝设计了一套TDDL来解决这些问题,应用端只需配置对应的规则便可,对应用端的没有任何侵入的设计。
水平拆分,总之,通常先分库,若是分库后查询仍然慢,因而按照分库的思想开始作分表的工做数据库采用分布式数据库(全部节点的数据加起来才算是总体数据),文件系统采用分布式文件系统任何强大的单一服务器都知足不了大型系统持续增加的业务需求,数据库读写分离随着业务的发展最终也将没法知足需求,须要使用分布式数据库及分布式文件系统来支撑。
总结,数据库拆分原则:
1.优先考虑缓存,下降对数据库的读操做。
2.再考虑读写分离,下降数据库写操做。
3.最后开始数据拆分,切分模式: 首先垂直(纵向)拆分、再次水平拆分。
4.首先考虑按照业务垂直拆分。
5.再考虑水平拆分:先分库(设置数据路由规则,把数据分配到不一样的库中)
6.最后再考虑分表,单表拆分到数据1000万之内。
原文地址:https://baijiahao.baidu.com/s?id=1607944199335196177&wfr=spider&for=pc