昆仑分布式数据库独特的变量读写功能介绍

2022-01-12 00:00:00 数据库 支持 变量 节点 计算
前言

几周之前在Meetup中说到昆仑分布式数据库的架构的一些特点,因此,有朋友好奇昆仑分布式数据库计算节点如何支持读写存储节点中的变量。


本篇文章就来阐述说明下



功能详细介绍

1. 使set [shard] global/session/local/PERSIST/PERSIST_only VARNAME=VALUE
的语法生效;总是假设VARNAME是MySQL的;计算节点会发送SET语句给所有的存储节点去执行,且在一个session的生命期当中,所有设置过的session 变量的值会在计算节点的session里面缓存

在切换存储集群主节点后,新的主节点会使用缓存的session变量值设置给新的存储集群主节点,确保一致的会话(连接)状态。
set session innodb_lock_wait_timeout = 3;



设置全局变量:
set global innodb_lock_wait_timeout = 4; set persist_only innodb_lock_wait_timeout = 11;

2.set VARNAME=VALUE 语句,在PostgreSQL客户端连接的时候会默认以PostgreSQL的变量名来看待他们,如果变量名不存在,则会把他们看成是MySQL的session变量。在客户端MySQL连接时,会默认把他们视为MySQL的session变量,如果变量名不存在则把他们视为PostgreSQL变量。
set innodb_lock_wait_timeout = 2;


3. 计算节点会缓存MySQL配对的session var-value,且如果shard连接被重新设置或者重新连接,计算节点会把缓存的变量发送给MySQL节点。
 
4. 也支持set @@global/session/local/persist/persist_only.varname=value
语句,且总是假定为MySQL变量,因为只有MySQL有这样的SET语法。但因shift/reduce冲突而不支持set @@VARNAME=VALUE。

set @@global.innodb_lock_wait_timeout = 4;


 
set @@innodb_lock_wait_timeout = 2;
(不支持该语法)


5. 支持show [session/local/global] variables like 'wildcard-filter语法且总是假定是MySQL变量,因为MySQL才有这样的语法,PostgreSQL没有。对于show varname语法总是先假定是PostgreSQL变量。如果变量名不是PostgreSQL变量,则被假定是MySQL变量。

show global variables like 'innodb_lock_wait_timeout'


show session variables like 'innodb_lock_wait_timeout';


show local variables like 'innodb_lock_wait_timeout';

 
6. 支持在Kunlun计算节点里面的选项show [session/global/local] variables like里选择 STRICT来展示只有计算节点允许访问的MySQL变量。

show local variables like 'innodb_lock_wait_timeout' strict;


show session variables like 'innodb_lock_wait_timeout' strict;


show global variables like 'innodb_lock_wait_timeout' strict;

 
7. 当执行show语句时会取得一个变量的值,直接发送给任意存储shard来获取他的值。


总结

昆仑分布式数据库的计算节点支持读写存储节点的系统变量,可以给用户带来很大的便利。

例如,用户可以在计算节点的连接中执行一个set global var=value;语句,来设置所有后端集群的var变量的值为value。也可以通过在计算节点执行一个set session var=value;就把当前会话(连接)中的var变量的值设置为value。

这部分功能的对应测试脚本从https://gitee.com/zettadb/kunlun.git 上面拉下来,在src/test/regression/sql/vars.sql 中,这些测例也展示了MyQL变量访问的功能。

点击阅读原文

推荐阅读

KunlunBase架构介绍
KunlunBase技术优势介绍
KunlunBase技术特点介绍
KunlunBase集群基本概念介绍

END

昆仑数据库是一个HTAP NewSQL分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。
应用开发者和DBA的使用昆仑数据库的体验与单机MySQL和单机PostgreSQL几乎完全相同,因为首先昆仑数据库支持PostgreSQL和MySQL双协议,支持标准SQL:2011的 DML 语法和功能以及PostgreSQL和MySQL对标准 SQL的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需DBA人工介入,不停服不影响业务正常运行。
昆仑数据库具备全面的OLAP 数据分析能力,通过了TPC-H和TPC-DS标准测试集,可以实时分析新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与docker,k8s等云基础设施无缝协作,可以轻松搭建云数据库服务。
请访问 http://www.kunlunbase.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。
KunlunBase项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb

相关文章