MySQL数据的切分与应用方案

MySQL数据的切分与应用方案

转自(http://www.evanjiang.net.cn/archives/1466.html)

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

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

数据的垂直切分基本上可以简单地理解为按照表或模块来切分数据,而水平切分则不同。一般来说,简单的水平切分主要是将某个访问及其平凡的表再按照某个字段的某种规则分散到多个表中,每个表包含一部分数据。就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他数据库中。为了容易地判定各行数据被切分到哪个数据库了,切分总是要按照某种特定的规则来进行的:如根据某个数据类型字段基于特定数据取模,某个时间类型字段的范围

方案一
________________________________________

水平切分,比如按照用户id进行切分,把不同用户的数据分散到不同的表或不同的数据库或不同的数据库服务器上,然后进行主从复制数据
a.一个Mysql集群(这儿所说的集群就是Mysql的Master/Slave方式,不是Mysql Cluster),所有用户的各种数据(bbs,blog,user)保存于某一台服务器的某一个数据库上,下面的n表示子表的数据(用户所在的子表根据用户id % n计算出来,这个可以根据需要定一个值例如10,如果以后发现数据量过大,可以增大n的值比如20,此时则需要进行数据迁移,因为n的值已经变了,用户所在子表的值也随之发生了变化,所以必须进行数据移动,数据迁移前停止网站的各种服务,备份mysql的数据,然后进行数据迁移,其实写一个脚本就可以了,也不是很复杂。
Master Slave(Slave服务器数量可以根据需要进行适当的扩充)
sns(数据库名称)
bbs0
bbs1

bbsn
blog0
blog1

blogn
user0
user1

usern

b.多个Mysql集群,不同用户的数据保存到不同的数据库服务器上
假如一共有3个节点,散列算法是用户ID模以服务器节点数,假设有三个用户id分别为1,3,5,则保存数据的服务器节点为1,0,2
用户3的数据保存在Master0
master0 slave0
sns(数据库名称)
bbs
blog
user

用户1的数据保存在master1
master1 slave1
sns(数据库名称)
bbs
blog
user

用户5的数据保存在master2
master2 slave2
sns(数据库名称)
bbs
blog
user

方案二


垂直切分,就是按照网站的功能来进行切分,某个SNS网站,按照用户数据、博客数据、照片数据、标签数据等每个模块一个独立的数据库或数据库服务器,此种方案可以根据情况来看是否要做Master/Slave复制
其实下面的例子是垂直切分加上水平切分,这种切分方式的缺点就是如果需要进行关联查询时要跨数据库进行操作,非常的麻烦
db server1
sns(数据库名称)
user0

usern

db server2
sns(数据库名称)
blog0

blogn

db server3
sns(数据库名称)
photo0

photon

垂直切分及水平切分的缺点
________________________________________

由于采用了垂直切分或水平切分,数据分散在不同节点机器上,无法进行全局查找和统计。解决方案一是对主要的基础数据存储在全局表中(或者将全局数据保存在Memcache、BerkeleyDB中),便于查找和统计,但这类数据不宜太多,部分核心数据。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值