下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

为什么要拆分数据库?有哪些方法?

作者:匿名     来源: 互联网点击数:1356发布时间: 2021-10-18 17:11:13

标签: 软考数据库为什么要拆分数据库垂直切割

软考,您想通过吗?一次通过才是硬道理

  在前面的文章里小编给大家介绍了很多关于数据库相关的知识,接下来的文章里小编继续介绍数据库的面试题,先来看看为什么要拆分数据库?

  为什么要拆分数据库?

  单个项目成立之初,数据库负载和数据量都不大,不需要分割数据库,小财务系统、文件系统、ERP系统、OA系统、MySQL数据库实例就足够了。

  分割数据库很讲究,比如分割方法有两种:垂直分割和水平分割。那么你是先水平分割还是垂直分割呢?顺序没关系吗?不,顺序有所谓,顺序绝对不能错:先水平分割,再垂直分割。

  垂直切割是什么?

  垂直分割是根据业务分割数据库,将类似业务的数据表分割成独立的数据库,另一种数据表分割成其他数据库。

  例如,在新零售的电子商务数据库中,我们可以将与商品相关的数据表分成一个数据库,然后在这些数据表的基础上建立商品系统。例如,使用JAVA或PHP语言创建商业街系统。然后,将跟进销售相关的数据表分成另一个数据库,用程序构建仓库系统。  

  垂直分割解决了哪些问题?

  垂直分割可以减少单节点数据库的负载。原来所有的数据表都放在一个数据库节点上,毫无疑问所有的读写请求都发送到这个MySQL上,所以数据库的负载太高。如果将一个节点的数据库分割成多个MySQL数据库,可以有效降低每个MySQL数据库的负载。

  垂直分割不能解决任何问题。

  垂直分割不能解决的是缩小表。例如,无论商品表分为哪个数据库节点,商品表的记录都很多,无论数据库的垂直分割有多细致,每个数据表的数据量都没有变化。

  MySQL单表记录超过2000万,读写性能迅速下降,垂直分割无法缩小手表。

  水平分割是什么?

  水平分割是根据某个字段的某个规则,将数据分割成多个数据表。一个数据表为零,分成多个数据表,可以缩小表。  

 

  很多人误解了水平分割,认为水平分割的数据表必须保存在不同的MySQL节点。实际上,水平分割的数据表也可以保存在MySQL节点中。水平分割不一定需要多个MySQL节点。你为什么这么说?

  很多人不知道MySQL有自己的数据分区技术,可以根据特殊规则将一个表的数据分区存储在不同的目录下。如果在Linux主机上挂载多个硬盘,可以使用MySQL分区技术将一个表的数据分区存储在多个硬盘上。这样,原始硬盘的有限IO能力就升级到多个磁盘来增强IO。

  水平分割的应用。

  水平分割可以将数据分割成多个数据表,可以缩小表格。

  但是,并非所有的数据表都是水平分割的。在电子商务系统中,用户表、商品表、产品表、地址表、订单表等都需要对大量的数据表进行分割。有些数据表不需要分割,因为数据量不大,如品牌表、供应商表、仓库表等,这些都不需要分割。

  水平分割的缺点。

  各数据表的分割规则不一致,应根据实际业务确定。因此,在选择数据库中间件产品时,应选择分割规则丰富的产品。常见的数据库中间件包括:MyCat、Atlas、ProxySQL等。有人认为MyCat是Java语言开发的,怀疑MyCat的运行效率。其实数据库中间件的作用相当于SQL句子的路由器。你的路由器硬件配置不是很高,但不影响你享受100兆宽带。MyCat也是一个道理。它只起到SQL句子转发的作用,不会实际执行SQL句子。我建议使用MyCat的主要原因是数据分割规则很多。我们可以根据主键求模分割数据,可以根据主键范围分割数据,也可以根据日期分割数据等等。所以MyCat是目前非常好的中间产品。

  水平分割的另一个缺点是扩展比较麻烦。随着时间的推移,分割迟早会有不足。这时候不是先选择增加新的集群分片。因为MySQL分片需要4~8个MySQL节点(最小规模),所以增加分片的投入成本非常高。所以正确的做法是冷热分离分片中的数据,定期存档。将过期的业务数据从分片转移到归档库。目前数据压缩比最高的MySQL引擎是TokuDB,写东西的速度是InnoDB引擎的6-14倍。最好用TokuDB作为归档数据库。  

 

  为何先水平分割,再垂直分割?

  当数据量增加时,首先要做的是分割数据,使用多个硬盘来增加数据的IO能力和存储空间,这样成本最低。几个硬盘的钱可以获得良好的IO性能。

  进入下一阶段,数据量继续增加。此时,将数据分成多个MySQL节点,并使用MyCat管理数据分割。当然,数据的读写分离等。这里就不讨论了。在后台进行水平分割的同时,业务系统还可以引入负载平衡和分布架构。理论上,冷热数据分离后,水平分割可以持续很长时间,数据量再大也不怕,定期归档就好。

  数据库到了水平分割阶段,数据量的增加不再是改变结构设计的主要原因。相反,在这个阶段,业务系统是无法承受的。如果系统不拆分模块,业务系统就无法支持,所以根据模块和业务,一个系统分割成几个子系统。几个子系统之间的数据相对独立。比如淘宝不会和支付宝分享所有数据,分享同一个数据表也会影响自己业务的发展。所以要垂直分割,把数据表分类,分成几个数据库系统。

  说到这里,仔细想想。如果数据库过早垂直分割,必须重建几个独立的业务系统,工作量太大,水平分割不需要业务系统的大修改,因此要从水平分割开始,好了,到这里就介绍完了,希望对大家有帮助。

  >>>>>>点击进入软考报名专题

赞(7)
踩(0)
分享到:
推荐查看
华为认证网络工程师 HCIE直播课视频教程