【TBase开源版测评】分布式数据自动shard分片

2020-08-03 10:53:13 浏览数 (1)

本次我们根据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分片功能有了深刻的认识,也尝试的在项目架构中考虑如何把这一特性应用到实际项目中。

0 人点赞