-
Notifications
You must be signed in to change notification settings - Fork 80
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 系统自动检测自动完成(周期性检查)