今天带大家体验一下,巨杉数据库中集合分区的几种方式。
【数据分区】
在巨杉数据库集群中,可以建立多个数据组。用户存储数据时,可以将数据落到一个数据组中,也可以落到多个数据组上。
将数据落到多个数据组上这种方式,称为数据分区。
在巨杉数据库中,有三种分区方式:hash分区,range分区和混合分区。
hash分区:水平范围分区。
range分区:垂直分区,可以理解为主子表的方式。
混合分区:也称多维分区,使用以上两种分区方式。
【分区键介绍】
分区键定义了每个集合中所包含数据的分区规则。每一个集合对应一个分区键,分区键中可以包含一个或多个字段。分区键可以在创建集合时指定,也可以集合创建之后进指定分区键。
在编目节点中,每个集合都拥有自己的分区范围,分区范围中每个范围段对应一个分区组,标示该集合的某一数据段坐落于该分区组。
Range 分区键的格式类似于索引键,为一个 JSON 对象。JSON 对象中每一个字段对应分区键的字段,数值为 1 或者 -1,代表正向或逆向排序。
Hash 分区的 ShardingKey 组成方式与 Range 分区方式相同(但字段的正向/逆向不起作用)。Partition 的值必须是 2 的幂,范围在[ 23 , 220 ],默认为 4096。
【创建分区表】
1. 创建一个hash分区的集合,指定分区键为id属性。
db.createCS("hashCS").createCL("hashCL",{ShardingKey:{id:1},ShardingType:"hash"})
- 创建一个range分区的集合,为其创建子集合,按月区分,每个月一个子集合。
//主集合
db.createCS("rangeCS").createCL("rangeCL",{ShardingKey:{month:1},ShardingType:"range",IsMainCL:true)
//子集合
db.createCS("sonCS").createCL("sonCL_2")
//挂载集合,该子集合中挂载2月份数据,范围为:[LowBound,UpBound)
db.rangeCS.rangeCL.attachCL("sonCS.sonCL_2",{LowBound:{month:2},UpBound:{month:3}})
- 混合分区创建示例(在垂直分区的子集合中,采用hash分区)
//主集合
db.createCS("rangeCS").createCL("rangeCL",{ShardingKey:{month:1},ShardingType:"range",IsMainCL:true)
//子集合,采用hash分区,指定分区键为id属性
db.createCS("sonCS").createCL("sonCL_2",{ShardingKey:{id:1},ShardingType:"hash"})
//挂载集合,该子集合中挂载2月份数据
db.rangeCS.rangeCL.attachCL("sonCS.sonCL_2",{LowBound:{month:2},UpBound:{month:3}})
分区相关内容文档请查看:
http://doc.sequoiadb.com/cn/index-cat_id-1454575727-edition_id-304