本文为您介绍Hologres中,账号、用户角色、实例、数据库、Schema、内部表、外部表和分区表的基本概念。

账号

  • 阿里云账号

    阿里云账号即主账号,用于创建和管理Hologres实例,可以授权给其他用户管理员权限。

    主账号支持的表达格式如下表所示。
    账号格式 描述 示例
    ALIYUN$<AccountName>@aliyun.com <AccountName>为主账号的登录名称。 ALIYUN$company@aliyun.com
    <AccountName>@aliyun.com company@aliyun.com
    <Account ID> 主账号的ID。 1344445678xxx
  • RAM子账号

    RAM子账号即子账号。阿里云账号授予RAM子账号一定权限后,RAM子账号可以在权限范围内创建和管理实例中的数据库和表。

    子账号支持的表达格式如下表所示。
    账号格式 描述 示例
    p4_<Account ID>
    • p使用小写字母。
    • <Account ID>为主账号的ID。
    p4_12345678xxx
    <subUserName>@<Account Name>.onaliyun.com
    • <subUserName>为子账号的登录名称。
    • <AccountName>为主账号的登录名称。
    • <AccountID>为主账号的ID。
    holouser@company.onaliyun.com
    <subUserName>@<Account Name>
    <subUserName>@<Account ID>.onaliyun.com
    RAM$<subUserName>
    RAM$<AccountName>:<subUserName>
    RAM$<Account ID>:<subUserName>
    <subUserName>@<Account ID>

用户角色

  • 超级管理员

    系统默认设置购买实例的主账号为超级管理员Superuser。Superuser拥有整个实例的所有权限,例如创建数据库、删除数据库、创建角色以及为角色授权。

  • 普通用户

    普通用户需要被Superuser授权后才能访问实例,并在权限范围内进行数据开发。普通用户也可以被授权为Superuser。

实例

实例(Instance)是您使用和管理数据库存储服务的实体。您对数据库的所有操作都需要在实例中完成。

数据库

数据库是按照数据结构来组织、存储和管理数据的仓库。您可以在数据库中创建、更新或删除表,以及执行与函数相关的操作。

购买Hologres实例后,系统自动创建postgres数据库。该数据库分配到的资源较少,仅用于管理,开发实际业务需要新建数据库。新建数据库请参见CREATE DATABASE

Schema

Schema是数据库对象的集合,相当于文件系统中的目录。实例中的表和函数等对象存放于各个Schema中。

成功创建数据库后,系统默认创建命名为public的Schema,您对实例对象的所有操作默认都在该Schema中执行。您也可以新建Schema,详情请参见CREATE SCHEMA
说明
  • Schema不能嵌套Schema。
  • 同一个Schema中的对象名称不能重复。
  • 不同Schema中的对象名称可以重复。

表是由行和列组成的数据存储单元。列的数量和顺序是固定的,每一列拥有一个名称。行的数量是变化的,表示在给定的时刻,表中存储的数据量。

表的每一列都有一个数据类型,表示该列的取值类型,详情请参见数据类型汇总

Hologres中的表包括以下两种类型:
  • 内部表

    指数据存储在Hologres中的表。表中的数据类型可以是Hologres支持的任意一种类型。

  • 外部表

    指在Hologres中不存储数据,只进行字段映射的表。外部表的数据都是只读的,您在外部表中不能执行DML语句或创建索引。

    您可以在Hologres中创建外部表,加速查询外部数据源的数据,例如查询MaxCompute的数据。

    Hologres中创建外部表请参见CREATE FOREIGN TABLE

分区表

分区表是根据键值属性划分父表为许多小的子集,这些子集称为分区。不同类型的数据存放于不同分区,Hologres当前仅支持对单个键值进行列表分区。查询数据时,您可以通过分区键值过滤查询语句,排除无关的分区,从而提升查询速度。

Hologres中创建或删除分区表请参见DROP PARTITION TABLE

Table Group

  • 什么是Table Group?
    一个table的数据将会存储在固定的一组shard上,数据写入时会按照distribution key,将数据sharding到具体的shard。从创建table开始,负责存储table数据的这一组shard就已经分配好了,这一组shard称为一个Table Group,直到Table Group被删除或者表被移动到另外的Table Group,负责table底层存储的shard始终是最初分配的那些shard。在使用时有以下几个基本原则:
    • 多个表(table)可以位于同一组shard,即多个table的数据可以存储在同一组shard上(Table Group)。
    • 一个Table Group必须有1张或多张表,如果Table Group无表,则Table Group会自动删除。
    • 一个表只能属于一个Table Group,除非重建表或显式调用迁移Table Group函数,否则无法变更表所属的Table Group。
    Table Group是Hologres特有的一个存储逻辑概念(PostgreSQL无此概念)。Table Group与PostgreSQL中的TABLESPACE是不一样的:TABLESPACE唯一标识了数据库对象的存储位置,类似一个目录的概念。而Table Group代表的是底层的逻辑shard组。

    通过以下几个图直观了解Table Group。

    • Table Group与Schema的概念区别:Schema是一个标准的数据库概念,而Table Group是一个逻辑存储概念,并非数据库标准。不同Schema下的表可以位于同一个Table Group,即底层使用同一组shard存储。861
    • 不同Table Group之间的关系:Table Group 1有5个shard ,Table Group X有2个shard count,两个Table Group的shard互不相交,每个shard在实例级别拥有独特的编号。862
    • Hologres底层的计算存储原理示意图:Hologres为计算存储分离架构,数据本身不存储在计算Worker上,而是存储在分布式存储上。因此每个Hologres计算Worker都有若干的actor,每个actor唯一对应一个真实存储shard,actor负责一对一地对应shard的数据读取、写入和管理。正因为是一对一的,所以Table Group可以认为是一组actor的集合,也可以认为是一组shard的集合,没有本质区别。863
  • 默认Table Group

    Hologres实例的每个DB都会创建一个默认Table Group:DB创建后,当DB中第一个表被创建,并且没有显示指定表所在的Table Group信息时,Hologres会自动创建出一个默认Table Group,名为{DBname}_tg_default。此后,用户建表时如果不显示指定Table Group,表都将被放置在默认的Table Group中。

    默认Table Group的Shard数,请参见实例默认资源表。这些默认Shard数,是经过大规模实验验证的最佳参数,能满足大部分场景下的数据量范围和查询种类。
    说明 当实例发生升降配时,已有DB的默认Table Group不会改变,其Shard数也不会改变。新建DB时,默认Table Group的Shard数将会变成新规格的默认shard数(如上表所示)。实践表明,无特殊情况,在扩容资源5倍以下的场景中,不需要更改原DB的默认shard数。

Shard Count

一个Table Group拥有的shard数量(即Shard Count)是它的一个重要属性,Shard数在创建Table Group时需要指定,后续无法更改,只能通过重新创建新的Table Group来更改Shard数。

Hologres中设置shard数量请参见设置Table Group与Shard Count