MAGMA实时表#

MAGMA实时表是对于有主键约束的MAGMA表的一种增删改的优化。 对于有主键的列进行增删改,只要能确定主键的数值,我们就能直接确定主键所在的存储节点的位置 (目前MAGMA表中主键必须包含分布列,所以确定了主键就能确定分布列), 于是可以将请求直接发往相应的存储节点执行,降低增删改语句的执行开销。

所以MAGMA实时表必须指定主键,进行增删改的数据也必须指定主键。

MAGMA实时表,通过统一的insert语法,将upsert(update or insert)与delete统一集成到insert语法中, 在内核中实现了不同类型的dml语句处理。

在语法上,用户需要通过realtime_op字段,指明当前的操作类型; realtime_op隐藏操作列出现在用户列的最后一列。

实时表建表语句中要用with选项指明realtime=true, 并且指定TABLESPACE为magma_default(表示建立MAGMA表), 并且表中必须含有主键。

-- 建表语法 DDL (在 Oushudb 中创建 magma 实时表)
CREATE TABLE t_realtime_target(id int primary key, name text, age int)
WITH(realtime=true) TABLESPACE magma_default;

MAGMA实时表进行upsert时,要在insert语句中指定操作类型为’R’或者’r’ (表示insert or replace on conflict)。

-- upsert语法
-- insert全列数据,并设置操作类型为‘R'或者’r'
INSERT INTO t_realtime_target VALUES (1, 'aaa', 18, 'R');

MAGMA实时表进行delete时,要在delete语句中指定操作类型为’D’或者’d’, 并且主键列的数值必须设置,其他非主键列设置为null即可。

-- delete语法 dml, 必须设置主键,其他非主键用户表字段设为null即可,并设置操作类型为‘D'或者’d'
INSERT INTO t_realtime_target VALUES (1, null, null, 'D');