How to scaled out MySQL DATA

互联网公司单实例数据难以支撑海量数据读写,数据库拆分规则有垂直和水平两种。垂直拆分可降低业务耦合度;水平拆分分库内分表和分库,还可与垂直拆分联合使用。同时,水平拆分会引发事务、跨节点join、跨节点统计聚合等问题,并给出了相应解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前大多互联网 公司 数据,随着时间流逝,单实例数据没办法支撑 海量数据的读写。

拆分规则: 垂直和水平。

1. 垂直拆分: 降低业务耦合度,可以将不同业务模块所使用表分拆到不同库中,根据不同类型表来进行拆分,对应用程序影响也更小。

2. 水平拆分: 分为库内分表和分库。水平拆分是根据垂直拆分出来的块进行的再次拆分,而不是针对所有表进行的。另一方面,一些负载较高的系统,即使仅仅只是单个表都无法通过单台数据库主机来支持其负载,意味着需要将垂直和水平拆分联合使用。针对热点数据选着性做水平切分。将整个数据库切分整一个分布式矩阵。

3. 水平拆分所引起的问题:

a1. 事物问题

一. 使用分布式事务

优点: 交由数据库管理,简单。

缺点: 当shard越来越多时,性能代价高。

二   由程序和数据库共同控制

原理:将一个跨多个数据库的分布式事务分拆成多个仅处于单个数据库上面的              小事务,并通过应用程序来总控各个小事务。
优点:性能上有优势
缺点:需要应用程序在事务控制上做灵活设计。如果使用了spring的事务管理,                      改动起来会面临一定的困难。

a2.  跨节点join问题

只要是进行切分,跨节点Join的问题是不可避免的。但是良好的设计和切分却可            以减少此类情况的发生。解决这一问题的普遍做法是分两次查询实现。在第一              次查询的结果集中找出关联数据的id,根据这些id发起第二次请求得到关联数                   据。

a3. 跨节点的count,order by,group by以及聚合函数问题

这些是一类问题,因为它们都需要基于全部数据集合进行计算。多数的代理都              不会自动处理合并工作。解决方案:与解决跨节点join问题的类似,分别在各个             节点上得到结果后在应用程序端进行合并。和join不同的是每个结点的查询可               以并行执行,因此很多时候它的速度要比单一大表快很多。但如果结果集很                 大,对应用程序内存的消耗是一个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值