GBase 8a数据库集群V95版本相对V8版本变动内容汇总

GBase 数据库集群V95版本,相对V8主要是支持了虚拟集群功能,以及一些自增列等功能的增强,如下是详细的介绍。

1、运行期间不再需要root
2、服务启动命令变动
3、在线节点替换
4、新增清理某个节点的所有event
5、支持utf8mb4字符集(862B43开始)
6、group_concat支持超过32K
7、group_concat支持over 语法
8、支持int数值直接like模糊匹配
9、日期相减不足一天的部分,从返回0改成返回小数(862B43开始)
10、支持表空间
11、支持分区(range,list,key,hash)
12、表锁争抢改成排队
13、集群状态不再支持LOCK
14、审计日志归档的event默认不可用
15、虚拟集群和镜像集群
16、多列Hash表
17、自增列
18、事务
19、支持GB18030字符集(862B43开始)




-------------------------------------------------------------------------------
1、运行期间不再需要root
安装数据库用的操作系统用户,一般是gbase,需要客户自行创建。
由于安装过程中不需要root密码,所以gbase用户也需要用户自己创建,设置密码,然后再安装。
安装目录,由于没有root权限,需要用户自行创建,并且确保gbase用户有完全的权限。
安装、升级等集群操作期间,需要用dbaUser进行远程登陆,需要系统允许。如有安全申请,请提前加入备案或过滤条件。

从V8升级时,仍然需要root密码。

设置环境要求部分SetSysEnv.py需要root运行一次。
去除 service gcware start/stop/restart/status 命令以及相关配置或启劢文件,如
/etc/init.d/gcware
/etc/monit.d/gcware.conf
/etc/init.d/gclusterd
/etc/init.d/gbased
/etc/init.d/gcrecover
/etc/init.d/gcsync
/etc/init.d/gcware
/etc/init.d/corosync


2、服务启动命令变动
操作系统gbase用户运行
gcluster_service all start


开机自启动需要用户自行配置,因为需要root用户权限操作。


3、在线节点替换
管理节点,依然要复制全部元数据,和以前耗时相同。
数据节点,由以前V8的复制元数据,通过event进行同步的方案,变成修改distrobution的主备策略,然后通过rebalance重分布的方式进行。可以更好的控制恢复期间的资源使用。
管理和数据共机时,要分别做管理和数据替换,操作2次。


增加参数
gcluster_mode_wait
集群安装完毕,默认值为1,1—表示节点替换过程中出现写操作时无限等待,0—表示节点替换过程中出现写操作报错退出。
gcluster_mode_checkinterval
全在线节点替换参数。当gcluster_mode_wait为1时此参数生效,为检测时间间隔。单位分钟,默认5分钟。该参数的取值是最小值5,最大值30。


4、新增清理某个节点的所有event
gcadmin rmfeventlog ip : remove all feventlog about ip


5、支持utf8mb4字符集(862B43开始)
用于处理生僻字,和GB18030字符集用途一样。
gbase> create table tmb4(id int,name varchar(100))charset=utf8mb4;
Query OK, 0 rows affected (Elapsed: 00:00:00.46)


gbase> show create table tmb4;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tmb4 | CREATE TABLE "tmb4" (
"id" int(11) DEFAULT NULL,
"name" varchar(100) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8mb4 TABLESPACE='sys_tablespace' |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)


gbase>


6、group_concat支持超过32K
gbase> show variables like '%concat%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| group_concat_max_len | 1024 |
+----------------------+-------+
1 row in set (Elapsed: 00:00:00.00)


gbase> set group_concat_max_len=102400;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)


gbase> set group_concat_max_len=1024000;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)


gbase> show variables like '%concat%';
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| group_concat_max_len | 1024000 |
+----------------------+---------+
1 row in set (Elapsed: 00:00:00.00)


7、group_concat支持over 语法
gbase> select * from t2;
+------+------+
| id | name |
+------+------+
| 1 | 1234 |
| 2 | 2222 |
| 1 | 1333 |
| 2 | 2333 |
+------+------+
4 rows in set (Elapsed: 00:00:00.01)


标准的group_concat
gbase> select group_concat(name order by name) from t2 group by id;
+----------------------------------+
| group_concat(name order by name) |
+----------------------------------+
| 1234,1333 |
| 2222,2333 |
+----------------------------------+
2 rows in set (Elapsed: 00:00:00.07)


