分区配置

用户做数据分区时,需要进行分区配置,配置的主要内容包括划分每个分区包含的数据范围,以及指定分区的归属。

数据库分区配置

假设用户需要将集合 business.orders_2019 中 以 id 字段为分区键将数据均匀切分到两个复制组 prod_part1, prod_part2 中。则相应的切分配置如下表:

分区范围分区所属复制组说明
[0, 2048)prod_part1id 字段 hash 值范围在 0 到 2048 范围内的记录切分到复制组 prod_part1 中
[2048, 4096)prod_part2id 字段 hash 值范围在 2048 到 4096 范围内的记录切分到复制组 prod_part2 中

Note:

对集合 business.orders_2019 做散列分区,默认情况下 hash 值范围为 [0, 4096)

以下根据配置,实际生成集合 business.orders_2019

  • 创建集合 business.orders_2019 ,分区键为 id 字段,分区方式为 hash ,集合所在复制组为 prod_part1:

    1. > db.createCS( "business" )
    2. > db.business.createCL( "orders_2019", { ShardingKey: { id: 1 }, ShardingType: "hash", Group: "prod_part1" } )
  • 执行切分操作,将集合 business.orders_2019 中,字段 id 的 hash 值范围在 [2048, 4096) 的记录,从复制组 prod_part1 切分到复制组 prod_part2 中:

    1. > db.business.orders_2019.split( "prod_part1", "prod_part2", { id: 2048}, { id: 4096} )
  • 用户可以通过快照命令查看分区的划分情况:

    1. db.snapshot( SDB_SNAP_CATALOG, { Name: "business.orders_2019" } )
    2. {
    3. ...
    4. "Name": "business.orders_2019",
    5. "ShardingType": "hash",
    6. "ShardingKey": {
    7. "id": 1
    8. }
    9. "Partition": 4096,
    10. "CataInfo": [
    11. {
    12. "ID": 0,
    13. "GroupID": 1000,
    14. "GroupName": "prod_part1",
    15. "LowBound": {
    16. "": 0
    17. },
    18. "UpBound": {
    19. "": 2048
    20. }
    21. },
    22. {
    23. "ID": 1,
    24. "GroupID": 1001,
    25. "GroupName": "prod_part2",
    26. "LowBound": {
    27. "": 2048
    28. },
    29. "UpBound": {
    30. "": 4096
    31. }
    32. }
    33. ]
    34. }

表分区配置

当用户需要将集合 business.orders 中以 create_date 字段按年将数据切分到不同的子集合中。相应的切分配置如下表:

分区范围分区所属子集合说明
[201801, 201901)business.orders_2018create_date 在 201801 到 201901 范围内的数据切分到子集合 business.orders_2018
[201901, 202001)business.orders_2019create_date 在 201901 到 202001 范围内的数据切分到子集合 business.orders_2019

以下根据配置,实际生成集合 business.orders

  • 创建集合 business.orders ,指定为主集合,分区键为 create_date 字段,分区方式为 range:

    1. > db.business.createCL( "orders", { IsMainCL: true, ShardingKey: { create_date: 1 }, ShardingType: "range" } )
  • 通过挂载操作,将主集合 business.orders 和两个子集合进行关联:

    1. > db.business.orders.attachCL( "business.orders_2018", { LowBound: { create_date: "201801" }, UpBound: { create_date: "201901" } } )
    2. > db.business.orders.attachCL( "business.orders_2019", { LowBound: { create_date: "201901" }, UpBound: { create_date: "202001" } } )

    NOTE:

    business.orders_2018business.orders_2019 可以是普通集合,也可以是数据库分区的集合。

  • 用户可以通过快照命令查看分区的划分情况:

    1. db.snapshot( SDB_SNAP_CATALOG, { Name: "business.orders" } )
    2. {
    3. ...
    4. "Name": "business.orders",
    5. "IsMainCL": true,
    6. "ShardingType": "range",
    7. "ShardingKey": {
    8. "create_date": 1
    9. }
    10. "CataInfo": [
    11. {
    12. "ID": 1,
    13. "SubCLName": "business.orders_2018",
    14. "LowBound": {
    15. "create_date": "201801"
    16. },
    17. "UpBound": {
    18. "create_date": "201901"
    19. }
    20. },
    21. {
    22. "ID": 2,
    23. "SubCLName": "business.orders_2019",
    24. "LowBound": {
    25. "create_date": "201901"
    26. },
    27. "UpBound": {
    28. "create_date": "202001"
    29. }
    30. }
    31. ]
    32. }