YupDB如何通过视图表优化小表过多导致的性能问题

设想一下假如业务有成百上千张表,每张表有上百个列,如果想要根据关键字进行大量表数据的模糊检索怎么做?难道要将所有想查的表都查一遍再整合到一起嘛?
**NO!**

这样的查询无疑是十分耗时且费力的,其实对于资源汇聚类型的搜索一条SQL即可搞定,既兼容原先的表结构,又能让业务其他部分依然可以单表查询。
假设我们的表特别多,几十张甚至几百张表,每张表的数据量又不大,大概几亿或者几十亿,如果是这种情况其实是比较浪费资源的,且可能会导致下面几种情况
1.首先每张表都要维护自己的BUFFER,有内存溢出的风险,且导入性能实在太差。
2.其次每张表都需要单独开一个线程来维护
3.除此之外,因为表的数据量不大但是数量又很多导致生成了很多小的索引文件,小索引文件过多,会导致合并索引的开销变大,NameNode也会因此变得非常繁忙

那么我们有什么办法可以整合这些小表又不会影响到这些表的独立性呢?
在YupDB中提供了视图表功能: 视图表是以一个弹性结构的物理表为基础建立的,视图表会将自身的表结构映射到物理表上,物理表会根据视图表的表结构将视图表的字段关联到已有的字段或者为其新增新的字段来存储视图表的数据。
一张物理表上面可以存放多张视图表的数据,对这些视图表进行统一的管理和心跳监控,并且将这些视图表的索引整合到一起,在物理存储层面与普通物理表相同,对用户来说对视图表的查询和对普通的物理表的查询也没有太大区别。
且在使用了视图表以后,再也不需要为各种数据量级较少的业务,维护单独的物理表结构和搭建集群了,我们可以将这些业务整合到一个集群中,维护同一份索引,数据直接使用图表进行隔离。

看到这里大家可能会有疑问,同样都是创建了很多的表,创建同样数量的视图表和物理表有什么差别呢?
其实视图表并不真实存储数据,接下来我们通过一个图示来为大家解释一下视图表和所映射的物理表的对应关系,如下图所示,数据通过视图表的映射关系将数据存储到其对应的物理表中.
如下图所示
在这里插入图片描述

接下来我们来通过测试来理解一下上面这张图的含义
首先我们创建这三张视图表,视图表table1,table2,table3 ,table4

create yup_view table1(field1 string physical@field1_y_string_id,field2 string physical@field2_y_string_id,field3 string physical@field3_y_string_id,field4 string physical@field4_y_string_id); 
create yup_view table2(field1 string physical@field1_y_string_id,field2 string physical@field2_y_string_id,field5 string physical@field5_y_string_id,field6 string physical@field6_y_string_id);
create yup_view table3(field7 string physical@field7_y_string_id,field8 string physical@field8_y_string_id);
create yup_view table4(field1 string physical@field1_y_string_id,field2 string physical@field2_y_string_id,field3 string physical@field3_y_string_id);

我们查看一下这几个视图表的表结构

desc table1;
desc  ...

table1
在这里插入图片描述
table2
在这里插入图片描述
table3
在这里插入图片描述
table4
在这里插入图片描述

我们从上图中可以看到其实视图表的表结构保存的是一个视图表与物理表的映射关系,为了更直观的展示我们手动设置了视图表字段对应物理表的哪个字段,通过’ physical@field7_y_string_id’,这个语句是用来定义视图表与物理表字段的映射关系,关于这部分会在后面进行的详细介绍。
接下来我们向这四个视图表中导入一些测试数据,之后预览一下这四个视图表中的数据
在这里插入图片描述
之后我们看一下这四个视图表所在的物理表
在这里插入图片描述
在上图中 yupdb_view_name列为该行数据所在的视图表名称,可以通过该列过滤来区分不同视图表在物理表上的数据,除此之外我们发现,我们不同视图表中的数据映射到了物理表的对应位置,且不同表的数据可指定到同一个列上,这样我们就可以通过仅检索物理表的方式来获取不同表中的数据了。
在这里插入图片描述
除此之外我们还可以指定检索某几个表
在这里插入图片描述
对于视图表的检索和分析,与普通的物理表查询相同,此处就不再赘述了。

接下来为大家介绍该如何创建和设置一个视图表
1.指定视图表与物理表的字段映射关系
在YupDB中,如果用户不指定视图表字段与物理表字段的映射关系的话,会将该字段分配给一个数据类型与视图表字段相同的物理表字段,所以为了控制视图与物理表的映射关系,我们可以通过参数来手动指定
在这里插入图片描述
在上图中,蓝色标识的部分为固定写法用于定义视图表 与物理表之间的字段映射关系,红色部分为对应的物理表字段名称,
黄色部分为对应的物理表数据类型。
2.指定视图表对应的物理表名称
在这里插入图片描述
在上图中,黑色部分为指定对应物理表名称的对应字段关键字,红色部分为对应的物理表名称,需要注意的是虽然视图表对应的物理表与普通的物理表在使用上没有太大的区别,但是在此处只能够指定一个新的表名或者是一个已经通过其他视图表指定的物理表,如果该表名称不存在,会自动创建。
3. 设置字段的汇聚方式
因设计视图表的初衷是为了进行汇聚搜索,默认视图表中的每个字段除了单独存储外,还会在物理表的yupdb_view_column进行汇聚,如果我们不需要进行这种汇聚,可以在创建视图表的时候进行标记.
下面示例中 yupdb_viewstore_config yupdb_viewstore_config viewstore@all, 表示默认对所有字段都进行汇聚, viewstore@combineonly 表示只汇聚,而不进行单独的物理存储, viewstore@fieldonly表示只在对应的字段里进行物理存储但不会进行汇聚.
另外也可以针对每一列进行个性化的配置
在这里插入图片描述
至此,关于YupDB视图表的部分就介绍到这里了,如果您对YupDB的视图表或其他功能有一些疑问和建议,欢迎访问www.yupdb.com联系我们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值