带OVER
gbase> select group_concat(name) over(partition by id order by name) from t2;
+--------------------------------------------------------+
| group_concat(name) over(partition by id order by name) |
+--------------------------------------------------------+
| 1234 |
| 1234,1333 |
| 2222 |
| 2222,2333 |
+--------------------------------------------------------+
4 rows in set (Elapsed: 00:00:00.32)


gbase> select id,name,
group_concat(name) over(partition by id order by name) a,
row_number()over(partition by id order by name) n
from t2
order by id,n;
+------+------+-----------+---+
| id | name | a | n |
+------+------+-----------+---+
| 1 | 1234 | 1234 | 1 |
| 1 | 1333 | 1234,1333 | 2 |
| 2 | 2222 | 2222 | 1 |
| 2 | 2333 | 2222,2333 | 2 |
+------+------+-----------+---+
4 rows in set (Elapsed: 00:00:00.33)


8、支持int数值直接like模糊匹配
gbase> create table t1(id int);
Query OK, 0 rows affected (Elapsed: 00:00:00.17)


gbase> insert into t1 values(1),(12344);
Query OK, 2 rows affected (Elapsed: 00:00:00.28)
Records: 2 Duplicates: 0 Warnings: 0


gbase> select * from t1 where id like '%3%';
+-------+
| id |
+-------+
| 12344 |
+-------+
1 row in set (Elapsed: 00:00:00.01)




9、日期相减不足一天的部分,从返回0改成返回小数(862B43开始)
gbase> create table td(a datetime);
Query OK, 0 rows affected (Elapsed: 00:00:00.09)


gbase> insert into td values('2020-03-04 08:00;00');
Query OK, 1 row affected (Elapsed: 00:00:00.32)


gbase> select now(),now()-a, datediff(now(),a) from td;
+---------------------+-------------+-------------------+
| now() | now()-a | datediff(now(),a) |
+---------------------+-------------+-------------------+
| 2020-03-04 08:14:15 | 0.009895833 | 0 |
+---------------------+-------------+-------------------+
1 row in set (Elapsed: 00:00:00.00)


如需要判断日期差距,请使用datediff函数,而不是直接想减。




10、支持表空间
gbase> create tablespace aaa datadir '/opt/data' segsize 16M maxsize 1G;
Query OK, 0 rows affected (Elapsed: 00:00:00.06)


gbase> create table t1_data(id int) tablespace='aaa';
Query OK, 0 rows affected (Elapsed: 00:00:00.05)


11、支持分区(range,list,key,hash)
create tabble t1(id int)partition by range(id)(
partition p1 values less than 10,
partition p2 valeus less than 20,
partition pother values less than maxvalue
);
create table t2 (id int) partition by list(id)(
partition a values in (1,3,5,7),
partition b values in (2,4,6,8)
);


12、表锁争抢改成排队
多个session对同一个表做锁操作,不再像86那样一起争抢,而是采用队列形式FIFO.避免了饿死的情况。


13、集群状态不再支持LOCK
即使一般管理节点OFFLINE/CLOSE,集群状态依然会NORMAL。 调用的SQL会卡住在获取集群状态(与gcware通讯),需要用户自行根据超时情况判定集群异常。


14、审计日志归档的event默认不可用
由于集群VC安装后【直接】创建distribution时,或者从V8升级时,系统默认创建了VC00001的虚拟集群编号。
而审计归档event是在安装包里内置的,默认是VC00000, 需要用户根据使用VC的情况(包括和V8兼容),更改event的数据。
update gbase.event set vc_id='vc00001' where name='import_audit_log';
其中的vc00001要根据你的vc情况决定。如有多个VC,需要自行创建各自的归档event。




15、虚拟集群和镜像集群
请参考用户手册。 如继续使用V8方式兼容的集群,无需关心这部分。


16、多列Hash表
为了解决单列数据严重倾斜问题。但也要求参与group,join的列必须【全部】出现,否则失效。
理论上hash列可以支持2000个,和表相同,但由于元数据表table_distribution的Hash_column的定义是4096,所以不能超过这个最大值。
gbase> create table t3(id int, name varchar(20)) distributed by ('id','name');
Query OK, 0 rows affected (Elapsed: 00:00:00.07)


gbase> show create table t3;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t3 | CREATE TABLE "t3" (
"id" int(11) DEFAULT NULL,
"name" varchar(20) DEFAULT NULL
) ENGINE=EXPRESS DISTRIBUTED BY('id','name') DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)


17、自增列
只保证自增,但不保证连续。默认自增列不允许load,insert,update等操作。


