Gaea兼容范围

协议兼容性

Gaea支持text协议和binary协议.

SQL兼容性

Gaea对分表和非分表的兼容性有所不同. 非分表理论上支持所有DML语句, 部分ADMIN语句.

对分表情况, Gaea本身的定位是轻量级, 高性能, 因此采用轻量的分表实现方式, 对一条SQL的执行, 只做字段改写和结果聚合, 不做SQL语义上的改写和多条SQL结果集的拼接计算.

以下支持/不支持操作均指分表情况.

SELECT

明确支持以下操作:

  • JOIN操作支持一个父表和多个关联子表, 以及全局表.
  • 聚合函数支持SUM, MAX, MIN, COUNT, 且必须出现在最外层.
  • WHERE语句的条件支持AND, OR, 操作符支持=, >, >=, <, <=, <=>, IN, NOT IN, LIKE, NOT LIKE.
  • 支持GROUP BY.

明确不支持以下操作:

  • 不支持跨分片JOIN. JOIN中非分片键相关的条件, 只改写表名, 不计算路由, 走默认的广播路由.
  • JOIN USING不支持指定表名或DB名.
  • 表别名不允许与表名重复.
    • select animals.id from animals, test1.xm_order_extend as animals;
    • 这句SQL在MySQL中被认为是正确的, 但是gaea会明确拒绝这种操作.

INSERT

明确不支持以下操作:

  • 不明确指定列名的INSERT
  • 跨分片批量INSERT
  • INSERT INTO SELECT

UPDATE

明确不支持以下操作:

  • UPDATE多个表

事务兼容性

  • Gaea目前未实现分布式事务, 只支持单分片事务, 使用跨分片事务会报错.
  • 不支持SAVEPOINT, RELEASE SAVEPOINT, ROLLBACK TO SAVEPOINT TODO