Skip to content

Wasp表分区

jaywong85 edited this page Jul 23, 2013 · 1 revision

为了提高系统的可用性和可拓展性,在系统中我们将表分割成若干个分区,分区的数量不限。

  用户创建分区有两种方式:
  (一)预分区
  (二)服务过程中对分区的再次切割
  在我们的系统中,我们将一个分区定义为EntityGroup,每个EntityGroup都是连续的,在前面我们提到了均衡字段,即,每个均衡字段作为EntityGroup的基准切分字段,而均衡字段在整张表中是按照字典序排序。切割为若干个EntityGroup的时候也是按照字典序切割。示例:

EntityGroup1<-∞,'00000'> EntityGroup2<'00000','00002'> EntityGroup3<'00002','00010'> EntityGroup4<'00010',+∞> 在建表中使用预分区的方式,例如:

  CREATE TABLE user {REQUIRED INT64 user_id;
                     REQUIRED STRING name; } //以预分区的形式建表
                     PRIMARY KEY(user_id), 
                     ENTITY GROUP ROOT,
                     ENTITY GROUP KEY(user_id),
                     PARTITION BY RANGE('aaa', 'zzz', 10);
  // 把均衡字段的aaa到zzz范围内的切成10个分区(均衡字段是字典序)。         
  // 只有root表支持分区,子表共享root表的分区。
  // 子表创建时不可以指定分区,因为直接沿用父表的分区。

服务过程中对分区的再次切割,例如: 方式一,API:见类org.apache.wasp.client.WaspAdmin

 public void split(final byte[] tableNameOrEntityGroupName,
     final byte[] splitPoint);
 public void split(final String tableNameOrEntityGroupName,
     final String splitPoint)

方式二,终端模式:

 bin/wasp shell
 wasp>split 'tableNameOrEntityGroupName','splitpoint'

分区的负载均衡 每个数据节点负责服务若干个分区,我们对系统负载均衡的单位就是分区。 例如:有3台服务器:s1、s2、s3,我们总共有5个分区eg1、eg2、eg3、eg4、eg5; 它们分别加载到s1(eg1、eg2、eg3)、s2(eg4、eg5)、s3(); 上面的加载方式负载不够均衡,明显有s3这台机器是空闲的,那么就可以对集群做均衡操作,即挑选其中某个分区移动到s3中服务。 系统提供了两种方式做移动分区,1 人工操作 2 系统自动检测自动完成(周期性检查)

Clone this wiki locally