数据分区操作实例

为了进一步帮助用户更好地理解和使用数据分区,本文档通过以下操作实例进行解释说明。以下实例均使用 shell 工具进行操作。

数据库分区

使用范围分区方式做数据库分区

在集合 sample.employee 中,将 create_date 字段范围在 [201801, 201901) 中的数据切分到复制组 group2 上,其它数据切分到复制组 group1 上。

  • 创建集合 sample.employee ,分区键为 create_date 字段,分区方式为 range,集合所在复制组为 group1:

    1. > db.createCS( "sample" )
    2. > db.sample.createCL( "employee", { ShardingKey: { create_date: 1 }, ShardingType: "range", Group: "group1" } )
  • 执行切分操作,将集合 sample.employee 中,字段 create_date 的数据范围在 [201801, 201901) 的记录,从复制组 group1 切分到复制组 group2 中:

    1. > 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:

    1. > db.sample.createCL( "employee2", { ShardingKey: { id: 1 }, ShardingType: "hash", Partition: 4096, Group: "group1" } )
  • 执行切分命令,将集合 sample.employee2 中,字段 id 的 hash 值范围在 [2048, 4096) 的记录,从复制组 group1 切分到复制组 group2 中:

    1. > 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:

    1. > db.createCS( "maincs" )
    2. > db.maincs.createCL( "maincl", { IsMainCL: true, ShardingKey: { create_date: 1 }, ShardingType: "range" } )
  • 创建子集合 bill.year2018bill.year2019

    1. > db.createCS( "bill" )
    2. > db.bill.createCL( "year2018" )
    3. > db.bill.createCL( "year2019" )

    Note:

    如果需要对子集合 bill.year2018bill.year2019 做数据库分区,可参考数据库分区示例

  • 通过挂载操作,将主集合 maincs.maincl 和两个子集合进行关联:

    1. > db.maincs.maincl.attachCL( "bill.year2018", { LowBound: { create_date: "201801" }, UpBound: { create_date: "201901" } } )
    2. > db.maincs.maincl.attachCL( "bill.year2019", { LowBound: { create_date: "201901" }, UpBound: { create_date: "202001" } } )
  • 通过主集合 maincs.maincl 插入 2018 年范围内的记录就会写到子集合 bill.year2018 上,插入 2019 年范围内的记录就会写到子集合 bill.year2019 上。