mysql库垂按照模块_mysql表垂直分割的原则及优缺点

当mysql中一个表的字段过多,而且数据量过大的时候,为了提高性能,就得考虑对表进行垂直分割了。

所谓的垂直分割,其实就是把一个原先有很多列(字段)的表拆分开来,解决表的宽度问题。

而分割也是讲究原则的,更好的分割可以更多的提交性能和效率,那么我们通常可以按照以下原则进行:

1. 把不常用的字段单独放一个表中;

2. 最好把大字段独立放一个表中;

3. 把经常一起使用的字段放到一个表中;

4. 把经常需要参与筛选条件的字段放到主表中。

数据的切分(Sharding)模式

一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。

垂直切分:

一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或者多个表。而在架构设计中,各个功能模块相互之间的交互点越统一越少,系统的耦合度就越低,系统各个模块的维护性以及扩展性也就越好。这样的系统,实现数据的垂直切分也就越容易。

一般来说,如果是一个负载相对不是很大的系统,而且表关联又非常的频繁,那可能数据库让步,将几个相关模块合并在一起减少应用程序的工作的方案可以减少较多的工作量,这是一个可行的方案。一个垂直拆分的例子:

1.用户模块表:user,user_profile,user_group,user_photo_album

2.群组讨论表:groups,group_message,group_message_content,top_message

3.相册相关表:photo,photo_album,photo_album_relation,photo_comment

4.事件信息表:event

群组讨论模块和用户模块之间主要存在通过用户或者是群组关系来进行关联。一般关联的时候都会是通过用户的id或者nick_name以及group的id来进行关联,通过模块之间的接口实现不会带来太多麻烦;

相册模块仅仅与用户模块存在通过用户的关联。这两个模块之间的关联基本就有通过用户id关联的内容,简单清晰,接口明确;

事件模块与各个模块可能都有关联,但是都只关注其各个模块中对象的ID信息,同样可以做到很容易分拆。

垂直切分的优点

数据库的拆分简单明了,拆分规则明确;

应用程序模块清晰明确,整合容易;

数据维护方便易行,容易定位;

垂直切分的缺点

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

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

事务处理相对更为复杂;

切分达到一定程度之后,扩展性会遇到限制;

过读切分可能会带来系统过渡复杂而难以维护。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值