TcaplusDB 版本在 3.57.1 之后兼容 MySQL 5.7 协议,支持 MySQL 的基本功能和语法。MySQL 生态的客户端驱动、工具均适用于 TcaplusDB。
兼容 MySQL 协议是 TcaplusDB 的新特性,目前支持的 SQL 功能有限,包括以下 7 个要点:
TcaplusDB 兼容 MySQL 5.7 协议,使用支持 MySQL 5.7 协议(包括 5.7)的客户端或者驱动皆可进行连接。
在实际使用中,可能存在不同版本的兼容差异,我们推荐使用 MySQL 5.0 以上 5.7(包括 5.7)以下的客户端或者驱动。经过我们测试,下述版本的客户端或驱动均可正常使用:
TcaplusDB 当前不支持通过 SQL 的方式动态建表,为了能够顺利进行示例体验,可以使用 XML 文件(如下面示例)进行表定义,通过 Tcaplus OMS 平台进行建表。
表定义示例:
<?xml version="1.0" encoding="GBK" standalone="yes" ?>
复制代码
预备工作:预先部署好 Tcaplus Local 版,注意需要使用 3.57.1 版本。
# step0,使用上述xml格式的表定义,保存为.xml后缀的文本,如table-define.xml。
# step1,进入OMS 页面,菜单栏处打开:业务管理=〉表管理。
# step2,页面Tab栏处,选中:表添加
# step3,选中业务和集群并勾选出来的游戏区, 集群:test_set(1), 业务:tdr_app(2), 游戏区ID: 3, 再点击:批量新增表
# step4,在出来的页面中,浏览页面底部部分,点击:从本地文件中添加,在弹出的页面中选择上述资源下载的示例表定义文件:table-define.xml
# step5,点击:提交,创建示例表: demo_table
# step6,查看表是否创建ok,进入:业务管理=>表管理,选择对应的业务(tdr_app)及游戏区(3), 查看是否出现demo_table表信息
复制代码
操作示例:
step1:

step2:

step3:

step4&5:

step6:

和标准 MySQL 使用一样,连接数据库需要提供用户名、密码、数据库名称、IP 以及端口号以上信息。
查看 Proxy 节点的 MySQL 连接地址,任意属于 'appid.zoneid' 的 proxy 都可以:

创建 MySQL 用户:
step0,打开对应业务的维护中心。

step1,创建用户,填写用户名和密码。

step2,联系运维审核通过,若当前操作者具有权限可以自己审核通过即可。

step3,给该用户赋予读写权限,这里赋予在该 app 下所有 zone 的读写权限。


