选型背景
用于产品业务相关数据存储,兼容mysql,支持弹性自动水平扩容(实际上是因为接手的时候,已经用了这种数据库)TDSQL for MySQL。
实际使用情况
优点
- 弹性伸缩:由于我们的系统用户量比较小,还没体会到TDSQL各种牛B的能力,唯一使用比较多的能力就是支持在线缩容,为了节省成本。
缺点
我们选择的是TDSQL MySQL版 InnoDB引擎,与原生的mysql有一些语法上的不兼容,例如常见的
代码语言:txt复制DDL
不支持 CREATE TABLE ... SELECT
不支持 CREATE TEMPORARY TABLE
不支持 CREATE/DROP/ALTER SERVER/LOGFILE GROUP
不支持 ALTER 对分表键(shardkey)进行改名,但可以修改类型
不支持 RENAME
官方给出的使用限制文档。
但除了这些还有一些我们踩的坑, 我们使用的版本是mysql 8.0.18,mysql 从8.0.17开始就支持了json的多值索引,多值索引旨在为JSON数组建立索引,但tdsql却不支持,官方文档也没说明。
会出现如下报错:
代码语言:txt复制CREATE TABLE customers (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
custinfo JSON,
INDEX zips( (CAST(custinfo->'$.zipcode' AS UNSIGNED ARRAY)) )
);
报错信息:CREATE TABLE customers (
-> id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-> custinfo JSON,
-> INDEX zips( (CAST(custinfo->'$.zipcode' AS UNSIGNED ARRAY)) )
-> );
ERROR 1064 (HY000): Proxy ERROR: You have an error in your SQL syntax; check the manual that corresponds to your Mysql server version for the right syntax to use near '(CAST(custinfo->'$.zipcode' AS UNSIGNED ARRAY)) )
)' at line 5
总结
在选型数据库时,尽量选择兼容云原生的数据库,一些自研的产品在使用过程中出现了问题,很难排查原因只能找腾讯云去帮忙协助,通常排查周期会比较长,如果在让我选一次,我会选择使用完全兼容云原生的 “TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库”,详见:https://cloud.tencent.com/document/product/1003/30488