MySQL Proxy的sharding方案介绍
发布日期:2016-4-22 20:4:28
MySQL Proxy的sharding方案介绍 到现在为止,开源的MySQL Proxy已经有几款了,有的已经在生产环境上广泛应用。但是在sharding方面,这些proxy都是不能分子表的。那即是说,一个node节点只能分一张表。但是我们的线上需求通常是这样的: 我有一张非常大的表,行数超过十亿,需要进行拆分处理。假比拆分因子是512。 若采用单node单数据库的分表方式,那其实这512个子表还是存在一个物理节点上,这些意义不大。 若采用他们的sharding功能,就需要512个物理节点,也不现实。现有的proxy 在面对这种需求下就不能很好地满足要求了。通常我们希望将512张子表均分在几个MySQL节点上,从而达到系统的横向扩展。 然而kingshard较好地实现了这种典型的需求。简单来说,kingshard的分表方案采用两级映射的方式:
一、sharding支持的操作 目前kingshard(https://github.com/flike/kingshard) sharding支持以下几种语句:
所有这五类操作都支持跨子表。但是写操作仅支持单node上的跨子表,select操作则可以跨node,跨子表。 二、sharding方式 1.range方式 基于整数范围划分来得到子表下标。该方式的优点与缺点:
2.hash方式 kingshard采用(shardKey%子表个数)的方式得到子表下标。该方式的优点与缺点:
三、sharding相关的配置介绍 在配置文件中,有关sharding设置是通过scheam设置,相关代码已给出,如图1所示: schemas : 图1 一个kingshard实例只能有一个schemas,我们从图1的配置可以看出,schema可以分为三个部分:
其中rules又可以分为以下三个部分:
四、kingshard架构图 1.基于kingshard的子表迁移方案 通过kingshard可以非常方便地动态迁移子表,从而保证MySQL节点的负载压力不至于太大。大致步骤有以下几步:
2.举例 简单演示一下kingshard的相关操作,感兴趣的朋友可以自己试一试。:)相关代码已给出,如图2所示: 图2 上一条: 你还在用MongoDB吗? 下一条: 8 个 MySQL 陷阱
|