您的位置:首页 > 其它

SequoiaDB数据水平分区简介

2015-04-10 10:58 155 查看
1. 数据水平分区简介

在SequoiaDB中,默认情况下,表(集合)的数据只会存储在一个复制组中。这样,对该表的CRUD操作只会落到一个复制组中。

随着对表的IO请求上升/数据量的增加,就会造成性能瓶颈,导致访问时延增加。为了解决这个问题,便引入了水平分区的功能。

水平分区可以将表(集合)切分成若干分区,并将分区指定到不同的复制组中。示意图如下:



上图中,将集合2切分成N个分区, 每个分区可以指定到不同的复制组。这样,当查询数据时,就会根据条件将请求发给不同的复制组,提升查询性能。

2. 如何使用水平切分

假设前提场景:

已经安装了集群模式的SequoiaDB,并且创建了两个复制组db1, db2.

执行SequoiaDB shell工具sdb,并连接上协调节点

./sdb
>db = new Sdb('localhost', 11810)                         //连接本地的协调节点
>db.createCS('cs').createCL('cl', {Group:'db1'})          //创建表cs.cl,并将表数据指定在复制组db1上


a、修改表属性,设置分区键

>db.cs.cl.alter((ShardingKey:{a:1}})         //指定表中名为a的字段作为分区键, {a:1}其中1表示升序


b、设置了分区键之后,就可以将表按分区键做切分

>db.cs.cl.split('db1', 'db2', {a:100})     //将表中a在范围[100, 无穷大)的数据从db1中切分到db2中


c、验证设置成功与否

>db.snapshot(8, {Name:"cs.cl"})            //获取表cs.cl的快照信息
{
"CataInfo": [
{
"ID": 0,
"GroupID": 1000,
"GroupName": "db1"
"LowBound": {
"a": {
"$minKey": 1
}
},
"UpBound": {
"a": 100
}
},
{
"ID": 1,
"GroupID": 1001,
"GroupName": "db2"
"LowBound": {
"a": 100
},
"UpBound": {
"a": {
"$maxKey": 1
}
}
}
]
"EnsureShardingIndex": true,
"_id": {
"$oid": "55272fa4d9150b7ff15a6ddc"
},
"Name": "cs.cl",
"Version": 3,
}


这样当访问a在(无穷小, 100)范围的数据时,就只会访问复制组db1,

当访问a在[100, 无穷大)范围的数据时, 只会访问复制组db2。这样可以使请求分流,并解决表数据量过大的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: