加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL分片方法

发布时间:2016-08-10 02:23:23 所属栏目:MySql教程 来源:站长网
导读:第一部分: 关系型数据库随时间的流逝慢慢的不能满足现在每秒大量的操作、很多打开的连 接、大量的数据和非常高的写比率。为避免这种情况的出现,很多大型站点
第一部分:

关系型数据库随时间的流逝慢慢的不能满足现在每秒大量的操作、很多打开的连 接、大量的数据和非常高的写比率。为避免这种情况的出现,很多大型站点和SaaS的应用开始使用 sharding技术和他们的关系型数据结合。

怎样对应用分片?下面列出的四点很简单:

1、 分析表schema得出分片该如何设置

2、开启多个MySQL 实例

3、根据shard配置,导入导出 数据

4、更新程序代码来支持shard配置

分析数据:

为了得到一个shard 配置,你 需要做下面三步:

1、列出表名和表的大小。 大表时最需要进行分片的,因为很多SQL命令经常 在表上执行。

2、列出外键(如果有的话)外键帮助我们了解表之间的关系,这样的表需要很明 智的划分,否则你的表将失去一致性

3、分析涉及到的SQL语句  一些SQL语句在shard环境 下是难以执行的。所以需要整理一份SQL语句来决定哪些表时不需要shard的。我们还能得出哪些表时访 问频率很高,哪些不是。

表划分规则:

在实施shard的时候,需明白并不是所有的表都会 被分片。因为sharding会限制SQL的书写(不允许在表之间进行join,表的唯一性,自增字段),你必须 强制修改应用代码。通常情况下一些表被shard,另一些表被复制到其他shard上。

确定哪些表时 需要被分片的;

对表进行shard的算法像下面描述的一样简单:

1、寻找最大的表,很多 表结构中都有几张大表,其余并不是。

2、分析sql语句:

是否表之间使用了join查询?

a、是,让其中较小的表作为一个全局表

b、如果不是,还要根据sql语句来分析访问频率 分析

  i、如果这些表访问不频繁,让他们成为全局表

  ii、找出访问频繁 的表尤其是那些写入比较严重的进行shard,然后跳到第2步确定他们真的可以被shard(无join操作)

一旦你确定了哪些表是将被shard的,那么下一步就是选择sharding keys ,多数情况下回使用表 的primary key作为shard key。如果某些表之间存在外键关系,那么使用外键作为shard key 也是可以 考虑的。

和数据库分区一样,sharding也有很多算法:hash,list,range等。一般情况下使用 list或者 hast算法来应对多个选择条件的情况。通过不同的DB来保存不同的用户信息。hash往往能够对 数据更加平均的进行分配。

下一步呢?

如果你是一个新的环境,那么可以跳过这一步啦 。

1、在所有的shard上对数据进行克隆,复制物理文件或者mysqldump都行

2、对于每个 shard(shard上的每个表)

 a、删除所有的索引

 b、删除所有多余的数据 (脚本搞定)

这个操作会产生很多的碎片,可以考虑建立一张临时表,只插入相关的记录,最 后删除原表,再重命名。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读