有参数可以打开自增列的可变动状态,但将由用户保证数据唯一。


gbase> create table t4(id int primary key auto_increment not null, name varchar(100));
Query OK, 0 rows affected (Elapsed: 00:00:00.09)


gbase> show create table t4;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t4 | CREATE TABLE "t4" (
"id" int(11) NOT NULL AUTO_INCREMENT,
"name" varchar(100) DEFAULT NULL,
PRIMARY KEY ("id")
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)


gbase> insert into t4 values(1,'123');
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: auto-increment column should not be specified in insert(...)


gbase> insert into t4(name) values('111111'),(2222),(333),(44);
Query OK, 4 rows affected (Elapsed: 00:00:00.32)
Records: 4 Duplicates: 0 Warnings: 0


gbase> select * from t4;
+----+--------+
| id | name |
+----+--------+
| 1 | 111111 |
| 2 | 2222 |
| 3 | 333 |
| 4 | 44 |
+----+--------+
4 rows in set (Elapsed: 00:00:00.00)


gbase> update t4 set id=3 where id=2;
ERROR 1235 (42000): This version of GBase doesn't yet support 'update/merge on auto_increment column'
gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.102/home/gbase/t4' into table t4;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Task 1035 failed, [10.0.2.102:5050](GBA-02AD-0005)Failed to query in gnode:
DETAIL: Auto increment column 'id' should not be specified in loader.
SQL: LOAD /*+ TID('65635') */ DATA INFILE 'sftp://gbase:*********@10.0.2.102/home/gbase/t4#offset=0&length=51&firstblock&ffsize=51' INTO TABLE `testdb`.`t4_n1` DATA_FORMAT 3 FILE_FORMAT UNDEFINED HOST '10.0.2.102' CURRENT_TIMESTAMP 1583283005 SCN_NUMBER 1035 GCLUSTER_PORT 5258 INTO SERVER (HOST '10.0.2.102', PORT '5050', USER
gbase>


如下参数可以打开自增列的可变动状态,包括load,insert,update。


gbase> show variables like '%allow_insert%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| _gbase_auto_increment_allow_insert | OFF |
+------------------------------------+-------+
1 row in set (Elapsed: 00:00:00.01)


gbase> set _gbase_auto_increment_allow_insert=1;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)


手工插入重复数据
gbase> insert into t4 values(1,'123');
Query OK, 1 row affected (Elapsed: 00:00:00.32)


gbase> select * from t4;
+----+--------+
| id | name |
+----+--------+
| 1 | 111111 |
| 2 | 2222 |
| 3 | 333 |
| 4 | 44 |
| 1 | 123 |
+----+--------+
5 rows in set (Elapsed: 00:00:00.01)


gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.102/home/gbase/t4' into table t4 fields terminated by '\t';
Query OK, 5 rows affected (Elapsed: 00:00:01.22)
Task 1038 finished, Loaded 5 records, Skipped 0 records


gbase> select * from t4;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 111111 |
| 2 | 2222 |
| 3 | 333 |
| 4 | 44 |
| 1 | 123 |
| 1 | 99999999 |
| 2 | 699999998 |
| 1 | 99999999 |
| 2 | 699999998 |
| 1 | 10 |
+----+-----------+
10 rows in set (Elapsed: 00:00:00.01)
gbase> update t4 set id=5 where name='10';
Query OK, 1 row affected (Elapsed: 00:00:00.32)
Rows matched: 1 Changed: 1 Warnings: 0


gbase> select * from t4;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 111111 |
| 2 | 2222 |
| 3 | 333 |
| 4 | 44 |
| 1 | 123 |
| 1 | 99999999 |
| 2 | 699999998 |
| 1 | 99999999 |
| 2 | 699999998 |
| 5 | 10 |
+----+-----------+
10 rows in set (Elapsed: 00:00:00.00)


18、事务
详情看用户手册。
但从项目角度讲,依然不建议大量使用,毕竟这不是个【事务型】数据库。
已知对小文件加载,比如每次几行,几十行,数据几十K,但表很多时,开启事务会提升加载性能。


19、支持GB18030字符集(862B43开始)
可以解决一些生僻汉字的问题
gbase> create table t5(id int) charset='gb18030';
Query OK, 0 rows affected (Elapsed: 00:00:00.08)


gbase> show create table t5;
+-------+----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------+
| t5 | CREATE TABLE "t5" (
"id" int(11) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=gb18030 TABLESPACE='sys_tablespace' |
+-------+----------------------------------------------------------------------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)




发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注