兼容大多数常用的 MySQL 语法
包括 MySQL 的语言结构、字符集和时区、数据类型、常用函数、预处理协议、排序、联合(join)、存储过程、索引、分区、事务、预处理协议、控制指令、等常用的 DDL、DML、DCL 和数据库访问接口。
支持(分布式)事务
通过两段提交的方式支持分布式事务,支持诸如转账、出单、支付等场景;跨节点事务性能约为单节点的 70%,高于开源分布式事务 XA 约 56%。目前仅开放 MySQL 5.7支持该能力。
支持(分布式)JOIN
TDSQL 支持多个物理节点之间的 JOIN(联合查询)操作,即分布式 JOIN。如果 JOIN 相关的表有 shardkey 相等条件,由于分表的一致性原则,会让这部分数据自动存储到同一物理节点,此时相当于单机 JOIN,性能最好。如果涉及到跨物理节点数据,此时 proxy 会先从其他节点拉取数据并缓存,由于涉及到网络数据传输,性能会损失。
支持JSON
TDSQL 支持存储 JSON 格式的数据,使得对 JSON处理更加有效,同时又能提早检查错误;如果您既希望使用 JSON类型,又对数据一致性,事务,JOIN 等传统数据库具备的能力也有一定要求的话,TDSQL 将是一个很好的选择,当然 TDSQL 的 JSON 是基于 MySQL 与 Mongodb 的使用仍有一些差异,如果您感兴趣,可以阅读 TDSQL 与 MongoDB 的 JSON 能力对比。
三种建表策略
分表:即水平拆分的表,通常适用于表规模大于 2000 万行、大于 50GB,且快速增长的表;
广播表:即所有操作都将广播到所有逻辑分片(Shard)中,这意味着每个分片都有该表的全量数据,通常适用于配置表,或需要频繁 JOIN 的表,该类表数据更新相对较少,广播表可以两个表的联合查询(JOIN)、事务收敛到单节点中,以提高性能;
单表:一些无需分片的表,通常适用于数据量较小的库表;由于单表并未拆分,这意味着单表使用完全兼容 MySQL。
全局唯一数字序列
与 AUTO_INCREMENT 类似。自增长序列为用户提供一个全局唯一数字 ID 服务,实现分布式环境下唯一键、主键等数据的全局唯一性。
透传命令
支持通过注释方式(hint)将 SQL 透传到指定目标分片,以提高性能和操作灵活性。
二级分区
在分表的基础上,还支持分区表方案。即在水平拆分的表,再支持一层逻辑分区。