【垂直分区例子】垂直分区简单例子。
1、创建主表 //主表必须用range切分
> db.createCS("maincs").createCL("maincl",{IsMainCL:true,ShardingKey:{a:1},ShardingType:"range"})
localhost:50000.maincs.maincl
Takes 0.8144s.
2、创建子表1 //子表既可用range,也可用hash,ShardingKey也不必一定要和主表的一致
> db.createCS("year2015").createCL("month01",{ShardingKey:{a:1},ShardingType:"hash",Partition:1024})
localhost:50000.year2015.month01
Takes 0.899728s.
3、创建子表2
> db.year2015.createCL("month02",{ShardingKey:{a:1},ShardingType:"hash",Partition:1024})
localhost:50000.year2015.month02
Takes 0.9760s.
4、将子表1、子表2关联到主表中去 // 将子表附到主表中去,每个子表都有一个范围
> db.maincs.maincl.attachCL("year2015.month01",{LowBound:{a:0},UpBound:{a:100}}
Takes 0.8920s.
>
> db.maincs.maincl.attachCL("year2015.month02",{LowBound:{a:100},UpBound:{a:200})
Takes 0.9837s.
5、查看主子表情况
> db.list(4)
{
"Name": "maincs.maincl"
}
{
"Name": "year2015.month01"
}
{
"Name": "year2015.month02"
}
Return 3 row(s).
Takes 0.3169s.
//db.snapshot(8,{Name:"maincs.maincl"})
6、插数据
> db.maincs.maincl.insert({a:1}) // 数据落到子表1中
Takes 0.2195s.
> db.maincs.maincl.insert({a:101}) // 数据落到子表2中
Takes 0.1872s.
7、查看数据落表的情况
> db.year2015.month01.find()
{
"_id": {
"$oid": "564968bb5fc84bb828000000"
},
"a": 1
}
Return 1 row(s).
Takes 0.3209s.
> db.year2015.month02.find()
{
"_id": {
"$oid": "564968be5fc84bb828000001"
},
"a": 101
}
Return 1 row(s).
Takes 0.3407s.
8、解除主子表之间的关联
> db.maincs.maincl.detachCL("year2015.month01")
Takes 0.10324s.
> db.maincs.maincl.detachCL("year2015.month02")
Takes 0.7857s.
>
【混合分区例子】
// create.js
// main cs cl
var mainCL = "maincl" ;
var mainCS = "maincs" ;
var indexName = "tx_id_index" ;
var horizontalSharkingKey = eval( { "account_id" : 1 } );
var verticalShardingKey = eval( { "tx_time" : 1 } ) ;
var verticalShardingKeyName = "tx_time" ;
var mainCLOptions = eval( { ShardingKey : verticalShardingKey, ShardingType : "range", IsMainCL : true } ) ;
// domain
var domainName = "myDomain" ;
//var domainGroups = [ "db1", "db2" ] ;
var domainGroups = [ "group1", "group2", "group3", "group4" ] ;
var domainOptions = eval( { AutoSplit : true } ) ;
// cs
var csNames = [ "year2014", "year2015" ] ;
var years = [ 2014, 2015 ] ;
db = new Sdb( "localhost", 11810 ) ;
//db = new Sdb( "localhost", 50000 ) ;
try
{
println( "drop main table.. " ) ;
db.dropCS( mainCS ) ;
}
catch( e )
{
if ( -34 != e )
{
println( "failed to drop main table.." ) ;
throw e ;
}
}
for ( var i = 0 ; i < csNames.length; i++ )
{
try
{
println( "drop cs: " + csNames[i] ) ;
db.dropCS( csNames[i] ) ;
}
catch( e )
{
if ( -34 != e )
{
println( "failed to drop cs " + csNames[i] ) ;
throw e ;
}
}
}
try
{
println( "drop domain.." ) ;
db.dropDomain( domainName ) ;
}
catch( e )
{
if ( -214 != e )
{
println( "failed to drop domain " + domainName ) ;
throw( e ) ;
}
}
println( "create domain.." ) ;
db.createDomain( domainName, domainGroups, domainOptions ) ;
println( "create main table.." ) ;
db.createCS(mainCS).createCL( mainCL, mainCLOptions );
for ( var t = 0; t < csNames.length; t++ )
{
var csName = csNames[t] ;
println("create cs : " + csName ) ;
db.createCS( csName, { Domain : domainName } ) ;
var cs = db.getCS( csName );
for( var i = 1; i
{
var clName = "month" + i ;
println("create cl : " + clName );
cs.createCL( clName, { ShardingKey : horizontalSharkingKey, ShardingType : "hash", Partition : 4096, Compressed : true, AutoSplit : true } );
}
var lowBound = "" ;
var upBound = "" ;
for( var i = 1; i
{
if (i < 10)
{
lowBound = years[t] + "-" + "0" + i + "-" + "01" ;
}
else
{
lowBound = years[t] + "-" + i + "-" + "01" ;
}
lowBound = lowBound + " 00:00:00" ;
var j = i + 1 ;
if ( j < 10 )
{
upBound = years[t] + "-" + "0" + j + "-" + "01" ;
}
else
{
if ( j == 13 )
{
var t_year = years[t] + 1 ;
upBound = t_year + "-" + "01" + "-" + "01" ;
}
else
{
upBound = years[t] + "-" + j + "-" + "01" ;
}
}
upBound = upBound + " 00:00:00" ;
var table_full_name = csNames[t] + "." + "month" + i ;
var exec_str = "db." + mainCS + "." + mainCL + ".attachCL('" + table_full_name + "', {LowBound:{'" + verticalShardingKeyName + "':'" + lowBound + "'}, UpBound:{'" + verticalShardingKeyName + "':'" + upBound + "'}} )" ;
println( exec_str ) ;
eval ( exec_str ) ;
// lowBound = upBound ;
}
}
println( "create index in tx_id.." ) ;
var str = "db." + mainCS + "." + mainCL + ".createIndex( '" + indexName + "', { 'tx_id' : 1 } ) ; "
println(str) ;
eval( str ) ;
db.close();
// end ***********************************************************
【脚本运行方式】
/opt/sequoiadb/bin/sdb -f create.js