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');