更新时间:2024-11-06 GMT+08:00

HTAP标准版简介

HTAP(Hybrid Transaction and Analytical Process,混合事务和分析处理)是能同时提供OLTP和OLAP的混合关系型数据库。

HTAP采用列式存储引擎,利用SIMD(Single Instrnction Multiple Data)并行计算技术,针对海量数据的分析场景,HTAP实时分析避免了用户单独维护数据抽取同步的链路,节约了大量数据管理成本,提供了简洁高效的数据实时分析能力。

标准版HTAP是基于开源StarRocks进行深度二次开发的版本。

产品架构

HTAP实例部署在弹性云服务器ECS上,存储采用高可靠云存储,提供两种类型:极速型SSD和超高IO。

开启GaussDB(for MySQL)实例Binlog日志,将数据同步到HTAP实例,包括表增删操作和部分表结构变更类操作。数据同步到HTAP实例后,可以通过HTAP实例的读写内网地址访问HTAP实例,进行数据分析。

HTAP标准版实例提供了FE节点和BE节点,其中FE节点是标准版HTAP的前端节点,主要负责管理元数据、管理客户端连接、进行查询规划、查询调度等工作。每个FE节点在内存中存储和维护一份完整的元数据副本,保证FE之间的一致性。BE节点是HTAP的后端节点,负责数据存储和SQL计算。

图1 产品架构

HTAP标准版实例的FE节点有三种角色。

图2 FE节点角色

  • fe-leader:负责读写元数据。fe-follower节点和fe-observer节点只能读取元数据,并将元数据写请求路由到fe-leader节点。fe-leader节点更新元数据,然后将元数据的更改同步到fe-follower节点和fe-observer节点。
  • fe-follower:只能读取元数据。
  • fe-observer:fe-observer节点从fe-leader节点同步和重放日志以更新元数据。fe-observer节点主要用于增加集群的查询并发性。

主要特性

  • 支持MPP架构

    利用多节点的计算能力,查询并行执行。

  • 高性能

    支持向量化引擎及CBO优化器,大宽表,多表join查询性能优异。

  • 支持标准SQL

    查询语句基本符合SQL-92标准。

  • 数据压缩存储

    列式压缩存储数据,同等条件下能够节约大量存储成本。

  • 多个数据源汇聚

    支持将多个GaussDB(for MySQL)数据库同步到一个HTAP实例。

计费说明

标准版目前处于公测中,暂不收费。

