MySQL Sharding可扩展设计

一.背景

我们知道,当数据库中的数据量越来越大时,不论是读还是写 ,压力都会变得越来越大。采用MySQL Replication多master多slave方案,在上 层做负载均衡,虽然能够一定程度上缓解压力。但是当一张表中的数据变得非常 庞大时,压力还是非常大的。试想,如果一张表中的数据量达到了千万甚至上亿 级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力。

二 .定义

数据sharding,也称作数据切分,或分区。是指通过某种条件,把 同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力。

三.分类

数据分区根据切分规则,可以分为两类:

(1)垂直 分区:以表为单位,把不同的表分散到不同的数据库或主机上。特点是规则简单 ,实施方便,适合业务之间耦合度低的系统。

(2)水平分区:以行为单位 ,将同一个表中的数据按照某种条件拆分到不同的数据库或主机上。特点是相对 复杂,适合单表巨大的系统。

在实际情况中,有的时候把垂直分区和水平 分区结合使用。

四.示意图

下面通过几张图来给出上面三种分区方 式的直观效果。

(1)垂直分区

(2)水平分区

(3)联合分区

五.注意事项

下面我们所说的分区,主要是指水 平分区。

(1)在实施分区前,我们可以查看所安装版本的mysql是否支持分 区:

mysql> show variables like "%partition%";

如果支持则会显示:

+-------------------+-------+

| Variable_name     | Value |

+-------------------+----- --+

| have_partitioning | YES   |

+------------------ -+-------+

(2)分区适用于一个表的所有数据和索引;不能只对数据分区而 不对索引分区,反之亦然,同时也不能只对表的一部分进行分区。

(3)分 区类型:

RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给 分区。

LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹 配一个离散值集合中的某个值来进行选择。

HASH分区:基于用户定义的表 达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值 进行计算。

KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算 一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整 数值。

无论使用何种类型的分区,分区总是在创建时就自动的顺序编号, 且从0开始记录。当有一新行插入到一个分区表中时,就是使用这些分区编号来识 别正确的分区。

(4) MySQL提供了许多修改分区表的方式。添加、删除、 重新定义、合并或拆分已经存在的分区是可能的。所有这些操作都可以通过使用 ALTER TABLE 命令的分区扩展来实现.

(5) 可以对已经存在的表进行分区 ,直接使用alter table命令即可。

时间: 2024-11-28 13:58:13

MySQL Sharding可扩展设计的相关文章

mysql订单表如何设计?

mysql订单表如何设计? 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品? 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品主键,这个是订单表的基本原则,同时生成了订单的商品是不能删除的. 订单表中引用商品表主键,删除使用状态假删. 同时引入商品的状态,总之就是反范式设计,保证一次可以获得全部要的状态,不要进行多表jion. 订单:  分为以下几种        订单凭证(接到客户的订单表),采购订单, 销售订单,委外订单

MySQL题库管理数据库设计

问题描述 MySQL题库管理数据库设计 一个数据库,包含单选题.多选题.判断题.填空题四种题型,每种题型对应一个表,请问这个表的字段该如何设计才好?比如多选题的答案不定,答案属性应该如何设计?有没有这方面的样例供参考下,谢谢. 解决方案 8个字段,4个char表示4个题目,4个bool/bit字段,每个表示一个答案是否选择. 解决方案二: 甲表:5个字段,id(int)主键,A答案(int),B答案(int),C答案(int),D答案(int) abcd答案的内容用0表示没有,1表示有 乙表:3

数据同步-mysql集群扩展一个数据节点问题

问题描述 mysql集群扩展一个数据节点问题 现在搭建成功集群是一个管理节点,2个数据节点和2个sql节点,在这基础上增加一个数据节点,即 3个数据节点 ,实现3个数据节点数据同步,我是修改了config.ini配置文件里的NoOfReplicas = 2改为了NoOfReplicas = 3 ,并加了一个数据节点配置信息在配置文件中,重新启动集群显示数据节点没有全部连接上,应该是NoOfReplicas = 3这个有问题,或config.ini还有什么需要修改的地方,请大神指教,在此十分感谢

求助,mysql的一段表设计

问题描述 求助,mysql的一段表设计 mysql 我有一张表: 表里有AID int,BID int,state bit这三条 AID为外链,链接A表的ID,BID同AID AID与BID为唯一约束,不能有重复的值 如今我想让: 一个AID最多能有一条 true值的state,这个如何设计? (PS:为了对应以后的升级,其AID还能对应两个以上的true值state 这个怎么做0_0||) 解决方案 第一种,在应用中判断你的条件 第二种,复制一张一样的表结构,插记录往复制的表中插入,然后在这张

php结合mysql与mysqli扩展处理事务的方法_php技巧

本文实例讲述了php结合mysql与mysqli扩展处理事务的方法.分享给大家供大家参考,具体如下: 以下只是展示如何应用,具体用的时候要加上判断,如果都执行成功则提交,否则回滚 看前先分清mysqli与mysql扩展是不一样的 mysqli扩展处理事物: $mysqli=new mysqli('localhost','root','123456','test'); $mysqli->autocommit(false);//开始事物 $query="update a set money=m

mysql sharding(碎片)介绍

  1.Sharding 的应用场景一般都那些? 当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大.试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力.sharding通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力. 联机游戏.IM.BSP 都是比较适合 Sharding 的应用场景; 2.Sharding与数据库分区(Partition)的区别? sharding实现了数据的分布式部署

mysql sharding(碎片)介绍_Mysql

1.Sharding 的应用场景一般都那些? 当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大.试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力.sharding通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力. 联机游戏.IM.BSP 都是比较适合 Sharding 的应用场景: 2.Sharding与数据库分区(Partition)的区别? sharding实现了数据的分布式部署,将

基于PHP+MySQL的聊天室设计

mysql|聊天室|设计 MySQL并发能力强.响应速度快,是性能优异的数据库软件:PHP是功能强大的服务器端脚本语言.笔者在网站开发中,采用PHP4.0+MySQL3.23.38建立了多种应用.下面,以一个简单的聊天室设计为例,介绍PHP+MySQL在网页开发中的应用. 1.总体设计 1. 1 构思与规划: 聊天室的基本原理,就是把每个连上同一网页的用户传送的发言数据储存起来,然后将所有的发言数据传给每一用户.也就是说,用数据库汇集每个人的发言,并将数据库中的数据传给每一个人就实现了聊天室的功

解析MySQL数据类型 避免数据库设计出现混乱

数据库存储中的数据类型与大小各异.有些地方只存储数字类型,有些只存储文本类型,有些二者而兼之.而很多数据库支持各种专用类型:日期和时间类型,二进制字符类型以及布尔类型. 选择数据类型与数据相匹配是数据库设计中最为重要的部分,因为这种类型将会影响到RDBMS的效率与性能.所以,对RDBMS的数据类型选择应给予足够的重视. 这就是编写本文的主要目的.表A将列举了MySQL支持的绝大部分重要的数据类型,而MySQL是当前最为流行的免费RDBMS.文中还描述了何时与如何使用这些数据类型.这将有助于建立一