概述

最近更新时间:2020-08-18 15:57:44

在 SQL 使用上,分布式实例高度兼容 MySQL 的协议和语法,但由于架构的差异,对于 SQL 有一定的限制,同时为了更好地发挥分布式的优势,建议业务在使用时尽量参考下文的建议。

分布式实例提供水平扩容能力,适合海量数据的场景。具有如下功能特性:

  • 提供了灵活的读写分离模式
  • 支持全局的 order by、group by、limit 操作
  • 聚合函数支持 sum、count、avg、min、max 等
  • 支持跨节点(set)的 join、子查询
  • 支持预处理协议
  • 支持全局唯一字段,支持 sequence
  • 支持分布式事务
  • 支持两级分区
  • 提供特定的 SQL 查询整个集群的配置和状态

分布式实例支持三种不同类型的表:

  • 分表:即水平拆分表,该表从业务视角是一张完整的逻辑表,但后端根据分表键(shardkey)的 HASH 值将数据分布到不同的节点(set)中。
  • 单表:又名 Noshard 表,无需拆分,且没有做任何特殊处理的表,目前分布式实例将该表默认存放在第一个物理节点组(set)中。
  • 广播表:又名小表广播技术,即设置为广播表后,该表的所有操作都将广播到所有节点(set)中,每个 set 都有该表的全量数据,常用于业务系统的配置表等。
注意:

  • 在分布式实例中,如果两张表分表键相等,这意味着,两张表相同的分表键对应的行,一定存储于相同的物理节点组中。这种场景通常被称为组拆分(groupshard),会极大提高业务联合查询等语句的处理效率。
  • 由于单表默认放置在第一个 set 上,如果在分布式实例中建立了大量的单表,则会导致第一个 set 的负载太大。
  • 除特殊情况外,建议在分布式实例中尽量都使用分表。