创建主子表
var test = db.createCS("test")
db.test.createCL("main", {IsMainCL:true, ShardingKey:{time, 1} }, ShardingType: range) // 主子表只能以范围切分
db.test.createCL("bar1")
db.test.createCL("bar2")
// 挂载集合,每次一个
db.test.main.attachCL("test.bar1", {LowBound: {time : 20190101 }, UpBound:{time : 20190401} } )
db.test.main.attachCL("test.bar2", {LowBound: {time : 20190401 }, UpBound:{time : 20190701} } )
// 也可以跨集合空间去挂载
db.test.main.attachCL("foo.bar", {LowBound: {time : 20190701 }, UpBound:{time : 20191001} } )
// 但是呢,插入记录的时候,不可以插入不在切分范围内的数据,如:
db.test.main.insert({name: a1, phone:"12312312312"}) // 没有time字段,会自动补全为null,但是不在范围内
db.test.main.insert({name: a1, time: null }) // 有time字段,但值为null,也无法插入
主子表的二维划分
db.createCS("test")
db.test.createCL("main", {IsMainCL:true, ShardingKey:{time, 1} }, ShardingType: range) // 主表只能以范围切分
db.test.createCL("bar1", ShardingType:"Hash", ShardingKey:{id, 1}) // 子表以Hash划分
db.test.createCL("bar2" ShardingType:"Hash", ShardingKey:{id, 1})
// 挂载集合,每次一个
db.test.main.attachCL("test.bar1", {LowBound: {time : 20190101 }, UpBound:{time : 20190401} } )
db.test.main.attachCL("test.bar2", {LowBound: {time : 20190401 }, UpBound:{time : 20190701} } )