注意事项

  • HTAP标准版目前处于公测中,如需使用,请在管理控制台右上角,选择“工单 > 新建工单”,提交申请。
  • 使用HTAP查询数据时,需要注意数据库名、表名、视图名、用户名、角色名大小写敏感,列名和分区名大小写不敏感。
  • GaussDB(for MySQL)数据库中的表必须定义主键才支持同步,否则会跳过。
  • GaussDB(for MySQL)上执行的DDL,部分不支持同步到HTAP,可能会导致同步失败或数据不一致,使用时需注意。

    具体支持同步的DDL和不支持同步的DDL如下:

    • 支持同步的DDL
      表1 支持同步的DDL相关操作

      DDL名称

      SQL样例

      创建表

      CREATE TABLE tbl_name (c_id int not null, c_d_id integer not null, primary key (c_id));

      删除表

      DROP TABLE tbl_name;

      重命名表

      RENAME TABLE tbl_name to new_tbl_name;

      ALTER TABLE tbl_name RENAME TO new_tbl_name;

      清空表数据

      TRUNCATE TABLE tbl_name;

      修改表注释

      ALTER TABLE tbl_name COMMENT='test';

      添加列(非主键列)

      ALTER TABLE tbl_name ADD c_varchar varchar(2000) AFTER c_tinytext;

      删除列(非主键列)

      ALTER TABLE tbl_name DROP c_vchar;

      修改列类型、列顺序(非主键列)

      ALTER TABLE tbl_name CHANGE c_vchar c_vchar varchar(2000) default 'test' AFTER c_tinytext;

      注意:

      不支持修改列名及默认值, DDL语句列名和默认值必须为旧值。

      ALTER TABLE tbl_name MODIFY c_vchar varchar(2100) default 'test' AFTER c_tinytext;

      注意:

      不支持修改默认值,DDL语句默认值必须为旧值。

    • 不支持同步的DDL

      在创建的同步库中,支持同步表及数据,不支持同步数据库,表空间,索引,外键,函数,存储过程,触发器,视图,分区(删除),主键(增加/删除/修改),事务,用户,角色,权限,事件等对象的操作。

      不支持同步的索引相关操作请参见表2

      表2 不支持同步的索引相关操作

      DDL名称

      SQL样例

      添加索引

      ALTER TABLE tbl_name ADD INDEX name;

      重命名索引

      ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name;

      删除索引

      DROP INDEX name ON table;

      增加全文索引

      CREATE FULLTEXT INDEX name ON table(column);

      增加空间索引

      ALTER TABLE geom ADD SPATIAL INDEX(g);

      修改索引类型

      ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE;

      添加索引约束

      ALTER TABLE tbl_name ADD CONSTRAINT UNIQUE USING BTREE (column);

      ALTER TABLE tbl_name ADD CONSTRAINT UNIQUE USING HASH(column);

      不支持同步的分区表相关操作请参见表3

      表3 不支持同步的分区表相关操作

      DDL名称

      SQL样例

      分析表分区

      ALTER TABLE {db}.tp ANALYZE PARTITION p0;

      检查表分区

      ALTER TABLE {db}.tp CHECK PARTITION p0;

      优化表分区

      ALTER TABLE {db}.tp OPTIMIZE PARTITION p0;

      重建表分区

      ALTER TABLE {db}.tp REBUILD PARTITION p0;

      修复表分区

      ALTER TABLE {db}.tp REPAIR PARTITION p0;

      创建数据库

      CREATE DATABASE ddl_test_2;

      修改行格式

      ALTER TABLE tbl_name ROW_FORMAT = row_format;

      设置持久表统计信息

      ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20,STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;

      设置表的字符集

      ALTER TABLE tbl_name CHARACTER SET = charset_name;

      转换表的字符集

      ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

      优化表

      OPTIMIZE TABLE tbl_name;

      使用“强制”选项重建表

      ALTER TABLE tbl_name FORCE;

      执行空重建

      ALTER TABLE tbl_name ENGINE=InnoDB;

      重命名表空间

      ALTER TABLESPACE tablespace_name RENAME TO new_tablespace_name;

      增加表分区

      ALTER TABLE {db}.tp ADD PARTITION (PARTITION p3 VALUES LESS THAN (2006) );

      设置表默认字符集和校对规则

      ALTER TABLE tbl_name DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;

      建表语句不能包含CHECK,表选项等。

      在数据同步过程中,表4中的操作会导致HTAP中数据和GaussDB(for MySQL) 中数据不一致,应避免使用。

      这些不支持同步的操作不会影响在HTAP实例上查询和分析数据。

      表4 导致数据不一致的DDL操作说明

      DDL名称

      SQL样例

      删除主键

      ALTER TABLE tbl_name DROP PRIMARY KEY;

      增加主键

      ALTER TABLE {db}.t1 ADD PRIMARY KEY (id);

      增加删除主键

      ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column);

      主键允许为NULL

      ALTER TABLE tbl_name MODIFY COLUMN key_column_name data_type;

      修改主键类型

      ALTER TABLE tbl_name MODIFY COLUMN key_column_name data_type not null;

      增加外键

      ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)REFERENCES tbl2(col2) referential_actions;

      删除外键

      ALTER TABLE tbl DROP FOREIGN KEY fk_name;

      增加列

      说明:

      支持一般的列增加,但不支持缺省值为如下取值的场景:

      • 双引号
      • 包含HTAP中不存在的函数,字符串,标识符

      ALTER TABLE tbl_name ADD COLUMN column_name column_definition

      c VARCHAR(10) DEFAULT (CONCAT('1', '2'));

      设置列的缺省值

      说明:

      支持缺省值的设置,但不支持缺省值为如下取值的场景:

      • 双引号
      • 包含HTAP中不存在的函数,字符串,标识符

      ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal;

      修改列不允许为NULL

      ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL;

      同时修改列名和类型

      ALTER TABLE t1 CHANGE b b1 VARCHAR(100);

      修改列名

      ALTER TABLE t1 RENAME COLUMN a TO b;

      创建无主键的表

      ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1)STORED);

      增加存储型衍生列

      ALTER TABLE {db}.t1 ADD COLUMN (st2 INT GENERATED ALWAYS AS (c2 + 2)STORED), ALGORITHM=COPY;

      增加虚拟型衍生列

      ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1)VIRTUAL);

      删除表分区

      ALTER TABLE {db}.tp DROP PARTITION p4;

      丢弃表分区

      ALTER TABLE {db}.tp DISCARD PARTITION p2 TABLESPACE;

      导入表分区

      ALTER TABLE {db}.tp IMPORT PARTITION p2 TABLESPACE;

      截断表分区

      ALTER TABLE {db}.tp TRUNCATE PARTITION p2;

      截断分区表

      TRUNCATE {db}.tp;

      联合表分区

      ALTER TABLE {db}.tp_hash COALESCE PARTITION 2;

      重新组织表分区

      ALTER TABLE {db}.tp REORGANIZE PARTITION p0,p1,p2,p3 INTO ( ... );

      交换表分区

      ALTER TABLE {db}.tp EXCHANGE PARTITION p0 WITH TABLE {db}.tp2;

      删除表分区

      ALTER TABLE {db}.tp REMOVE PARTITIONING;

      使用REPLACE子句

      CREATE OR REPLACE TABLE;

  • 同步的数据库名称和表名称不支持中文字符。
  • 为达到较好性能,可以使用如下方法对查询进行优化。
    • 减少无效的计算,去除SQL中不用的字段,避免用SELECT *,简化SQL。
    • 去除无用的列,若结果使用到全部列,则相对行存无法达到优化效果。
  • 同步的表,默认使用OLAP引擎,主键模型。
  • 连接到HTAP标准版实例后,执行如下命令,可以查看从GaussDB(for MySQL)同步到HTAP标准版实例的数据库列表及同步状态。
    此命令会查询GaussDB(for MySQL)中Binlog的信息,会占用GaussDB(for MySQL)的每小时查询配额,不宜调用过于频繁,建议每分钟小于1次。
    show sync job;