数据分区操作实例
为了进一步帮助用户更好地理解和使用数据分区,本文档通过以下操作实例进行解释说明。以下实例均使用 shell 工具进行操作。
数据库分区
使用范围分区方式做数据库分区
在集合 sample.employee
中,将 create_date
字段范围在 [201801, 201901) 中的数据切分到复制组 group2 上,其它数据切分到复制组 group1 上。
创建集合
sample.employee
,分区键为create_date
字段,分区方式为 range,集合所在复制组为 group1:> db.createCS( "sample" )
> db.sample.createCL( "employee", { ShardingKey: { create_date: 1 }, ShardingType: "range", Group: "group1" } )
执行切分操作,将集合
sample.employee
中,字段create_date
的数据范围在 [201801, 201901) 的记录,从复制组 group1 切分到复制组 group2 中:> db.sample.employee.split( "group1", "group2", { create_date: "201801"}, { create_date: "201901"} )
通过集合
sample.employee
插入 2018 年范围内的记录就会写到复制组 group2 上,插入其它年份的记录就会写到复制组 group1 上
使用散列分区方式做数据库分区
集合 sample.employee2
中,以记录 id 字段为分区键做散列分区,将 hash 值范围在 [2048, 4096) 的数据切分到复制组 group2 上,其它数据切分到复制组 group1 上:
创建集合
sample.employee2
,分区键为 id 字段,分区方式为 hash ,hash 值总数为 4096 个, 集合所在复制组为 group1:> db.sample.createCL( "employee2", { ShardingKey: { id: 1 }, ShardingType: "hash", Partition: 4096, Group: "group1" } )
执行切分命令,将集合
sample.employee2
中,字段 id 的 hash 值范围在 [2048, 4096) 的记录,从复制组 group1 切分到复制组 group2 中:> db.sample.employee2.split( "group1", "group2", { Partition: 2048 }, { Partition: 4096 } )
表分区
使用范围分区方式做表分区
集合 maincs.maincl
中,将 create_date
字段范围在 [201801, 201901) 中的数据映射到集合 bill.year2018
,范围在 [201901, 202001) 中的数据映射到集合 bill.year2019
创建主集合
maincs.maincl
,分区键为create_date
,分区方式为 range:> db.createCS( "maincs" )
> db.maincs.createCL( "maincl", { IsMainCL: true, ShardingKey: { create_date: 1 }, ShardingType: "range" } )
创建子集合
bill.year2018
,bill.year2019
:> db.createCS( "bill" )
> db.bill.createCL( "year2018" )
> db.bill.createCL( "year2019" )
Note:
如果需要对子集合
bill.year2018
,bill.year2019
做数据库分区,可参考数据库分区示例通过挂载操作,将主集合
maincs.maincl
和两个子集合进行关联:> db.maincs.maincl.attachCL( "bill.year2018", { LowBound: { create_date: "201801" }, UpBound: { create_date: "201901" } } )
> db.maincs.maincl.attachCL( "bill.year2019", { LowBound: { create_date: "201901" }, UpBound: { create_date: "202001" } } )
通过主集合
maincs.maincl
插入 2018 年范围内的记录就会写到子集合bill.year2018
上,插入 2019 年范围内的记录就会写到子集合bill.year2019
上。