当我们要开发一套系统时, 因在前期未能对系统规模进行正确评估,而一些软件开发公司通过快速开发的方式进行开发, 导致系统在刚开始运行流程, 随着数据量的不断增大,系统越来越慢, 系统的不稳定导致用户流失严重.
针对这个问题, 我们通常应在开发前期考虑相应的架构来解决这个问题, 其常见的方式是数据库优化和添加缓存, 今天我们来说说关于数据库分库分表的问题
数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分,我先讲拆分前需要做的事情:
数据库拆分原则:就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面 。
比如淘宝中期开始的数据库端按照业务垂直拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。
采用垂直拆分优点:
缺点:
水平拆分的典型场景就是大家熟知的分库分表。
垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。
相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中 的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中。
分库分表需要涉及到对应的 SQL 路由规则主库备库等,例如:淘宝设计了一套 TDDL 来解决这些问题,应用端只需配置对应的规则即可,对应用端的没有任何侵入的设计。
水平拆分,总之,一般先分库,如果分库后查询仍然慢,于是按照分库的思想开始做分表的工作数据库采用分布式数据库(所有节点的数据加起来才算是整体数据),文件系统采用分布式文件系统任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。
阿里 P8 架构师谈:架构设计之数据库垂直、水平拆分六大原则
例如数据涉及审批,在审批之前需显示旧的数据。可复制一张副本表,当通过后更新数据到正式表中,或添加version字段,当审批通过后,version+1。