ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SequoiaDB巨杉数据库数据域

2021-03-24 15:58:45  阅读:250  来源: 互联网

标签:SequoiaDB 数据库 db 巨杉 复制 集合 prod 数据 orders


数据域(Domain)是指由若干个复制组组成的逻辑单元,其主要作用是数据隔离。

  • 一个复制组可以属于多个域。
  • 复制组个数为0的域,称作空域。用户在空域中不能创建集合空间。
  • SYSDOMAIN 为预定义的系统域。所有复制组均属于系统域,用户不能直接操作系统域。

原理

Domain示意图

 

  • 图中共有6个复制组:prod_part1,prod_part2,prod_part3,prod_part4,prod_part5,prod_part6
  • 一共有4个数据域:prod_domain1,prod_domain2,prod_domain3 和 SYSDOMAIN。数据域 prod_domain1 内只有一个复制组 prod_part1;数据域 prod_domain2 内有两个复制组 prod_part2 和 prod_part3;数据域 prod_domain3 内有两个复制组 prod_part3,prod_part6;SYSDOMAIN 域包含所有的6个复制组
  • 复制组 prod_part3 同时属于数据域 prod_domain2,prod_domain3,SYSDOMAIN。

在创建集合空间时,可以指定该集合空间所属的数据域。后续该集合空间下的集合只能创建在数据域包含的数据组内,不能在其他数据组上,从而实现的数据隔离。

数据隔离操作实例

通过使用不同的数据域,来实现不同业务的数据隔离。以用户需要将有两个业务(业务 A,业务 B)做数据隔离为例,说明使用数据域实现数据隔离的操作方法。

  • 创建两个包含不同复制组的域

> db.createDomain( 'prod_domain1', ['prod_part1', 'prod_part2'], { AutoSplit: true } )
> db.createDomain( 'prod_domain2', ['prod_part3', 'prod_part4'], { AutoSplit: true } )

创建业务 A 需要的集合空间和集合

> db.createCS( 'businessA', { Domain: 'prod_domain1' } )
> db.businessA.createCL( 'orders' )

创建业务 B 需要的集合空间和集合

> db.createCS( 'businessB', { Domain: 'prod_domain2' } )
> db.businessB.createCL( 'orders' )
  • 集合 businessA.orders 的数据只会落在数据域 prod_domain1 中,对应的复制组为 prod_part1,prod_part2;集合 businessB.orders 的数据只会落在数据域 prod_domain2 中,对应的复制组为 prod_part3,prod_part4;

数据自动切分操作实例

数据域的另一个作用是在使用散列分区方式做数据库分区时,实现自动切分。当创建集合时,指定散列分区和 AutoSplit 参数时,集合的数据将会自动切分到集合所在域的所有复制组中。

创建域

> db.createDomain( 'prod_domain3', ['prod_part1', 'prod_part2'], { AutoSplit: true } )

创建集合空间,并指定集合空间所属的域

> db.createCS( 'business', { Domain: 'prod_domain3' } )

创建集合,指定散列分区和 AutoSplit

> db.business.createCL( 'orders', { ShardingType: 'hash', ShardingKey: { id: 1 }, AutoSplit: true } )

通过快照命令可以看到集合 business.orders 自动在域内所有复制组中进行了 hash 切分

> db.snapshot( SDB_SNAP_CATALOG, { Name: 'business.orders'} )
{
...
"Name": "business.orders",
"ShardingType": "hash",
"ShardingKey": {
  "id": 1
}
"CataInfo": [
  {
    "ID": 0,
    "GroupdID": 1000,
    "GroupName": "prod_part1",
    "LowBound": {
      "": 0
    },
    "UpBound": {
      "": 2048
    }
  },
  {
    "ID": 1,
    "GroupdID": 1001,
    "GroupName": "prod_part2",
    "LowBound": {
      "": 2048
    },
    "UpBound": {
      "": 4096
    }
  }
]
}

 

数据库自动为集合 business.orders 在复制组 prod_part1,prod_part2中做了切分。将字段 id 的 hash 值范围在 [0, 2048) 的数据划分到复制组 prod_part1 中,字段 id 的 hash 值范围在 [2048, 4096) 的数据划分到复制组 prod_part2 中。

 

相关阅读

SequoiaDB巨杉数据库多维分区

标签:SequoiaDB,数据库,db,巨杉,复制,集合,prod,数据,orders
来源: https://blog.csdn.net/weixin_45890253/article/details/115178804

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有