数据库切分技巧

1、垂直切分

(1)按照功能模块进行切分

    例如:一个购物网站有以下常见的功能模块:订单、购物车、查询、支付。

(2)按照表进行拆分

    一个表中某些列很常用,另外一些不常用,则可以进行垂直分割,把主码和一些列放到一个表,然后把主码和另外的列放到另外一个表。

    这样做的好处在于:数据行数会变小,一个数据页就能存放更多的数据,在查询时,会减少IO次数。

    缺点在于:需要管理冗余列,查询所以数据需要join操作。

 

垂直切分优缺点:

优点:

(1)数据库拆分简单明了,拆分规则明确。

(2)应用程序模块清晰明确,整合容易。

(3)数据维护方便易行,容易定位。

缺点:

(1)部分表关联无法在数据库级别完成,需要在程序中完成。

(2)对于访问极其频繁并且数据量超级大的表仍然存在性能瓶颈,不一定能满足要求。

(3)事务处理相对更为复杂。

(4)切分达到一定程度之后,扩展性(维护性)会遇到限制。

(5)过多切分可能带来系统过度复杂而难以维护。

 

2、水平切分

单表数据量过大,访问速度过慢,维护比较麻烦,需要对表进行拆分。

常规拆分规则:

按照实际用的字段进行拆分。

(1)按照范围进行拆分,orderid:1-10000,10001-20000......

(2)按照订单创建时间进行拆分,createdate

(3)按照orderid取模,orderid%N

(4)按照枚举值进行拆分,areacode

水平切分的优缺点:

优点:

(1)表关联基本能在数据库端全部完成。

(2)不存在某些超大型数据量和高负载的表遇到瓶颈的问题。

(3)应用程序端整体架构改动相对较少。

(4)事务处理相对简单。

(5)只要切分规则能够定义好,基本上较难遇到扩展性限制。

缺点:

(1)切分规则相对较为复杂,很难抽象出一个能够满足整个数据库的切分规则。

(2)后期数据的维护难度有所增加,人为手工定位数据更困难。

(3)应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。

 

3、联合切分

联合切分的优点:

(1)可以充分利用垂直切分和水平切分各自的优势而避免各自的缺陷。

(2)让系统扩展性得到最大化提升。

联合切分的缺点:

(1)数据库系统架构比较复杂,维护难度更大。

(2)应用程序架构也相对更复杂。

 

4、解决思路

总的来说存在两种解决思路:

(1)在每个应用程序木块中配置管理自己需要的一个(或多个)数据源,直接访问各个数据库,在模块内完成数据的整合。

(2)通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明。

 

5、数据库中间件

常见的数据库中间件:

TDDL处于停滞状态

Amoeba处于停滞状态

Cobar处于停滞状态

MyCAT社区非常活跃

MyCAT又是在Cobar基础上发展的版本,两个显著点是:后端由BIO(同步阻塞IO)改为NIO(同步非阻塞IO),并发量有大幅提高增加了对order by、group by、limit等聚合功能的支持(虽然Cobar也可以支持order by、group by、limit语法,但是结果没有进行聚合,只是简单返回给前端,聚合功能还是需要业务系统自己完成)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值