楼主: arron刘

【每周一议】从 Shard 到 Sharding MYsql数据库中Sharding案例讨论

[复制链接]
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
11#
发表于 2012-12-12 13:04 | 只看该作者
草民的补丁 发表于 2012-12-12 11:46
其实,在我见过的分区类型中,mysql水平拆分的更擅长一些,对于一些存储引擎!

举个例子看看吧!

使用道具 举报

回复
论坛徽章:
7
2013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2013-06-19 15:06:24技术图书徽章
日期:2014-01-26 14:23:572014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49天蝎座
日期:2015-07-08 22:36:16水瓶座
日期:2016-01-20 11:23:23
12#
发表于 2012-12-12 13:29 | 只看该作者
本帖最后由 草民的补丁 于 2012-12-12 13:30 编辑
mchdba 发表于 2012-12-12 13:04
举个例子看看吧!

嗯,好的!      在原先的一个彩票系统当中,比如说很多彩种,如:七星彩,大乐透,22选5,足彩等彩种,关系是我们分类归到一个大表中的,有个字段类型,可以来区分不同的彩种信息,这里还有个字段状态,来做后来校验用的,后台数据量大增,导致数据存储在一个物理文件过大,而且在测试的不同彩种信息的时候还要单独生产上取个物理文件来做测试用(开发特殊需求),原先由于不同的彩种放的是一个大表中的,后来为了不同彩种开发需求,把不同的彩种放到不同的物理文件内,表不变更的情况下,做了水平的拆分分区,做好后,在应用开发测试时间上节省了80%,而别对于管理相关的彩种物理文件(系统中要对生产的彩种物理文件定期进行安全监控操作)对于生产的提升达到了20%左右!
      其实,我们最先开始考虑的是做列的垂直拆分,想让不同彩种的,单独存放的一个物理文件中,因为开发测试的只是表中的一个单独的字段列的状态(其实这个字段状态就是,国家体彩中心,在分发出来后彩票,票种后要进行我们本地服务器校验的状态值,量比较大,且时间有限制)。那我们只要取出两个状态值,分拨到不同的物理文件一样可以便于应用开发的测试使用,但是后来在实施的时候,没有成功,再查一些文档中说,mysql不支持垂直拆分的格式。我们使用的是mysql5.5.13版本的,系统是unix!而且我在做其他业务分区拆分的时候一样,垂直拆分没有结果!不知道垂直拆分是否属实!

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
48
ITPUB15周年纪念
日期:2017-01-11 08:23:59
13#
发表于 2012-12-13 14:00 | 只看该作者
1、Sharding 的应用场景一般都那些?
对于大数据,并且多表查询少(最好是没有)的应用都适用。零售类的订单数据、货品信息,Gps信息等等。
个人觉得能体现sharding优势的地方都可以应用。

2、Sharding与数据库分区(Partition)的区别?
Partition 是 scale up的一种方案,是单DB扩展的模式,而sharding可以多DB。sharding 解决了IO瓶颈的问题,但是对于多表查询(或跨sharding 查询) 就显得有点困难。

使用道具 举报

回复
论坛徽章:
6
蛋疼蛋
日期:2012-01-07 12:14:30ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24雪铁龙
日期:2013-11-25 14:03:13美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
14#
发表于 2012-12-17 20:05 | 只看该作者
本帖最后由 rushm 于 2012-12-17 20:06 编辑

1、Sharding 的应用场景一般都那些?
刚看了7楼GG发出的链接,很多大公司针对大数据的处理,应该都有一套自己的方法,sharding普遍是用在对海量数据进行horizontal scale,解决too many connection、大量的读写压力等问题。sharding最好能事先根据自己的业务设计好,考虑周全了再搞:一个是扩展性,防止数据量突然爆胀,当前的机器量和schema不够用,迁移麻烦;一个居多不大支持复杂查询,这个可以通过增加冗余数据(一份数据以两种形式存在数据库里边,比如按user_id和user_age存到两个表中,这样就支持user_id或者user_age的多种多样快速查询了)。那怎么支持复杂的JOIN-functionality呢,可以添加一个后台数据系统做OLAP,数据同时写入这台机里边,里边的数据都不需要sharding,可以直接支持JOIN-functionality。
2、Sharding与数据库分区(Partition)的区别?
Partition只支持在库内进行分区,一个是单机资源有限,很容易出现too many connection,读写高延迟等问题;另一个是按分区键分割的查询才快,其他查询还是要遍历所有分区。sharding则可以灵活根据自己业务需要,在多台机器上面扩展突破单台机资源瓶颈,二可以通过冗余数据支持其他快速查询。

使用道具 举报

回复
论坛徽章:
26
2009新春纪念徽章
日期:2009-01-04 14:52:28咸鸭蛋
日期:2011-11-13 14:16:262012新春纪念徽章
日期:2012-01-04 11:51:22紫蛋头
日期:2012-02-02 13:13:42玉石琵琶
日期:2012-02-21 15:04:38蛋疼蛋
日期:2012-03-09 08:25:45奥运纪念徽章
日期:2012-11-27 15:37:34复活蛋
日期:2012-12-07 13:05:172013年新春福章
日期:2013-02-25 14:51:242014年世界杯参赛球队:西班牙
日期:2014-06-26 12:03:53
15#
发表于 2012-12-19 01:30 | 只看该作者
学习。。。

