使用限制
由于StoneDB是在原生的MySQL中加入的存储引擎,因此是高度兼容MySQL 5.6、5.7协议和MySQL生态等重要特性,支持MySQL常用的功能及语法,但由于StoneDB本身的一些特性,部分操作和功能尚未得到支持,以下列出的是不兼容MySQL的操作和功能。
不支持的DDL
修改字段的数据类型
修改字段的长度
修改表/字段的字符集
转换表的字符集
optimize table
analyze table
lock table
repair table
CTAS
重组表
重命名字段
设置字段的默认值
设置字段为空
设置字段非空
添加唯一约束
删除唯一约束
创建索引
删除索引
表修改注释
StoneDB是列式存储,数据是被高度压缩的,因此表和列的相关属性不易被修改,在表设计阶段尽可能定义好字符集、数据类型、约束和索引等。
不支持的DML
delete
update关联子查询
update多表关联
replace into
StoneDB不适用于有频繁的更新操作,因为对列式存储来说,更新需要找到对应的每一列,然后分多次更新,而行式存储由于一行紧挨着一行,找到对应的page或者block就可直接在行上更新,因此StoneDB只支持了常规用的单表update和insert。
不支持跨存储引擎关联查询
StoneDB默认不支持跨存储引擎关联查询,也就是说InnoDB存储引擎下的表和StoneDB存储引擎下的表进行关联查询会报错。可在stonedb.cnf参数文件里定义stonedb_ini_allowmysqlquerypath=1,这样就支持跨存储引擎表之间的关联查询了。
不支持的对象
全文索引
唯一约束
触发器
临时表
含有自定义函数的存储过程
含有SQL的自定义函数
不支持的数据类型
位类型bit
枚举型enum
集合型set
json类型
decimal精度必须小于或等于18,否则不支持,如decimal(18,x)
创建表时不支持使用关键字unsigned、zerofill
不支持事务
只有严格遵守ACID四大属性,才能真正的支持事务。而StoneDB由于没有redo和undo,是不支持事务的。
不支持分区
列式存储不支持分区。
不支持行锁、表锁
列式存储不支持行锁、表锁。
只支持statement的binlog格式
列式存储不支持row、mixed格式的binlog。