跨引擎读写分离
当一个数据模型同时大量读、写操作并发执行时,读写操作互相影响,会加剧对锁的竞争,导致整体性能下降。通过在GBase UP中引入引擎级别的读写分离机制,可以极大地缓解并发读写对锁的竞争,从而提高并发性能。引擎级别读写分离的基本原理是,GBase UP作为统一的访问入口,对读写请求进行调度,事务性操作(INSERT、UPDATE和DELETE)在GBase 8t上执行,SELECT查询关键是分析型计算在GBase 8a上执行,以充分利用GBase 8t和GBase 8a各自的优点。
代码示意:
-- 创建镜像表,镜像方向为GBase8t到GBase 8a MPP
Create table t(...) engine=‘Mirror8t8a’;
-- 写操作用8t引擎
Insert into t values(…);
-- 分析型查询用8a引擎
Select avg(…) from t group by …;
查询操作指向到8a的方式有两种:自动识别,根据语句中函数的类型,如OLAP函数;手动识别,用户session级变量和hint级变量,影响到语句的执行引擎。
数据生命周期管理
数据在各生命周期有不同的处理要求,尤其是时间序列数据,其业务场景常常是初期集中于OLTP,中期用于OLAP,后期很少使用,只是偶尔用于历史数据分析,整体呈现热、温、冷三种典型的处理模型,从存储成本和计算特征考虑,不同时期的数据采用不同的引擎存储。
最常见的一种情况,最近生成的数据会被频繁使用和修改,将其存放在GBase 8t中,将近期生成但不再更新的数据放在GBase 8a中,将历史数据放在Hive中。用户通过SQL透明读写,而GBase UP按照设定的数据迁移策略后台自动透明的高效迁移。
代码示意: 创建分区表,按热、温、冷分别存储在三个数据引擎
Create table t_part (…, in_date date) partition by range(in_date)
(partition p_hive values less than (date_sub(current_date(),interval 1 month)) engine=‘Hive’,
partition p_8a values less than (date_sub(current_date(),interval 1 week)) engine=‘GBase8a’,
partition p_8t values less than MAXVALUE engine=‘GBase8t’);




