腾讯云TDSQL MySQL版 -使用常见问题

如何选择实例规格?
使用 TDSQL MySQL版 做功能性测试,且对性能没有特别要求:2个分片,每个分片配置为:内存/磁盘:2GB/25GB。
业务发展初期,总数据规模较小但增长快的选型:2个分片,每个分片配置为:内存/磁盘:16GB/200GB。
业务发展稳定,根据业务实际情况选型:4个分片,每个分片配置等于:当前业务峰值 * 增长率 / 4。
更多关于实例规格,请参见 TDSQL MySQL版 实例及分片配置。
TDSQL MySQL版 与 传统 MySQL 语法之间的区别有哪些?
TDSQL MySQL版 目前版本不能通过命令行进行用户权限相关的设置,需要登录 控制台 进行操作。
TDSQL MySQL版 目前版本暂不支持自定义函数、视图、触发器、外键等特性。
对 MySQL 的语法兼容详情,请参见 使用限制。
分表键有何作用?
使用分表,在执行操作 select 时,建议带上 shardkey 字段,proxy 根据该字段的 hash 值直接将 SQL 请求路由至对应的数据库实例进行处理;否则就需要发送给集群中所有的数据库实例执行,然后 proxy 根据数据库返回的结果集进行聚合,影响执行效率。
使用分表,在执行操作 insert/replace 时,字段必须包含 shardkey,否则会拒绝执行该 SQL,因为 proxy 不知道将该 SQL 发往哪个后端数据库。
使用分表,在执行操作 delete/update 时,为安全考虑,执行该类 SQL 时,必须带有 where 条件,否则拒绝执行该 SQL 命令。
如何选择分表键?
分表键是在水平拆分过程中用于生成拆分规则的数据表字段,必须在建表时指定好。TDSQL MySQL版 建议分表键尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都围绕这个主体的数据进行,方可使用该主体对应的字段作为拆分键,进行分表(该分表方案名为 Group-Shard)。如下图所示:
按组分表方案可以确保不同分表的某些关联数据和复杂的业务逻辑运算,可以聚合到一个物理分片内。例如,某电商平台订单表和用户表都是基于用户维度(UserID)拆分,平台就很容易通过联合查询(不会存在跨节点 join,或分布式事务)快速计算某个用户近期产生了多少订单。
一些典型选择拆分键的应用场景如下:
【腾讯云TDSQL MySQL版 -使用常见问题】面向用户的互联网应用,是围绕用户维度来做各种操作,那么业务逻辑主体就是用户,可使用用户对应的字段作为拆分键。
电商应用或 O2O 应用,是围绕卖家/买家维度来进行各种操作,那么业务逻辑主体就是卖家/买家,可使用卖家/买家对应的字段作为拆分键。但请注意,某些情况下几个超大卖家占到绝大多数交易额,会导致某几个分片的负载和压力明显高于其他分片。
游戏类的应用,是围绕玩家维度来做各种操作,那么业务逻辑主体就是玩家,可使用玩家对应的字段作为拆分键。
物联网方面的应用,则是基于物联信息进行操作,那么业务逻辑主体就是传感器/SIM 卡,可使用传感器、独立设备、SIM 卡的 IMEI 作为对应的字段作为拆分键。
税务/工商类/社保的应用,主要是基于纳税人/法定代表人/居民的信息来开展前台业务,那么业务逻辑主体就是纳税人/法定代表人,可使用纳税人/法定代表人对应的字段作为拆分键。
以此类推,其它类型的应用场景,大多也能找到合适的业务逻辑主体作为拆分键的选择。但需要注意在选择分表键时有一定限制,详情参见 分表键选择限制。
分表键能否更换?
一旦选择好分区字段(shardkey),就不能轻易更改。若需要修改一个表的分区字段,只能新建一个表。
若需要修改一个分表某一行中的 shardkey 值,需要先 insert 再 delete。直接操作 update 不能修改分区字段的值。

    推荐阅读