常见问题

最近更新时间:2019-08-27 15:11:02

如何选择实例规格?

  • 使用 TDSQL 做功能性测试,且对性能没有特别要求:2个分片,每个分片配置为:内存/磁盘:2GB/25GB。
  • 业务发展初期,总数据规模较小但增长快的选型:2个分片,每个分片配置为:内存/磁盘:16GB/200GB。
  • 业务发展稳定,根据业务实际情况选型:4个分片,每个分片配置等于:当前业务峰值 * 增长率 / 4。
    更多关于实例规格的详情,请参见 TDSQL 实例及分片配置

TDSQL 语法和 MySQL 的兼容和限制有哪些?

TDSQL 目前版本不能通过命令行进行用户权限相关的设置,需要登录腾讯云管理中心进行网页操作。
TDSQL 目前版本对自定义函数、视图、触发器、外键、子查询等特性暂不支持。
对 MySQL 的语法兼容详情,请参见 使用限制

分表键有何作用?

使用分表时,在执行操作 select 时最好带上分表键(shardkey),路由将自动跳转到对应分片,效率较高。若没带上亦可执行,但系统将自动全表扫描,效率较低。
使用分表时,在执行操作 insert/replace 或 delete/update 时必须包含 shardkey,否则会拒绝执行操作。执行操作 insert/replace 需要指定 shardkey,指明将数据插入的物理分片位置。执行操作 delete/update 需要指明 shardkey,作为验证,避免误删。

如何选择分表键?

分表键是在水平拆分过程中用于生成拆分规则的数据表字段,必须在建表时就指定好。TDSQL 建议分表键尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都围绕这个主体的数据进行,方可使用该主体对应的字段作为拆分键,进行分表(该分表方案名为 Group-Shard)。如下图所示:

按组分表方案可以确保不同分表的某些关联数据和复杂的业务逻辑运算,可以聚合到一个物理分片内。例如,某电商平台订单表和用户表都是基于用户维度(UserID)拆分,平台就很容易通过联合查询(不会存在跨节点 join,或分布式事务)快速计算某个用户近期产生了多少订单。

一些典型选择拆分键的应用场景如下:

  • 面向用户的互联网应用,是围绕用户维度来做各种操作,那么业务逻辑主体就是用户,可使用用户对应的字段作为拆分键。
  • 电商应用或 O2O 应用,是围绕卖家/买家维度来进行各种操作,那么业务逻辑主体就是卖家/买家,可使用卖家/买家对应的字段作为拆分键。但请注意,某些情况下几个超大卖家占到绝大多数交易额,会导致某几个分片的负载和压力明显高于其他分片。
  • 游戏类的应用,是围绕玩家维度来做各种操作,那么业务逻辑主体就是玩家,可使用玩家对应的字段作为拆分键。
  • 物联网方面的应用,则是基于物联信息进行操作,那么业务逻辑主体就是传感器/ SIM 卡,可使用传感器、独立设备、SIM 卡的 IMEI 作为对应的字段作为拆分键。
  • 税务/工商类/社保的应用,主要是基于纳税人/法定代表人/居民的信息来开展前台业务,那么业务逻辑主体就是纳税人/法定代表人,可使用纳税人/法定代表人对应的字段作为拆分键。
  • 以此类推,其它类型的应用场景,大多也能找到合适的业务逻辑主体作为拆分键的选择。但需要注意在选择分表键时有一定限制,详情参见 分表键选择限制

分表键是否能更换?

一旦选择好分区字段(shardkey),就不能轻易更改。若需要修改一个表的分区字段,只能新建一个表。
若需要修改一个分表某一行中的 shardkey 值,需要先 insert 再 delete。直接操作 update 不能修改分区字段的值。

是否支持分布式 JOIN 和 TRANSACTION?

TDSQL 目前只支持单个分表键下的 JOIN 和 TRANSACTION,以及跨节点的 TRANSACTION,跨节点的 JOIN 暂不支持。