说明:TcaplusDB 当前只支持 mysql_native_password 插件鉴权,同时也是 MySQL 5.7 的默认连接鉴权。
与连接 MySQL 一样,执行以下命令,使用 MySQL 的 client 工具即可连接 TcaplusDB 的 proxy
mysql -u user_name -p user_passwd --port=15755 --host=xxx.xxx.xxx.xxx 2.3
复制代码
兼容 MySQL 5.7 协议的 MySQL Driver 均可正常访问数据库。此处使用 .NET 5.0 和 MySQL Connector/NET 8.0.25 对初始化连接的过程进行演示。
public class Database
{
static MySqlConnection conn; // MySql连接
const String server = "xxx.xxx.xxx.xxx"; // 服务器地址,客户端要连接的 proxy 节点的 IP
const String port = "15755"; // 端口号,客户端要连接的 proxy 节点的 Port
const String uid = "user_name"; // 用户名
const String pw = "user_passwd"; // 密码
const String db = "2.3"; // 库名,由TcaplusDB中的业务ID和分区ID拼接而成
public static Boolean Init()
{
try
{
if (conn == null)
{
conn = new MySqlConnection("server=" + server + ";port=" + port + ";user id=" + uid + ";password=" + pw + ";database=" + db);
conn.Open();
Console.WriteLine("database connected.");
}
return true;
}
catch (Exception e)
{
Console.WriteLine("Exception caught: {0}", e);
return false;
}
}
}
复制代码
TcaplusDB 和 MySQL 数据类型对应关系
假设数据表 demo 共有 5 个字段:key1, key2, key3, value1, value2,其中,key1, key2 为 partkey,key1, key2, key3 组成 fullkey。
插入单条记录的 SQL 语句形式如下:
INSERT INTO demo (key1,key2,key3,value1,value2) values (x1,x2,x3,x4,x5);
复制代码
插入多条记录的 SQL 语句形式如下:
INSERT INTO demo (key1,key2,key3,value1,value2) values (x1,x2,x3,x4,x5); INSERT INTO demo (key1,key2,key3,value1,value2) values (x6,x7,x8,x9,x10);
复制代码
在未配置全局索引的情况下,where 子句由两部分组成:1、必选部分:partkey 或 fullkey;2、可选部分:过滤条件。
partkey 或 fullkey:只能进行等值查询,且组成 partkey 或 fullkey 的各个字段之间只能用 AND 连接;
过滤条件:支持 NOT、=、>、<、!=、>=、<=运算符,且多个过滤条件之间可以用 AND 或 OR 连接,支持 key 字段或 value 字段。
1、使用 fullkey 进行删改查时的 where 子句形式如下:
WHERE key1=x1 AND key2=x2 AND key3=x3;
复制代码
2、使用 fullkey+过滤条件进行删改查时的 where 子句形式如下,若过滤条件中包含 OR 运算符,则必须对过滤条件加括号:
WHERE key1=x1 AND key2=x2 AND key3=x3 AND (过滤条件);
复制代码
3、使用 partkey 进行删改查时的 where 子句形式如下:
WHERE key1=x1 AND key2=x2;
复制代码
4、使用 partkey+过滤条件进行删改查时的 where 子句形式如下,若过滤条件中包含 OR 运算符,则必须对过滤条件加括号:
WHERE key1=x1 AND key2=x2 AND (过滤条件);
复制代码
当 where 子句中的必选部分为 partkey 时,where 子句的执行结果可能是多条记录。
1、通过 fullkey 删除单条记录时,SQL 语句有以下两种形式:
DELETE FROM demo WHERE key1=x1 AND key2=x2 AND key3=x3;
DELETE FROM demo WHERE key1=x1 AND key2=x2 AND key3=x3 AND (过滤条件);
复制代码
2、通过 fullkey 批量删除记录时,SQL 语句形式如下:
DELETE FROM demo WHERE (key1=x1 AND key2=x2 AND key3=x3) OR (key1=x4 AND key2=x5 AND key3=x6);
复制代码
删除/批量删除操作不支持 partkey,批量删除操作暂不支持过滤条件。
1、通过 fullkey 更新单条记录时,SQL 语句有以下两种形式:
UPDATE demo SET value1=x1, value2=x2 WHERE key1=x1 AND key2=x2 AND key3=x3;
UPDATE demo SET value1=x1, value2=x2 WHERE key1=x1 AND key2=x2 AND key3=x3 AND (过滤条件);
复制代码
2、通过 fullkey 批量更新记录时,SQL 语句形式如下:
UPDATE demo SET value1=x1, value2=x2 WHERE (key1=x3 AND key2=x4 AND key3=x5) OR (key1=x6 AND key2=x7 AND key3=x8);
复制代码
更新/批量更新操作不支持 partkey,批量更新操作暂不支持过滤条件。
1、通过 fullkey 查询单条记录时,SQL 语句有以下四种形式:
SELECT * FROM demo WHERE key1=x1 AND key2=x2 AND key3=x3;
SELECT * FROM demo WHERE key1=x1 AND key2=x2 AND key3=x3 AND (过滤条件);
SELECT key1,value1 FROM demo WHERE key1=x1 AND key2=x2 AND key3=x3;
SELECT key1,value1 FROM demo WHERE key1=x1 AND key2=x2 AND key3=x3 AND (过滤条件);
复制代码
2、通过 partkey 查询多条记录时,SQL 语句有以下四种形式:
SELECT * FROM demo WHERE key1=x1 AND key2=x2;
SELECT * FROM demo WHERE key1=x1 AND key2=x2 AND (过滤条件);
SELECT key1,value1 FROM demo WHERE key1=x1 AND key2=x2;
SELECT key1,value1 FROM demo WHERE key1=x1 AND key2=x2 AND (过滤条件);
复制代码
3、通过 fullkey 批量查询记录时,SQL 语句的形式如下:
SELECT * FROM demo WHERE (key1=x1 AND key2=x2 AND key3=x3) OR (key1=x4 AND key2=x5 AND key3=x6);
复制代码
批量查询操作暂不支持过滤条件。
4、通过 partkey 批量查询记录时,SQL 语句的形式如下:
SELECT * FROM demo WHERE (key1=x1 AND key2=x2) OR (key1=x3 AND key2=x4);
复制代码
批量查询操作暂不支持过滤条件。
TcaplusDB 提供 sql 查询语句进行索引查询,其中,sql 查询条件中的字段必须是建立了全局索引的字段。另外,如果是聚合查询,则聚合字段也必须是建立了全局索引的字段。当前版本中,每个索引查询请求最多返回 3000 条记录。
由于数据同步到全局索引模块最多需要 1 秒钟的时间,因此,当执行插入或更新操作以后,最多需要 1 秒左右时间可以查询到最新数据。
支持 =, >, >=, <, <=, !=, between, in, not in, like, not like, and, or , 比如:
SELECT * FROM `mail` WHERE user_id>="10004" AND server_id=100;
SELECT * FROM `mail` WHERE user_id BETWEEN 10000 AND 10003 AND server_id=100;
SELECT * FROM `mail` WHERE user_id="10000" AND server_id=100 AND mail_id LIKE "210507%";
SELECT * FROM `mail` WHERE user_id>="10004" OR server_id<=200;
复制代码
注意:between 查询时,between a and b,对应的查询范围为[a, b];like 查询是支持模糊匹配,其中"%"通配符,匹配 0 个或者多个字符; “_”通配符,匹配 1 个字符;
支持 limit offset 分页查询,比如:
SELECT * FROM mail WHERE user_id>"10000" LIMIT 100 OFFSET 2;
复制代码
注意:当前 limit 必须与 offset 搭配使用,不支持 limit 1 或者 limit 0, 1
当前支持的聚合查询包括:sum, count, max, min, avg,比如:
SELECT server_id, COUNT(DISTINCT user_id), COUNT(*), SUM(state) FROM \`mail\` WHERE user_id>="10000" AND server_id=100;
复制代码
注意:聚合查询不支持 limit offset,即 limit offset 不生效;目前只有 count 支持 distinct,即select count(distinct(a)) from table where a > 1000; 其他情况均不支持 distinct。
TcaplusDB 是腾讯出品的分布式 NoSQL 数据库,存储和调度的代码完全自研。具备缓存+落地融合架构、PB 级存储、毫秒级时延、无损水平扩展和复杂数据结构等特性。同时具备丰富的生态、便捷的迁移、极低的运维成本和五个九高可用等特点。客户覆盖游戏、互联网、政务、金融、制造和物联网等领域。
| 留言与评论(共有 0 条评论) “” |