本次我们根据TBase测评操作指引说明文档体验分布式数据自动shard分片,命令和使用方式基本上跟PostgreSQL没有区别,给我们这些原来使用过PostgreSQL数据库的人能很快的上手使用。
一、体验流程
1、查看集群的数据节点情况
代码语言:javascript复制连接数据库,:psql -p 30004 -d postgres -U tbase
连接数据库
代码语言:javascript复制输入查看命令:select node_name,node_type,node_host,node_port from pgxc_node where node_type='D';
查看数据节点
这里是我已经安装好的集群的数据节点的情况。
2、创建shard表,查看数据分布情况
输入命令创建shard表:
代码语言:javascript复制create table tbase(id int,nickname text) distribute by shard(id);
创建表
这就有点莫名其妙了。官方对此问题并没有任何说明,最终查阅了部分postgresql的文档后找到解决办法:
解决错误提示
继续创建表:
创建表
使用命令创建要导入数据的订单详情表:
代码语言:javascript复制create table tbnote_qtxsdcb(f_djhm text) distribute by shard(f_djhm);
创建订单详情表
使用管理工具从原有项目的mssql数据库中的数据导入到tbase数据库中,导入后查看数据总量:
查看数据总量
随机抽取部分数据进行查看在各个数据节点的分布情况:
查看数据
查看数据
查询结果显示,数据分布在了所有的节点上,这个分布基本上是均衡的。查询的时候只需连接到TBase的Coordinator节点,可以查询分布在任何节点的数据,而无需关注数据节点分布情况。上面简单的例子可以看到业务在使用shard表时只用指定shard key,后续的查询都无需关注数据的分布情况,与使用单机数据库没有任何差别。
3、典型复杂场景分析(join为例),为了体验此功能,我们将线上项目中的订单表导入到测试集群中:
创建表命令:
代码语言:javascript复制create table tbnote_qtxsdzb(f_djhm text);
创建订单表
使用管理工具从原有项目的mssql数据库中的数据导入到tbase数据库中,导入后查看数据总量:
查看数据总量
数据导入之后,我们首先体验join key与shard key相同的情况下的join查询:
代码语言:javascript复制explain select t1.f_djhm,t2.f_hybh from tbnote_qtxsdcb as t1 join tbnote_qtxsdzb as t2 on t1.f_djhm=t2.f_djhm limit 10;
查询命令
可以下推到节点计算的场景,这个场景在分库分表的插件也可以做到。然后体验join key与shard key不同的情况下的join查询:
代码语言:javascript复制explain select t1.f_djhm,t2.f_hybh from tbnote_qtxsdcb as t1 join tbnote_qtxsdzb as t2 on t1.f_djhm=t2.f_bc limit 10;
查看数据
join无法下推的场景该场景能体现分布式的优势,分库分表的插件并不能自动的做到这种。分析上面的查询计划可以看到,需要把数d的数据都拉取到dn002上去执行join操作,这样就涉及到了数据节点的数据交互,有时候会带来比较大的网络开销,同时性能不佳。
二、体验总结
通过本次体验,对TBase的分布式数据自动shard分片功能有了深刻的认识,也尝试的在项目架构中考虑如何把这一特性应用到实际项目中。