使用道具 举报

回复
论坛徽章:
24
技术图书徽章
日期:2013-08-16 14:31:52问答徽章
日期:2013-11-04 08:53:14目光如炬
日期:2013-12-23 06:00:11目光如炬
日期:2013-12-30 06:00:11明星写手
日期:2014-02-22 06:00:12马上有钱
日期:2014-03-31 14:09:05沸羊羊
日期:2015-05-20 12:42:59秀才
日期:2015-06-24 13:05:36秀才
日期:2015-07-13 09:48:14
16#
 楼主| 发表于 2012-12-19 16:11 | 只看该作者
先说说sharding的好处:
1. 表查询效率提升
2. 表运维代价降低
3. 服务器扩容便捷

如果单纯为了实现【1】其实sharding的可操作性还不如堆slave来的直接。
一般迫不得已sharding的情况主要有以下集中:
1. 单表数据库超大,已经超过服务器硬盘容量上限的1/2 (插槽全满)
2. 业务增长太快,每天疲于应付服务器扩容。
3. 大表更新需求很频繁,DDL的操作时间已经超过可接受范围

再说说sharding必须注意的:
1. sharding key一定要选的好,分布也要考虑周到。否则数据分布不均匀,或者add node导致大数据量漂移就是悲剧。
2. sharding不代表 availablity,可用性也要做好。一般双主绑在一起作为一个node比较靠谱。当然用dynamo的思路去做更好。

使用道具 举报

回复
论坛徽章:
5
茶鸡蛋
日期:2013-01-09 10:55:08茶鸡蛋
日期:2013-02-28 16:07:01奥运会纪念徽章:帆船
日期:2013-04-02 17:07:05奥运纪念徽章
日期:2013-07-18 13:55:12ITPUB社区12周年站庆徽章
日期:2013-10-08 17:44:42
17#
发表于 2012-12-21 16:21 | 只看该作者
下面和大家聊一聊mysql sharding,欢迎大家的建议和意见,大家一起学习!

一.背景
  我们知道,当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大。采用MySQL Replication多master多slave方案,在上层做负载均衡,虽然能够一定程度上缓解压力。但是当一张表中的数据变得非常庞大时,压力还是 非常大的。试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力。
二.定义
  数据sharding,也称作数据切分,或分区。是指通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力。
三.分类
  数据分区根据切分规则,可以分为两类:
  (1)垂直分区:以表为单位,把不同的表分散到不同的数据库或主机上。特点是规则简单,实施方便,适合业务之间耦合度低的系统。
  (2)水平分区:以行为单位,将同一个表中的数据按照某种条件拆分到不同的数据库或主机上。特点是相对复杂,适合单表巨大的系统。
  在实际情况中,有的时候把垂直分区和水平分区结合使用。
四.注意事项
  下面我们所说的分区,主要是指水平分区。
  (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命令即可。

使用道具 举报

回复
论坛徽章:
2
ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15
18#
发表于 2012-12-25 15:34 | 只看该作者
我也对数据库分片的内容比较感兴趣,但这方面的内容太少了。

使用道具 举报

回复
论坛徽章:
24
技术图书徽章
日期:2013-08-16 14:31:52问答徽章
日期:2013-11-04 08:53:14目光如炬
日期:2013-12-23 06:00:11目光如炬
日期:2013-12-30 06:00:11明星写手
日期:2014-02-22 06:00:12马上有钱
日期:2014-03-31 14:09:05沸羊羊
日期:2015-05-20 12:42:59秀才
日期:2015-06-24 13:05:36秀才
日期:2015-07-13 09:48:14
19#
 楼主| 发表于 2012-12-25 15:37 | 只看该作者
xike2002 发表于 2012-12-21 16:21
下面和大家聊一聊mysql sharding,欢迎大家的建议和意见,大家一起学习!

一.背景

不错啊

使用道具 举报

回复
论坛徽章:
14
2012新春纪念徽章
日期:2012-01-04 11:58:44 2014年世界杯参赛球队: 德国
日期:2014-05-30 12:58:23优秀写手
日期:2013-12-18 09:29:11凯迪拉克
日期:2013-11-19 14:35:20路虎
日期:2013-11-18 16:25:37灰彻蛋
日期:2013-05-31 08:48:322013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2012-11-13 11:23:38蜘蛛蛋
日期:2012-11-02 16:35:05奥运会纪念徽章:排球
日期:2012-07-10 09:51:40
20#
发表于 2012-12-28 11:34 | 只看该作者
xike2002 发表于 2012-12-21 16:21
下面和大家聊一聊mysql sharding,欢迎大家的建议和意见,大家一起学习!

一.背景

这个是新版本的mysql才有的功能,老版本mysql都没有的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表